0

تابع الدرس التاسع

يتناول هذا الدرس حل مشاكل الدروس السابقة كما انه يحتوي علي شرح تفصيل لجملة switch بناء علي طلب المتابعين ..




تابع الدرس التاسع
الأخوة الكرام السلام عليكم ورحمة الله وبركاته

حل الأسئلة المقدمة في الدرس الثامن :
المطلوب :

احتاج إلي كود لهذه الدائرة عند الضغط علي الضاغط الموجود يضاء الليد الأول وإذا ضغط مرة ثانية يضاء الليد الأول والثاني ومرة أخري يضاء الليد الأول والثاني والثالث وهكذا إلي أن يضئ الثماني ليدات والضغطة التالية تطفئ جميع الليدات ونعيد من جديد.
كود المشروع الصحيح مع الشرح ..

 نلاحظ انه تم تعريف متغير من النوع char واسمه x وقيمته المبدئية تساوي صفر وتم استخدام الجملة If  لمراقبة حالة الضاغط فإذا تم الضغط عليه يتم الدخول إلي جملة while  حتي تحرير الضاغط فإذ تم ذلك يقوم البرنامج بزيادة المتغير x بقيمة مقدارها واحد صحيح وبعد ذلك ندخل إلي جملة switch  لاختبار حالة المتغير x فإذا كانت تساوي 1 يضاء الليد الأول فقط وإذا كانت 2 يضاء الأول والثاني وهكذا وإذا وصلت قيمة المتغير X إلي 9 يتم إطفاء جميع الليدات وإعادة قيمة المتغير إلي صفر مره أخري نلاحظ أيضا استخدام الأمر break وفائدته الخروج من الجملة switch في حالة تحقق احد الشروط ولا يختبر الشروط الاخري .

·       كان هناك سؤالين أخريين بالدرس الثامن لم يجيب عليهم احد لذا تم تأجيل الإجابة عليهم لإعطاء مهلة لحلهم .
من قام بحل هذا السؤال :
م/ محمد التوم .. الحل صحيح بنسبة 100% ..
 ملاحظات علي الأخ محمد التوم :
قمت باستخدام الأمر Trisa=9; .. وهذا يعني استخدامك الطرف الأول والرابع كدخل ونحن نحتاج الطرف الأول فقط فكان من الأفضل استخدام الأمر Trisa=1;.

حل الأسئلة المقدمة في الدرس التاسع:
إجابة السؤال الأول :
1.   يوجد خطاء في هذه الاكواد فما هو :
1. 
void main (){
Trisb=0;portb=0;
Char x = 7;
Portb = x;}
الخطاء هنا انه لا يمكن تعريف متغير في هذا الموضع فمكن المتغير أم قبل الدالة أو بعدها مباشرة .
الكود الصحيح هو :
void main (){
Char x = 7;
Trisb=0;portb=0;
Portb = x;}
--------------------
2.
void main (){
Trisa=1; Trisb=0; portb=0;
If (porta.f0=0){portb=1}
}
يوجد خطاء في الدالة الشرطية فان علامة = هي علامة تخصيص والمفوض أن تكون == وليست واحدة وهناك فصلة منقوطة ناقصة
الكود الصحيح هو :
void main (){
Trisa=1; Trisb=0; portb=0;
If (porta.f0==0){portb=1;}
}

--------------------
3.
while (2 ) {
Portb.f0 = 0; Delay_ms(100);
Portb.f0 = 1 ; Delay_ms(100);
}
لا يوجد خطاء بهذا الكود
--------------------
4.
Loop;
Portb.f0 = 0; Delay_ms(10);
Portb.f0 = 1 ; Delay_ms(10);
Goto loop;
الخطاء هنا الفصلة المنقوطة لأنه عند استخدام كلمة العنوان يجب أن تنتهي بـ : وليست ;
الكود الصحيح هو :
Loop:
Portb.f0 = 0; Delay_ms(10);
Portb.f0 = 1 ; Delay_ms(10);
Goto loop;

اعتبر البعض الكود المكتوب بحروف كبيرة خطاء وذلك صحيح ولكن كتابة الكود علي المدونة قد يكون به أحرف كبير لذلك لا تشغل بالك بها ويجب عليك عدم نقل الكود عن طريق النسخ ولكن قم بكتابته بنفسك .
من قام بحل هذا السؤال :
م /  محمد التوم .. الحل صحيح بنسبة .. 75% .. هناك خطاء في النقطة الرابعة .
م / Hasan Hadi12 .. الحل صحيح بنسبة .. 100%.
م / Eng Moamer10 .. الحل صحيح بنسبة .. 90%.. هناك خطاء في النقطة الثانية.

إجابة السؤال الثاني :
تم توصيل عدد 2 ليد في البورت B نحتاج إلي إضاءة الليد الأول 25 مرة بفاصل 100 ملي ثانية بين عملية الإنارة والإطفاء أم الليد الثاني نضيئه 10 مرات فقط بفاصل 250 ملي ثانية.
هذا  هو الحل

تم تعريف متغير X ثم تم إنشاء حلقة تكرارية لتكرار إضاءة الليد الأول 25 مرة بفاصل 100 ملي ثانية ثم تم إنشاء حلقة تكرارية أخري لإضاءة الليد الثاني 10 مرات بفاصل 250 ملي ثانية .
نلاحظ هنا إننا اكتفينا بتعريف متغير واحد فقط فنحن لسنا بحاجة لتعريف متغير لكل حلقة إلا إذا كانت الحلقات متدخلة .

من قام بحل هذا السؤال :
م /  محمد التوم .. الحل صحيح بنسبة .. 100%.
م / Hasan Hadi12 .. الحل صحيح بنسبة .. 100%.
م / Eng Moamer10 .. الحل صحيح بنسبة .. 100%.. لست بحاجة لاستخدام متغيرين.
م / GeorgeM13 .. الحل صحيح بنسبة .. 100%.. لست بحاجة لاستخدام متغيرين.

إجابة السؤال الثالث :
حاول إنشاء مشروع لإخراج القيم من 1 إلي 37 علي البورت B باستخدام الحلقات التكرارية .. سوف تحتاج لتوصيل 6 ليدات علي البورت لرؤية الخرج.
هذا  هو الحل

اعتقد أن الحل لا يحتاج لشرح .
من قام بحل هذا السؤال :
م /  محمد التوم .. الحل صحيح بنسبة .. 100%.
م / Hasan Hadi12 .. الحل صحيح بنسبة .. 100%.
م / Eng Moamer10 .. الحل صحيح بنسبة .. 100%.. حل ممتاز ولكنه يشمل القيمة صفر.
م / GeorgeM13 .. الحل صحيح بنسبة .. 90%.. الكود لا يصل للقيمة 37 فهو يتوقف عند 36 .
==============
احد المتابعين طلب إعادة شرح جملة switch وده الشرح
زى ما قلنا قبل كده أن جملة switch تستخدم لاختبار أكثر من حالة للشرط طيب ازي
أنا أقولك :
مثال: احتاج إلي كود لاختبار حالة المتغير X فإذا كان يساوي 1 يتم إخراج القيمة 1 علي البورت B وإذا كان يساوي 2 يتم إخراج القيمة 15 وإذا كان يساوي 10 يتم إخراج القيمة 7.
طيب أنا ممكن احل الموضوع ده بطريقتين الأولي باستخدام IF والثانية باستخدام Switch شوف الصورة دي فيها الحل :

هي دي بقي switch يعني إيه أنا بكتب اسم الحاجة اللي عاوز اختير قيمتها بين القوسين دول ()  وبعد كده بضيف القيمة اللي يتحقق عندها الشرط بعد كلمة case وبعدها نحط نقطتين فوق بعض ":" وبعد كده نكتب الأوامر اللي أنا عاوز ها تنفذ لما الشرط يتحقق . بس كده
يعني اللي هيحصل كالتالي : البرنامج يشوف قيمة X لو لقاها 1 يخرج القيمة 1 ولو 2 يخرج 15 ولو10 يخرج 7 نلاحظ انه يختبرها 3 مرات حتي لو أتحقق شرط منهم وفي الحالة دي ممكن أخليه بمجرد ما يتم تحقيق شرط واحد ميختبرش باقي الشروط .... طيب أزاي؟؟؟ . باستخدام الأمر Break.
زى السؤال الأول في الدرس ده.
يا رب يكون الموضوع سهل ولو في أي مشكلة ياريت نقول
·       إذا كنت لم تتطبق مشاريع الدروس السابق رجاء طبقها حتي تستطيع الاستفادة من هذه الدورة.
·       تذكر لا يتم النظر إلي الاكواد الموجودة في التعليقات رجاء قم بتحميلها علي أي موقع وسيتم مراجعتها .



تنويه هام
قد يتأخر الدرس التالي يوم أو اثنين عن الوقت الطبيعي لطرحه  وذلك بسبب إجراء بعض التغيرات علي المدونة وتشمل هذه التغيرات إضافة أقسام جديدة لها وذلك للوصل إلي المستوي الذي نحلم به
وقد يشمل هذا التغير عنوان المدونة لذلك متابعتنا علي صفحتي الشخصية في الفيس بوك للحصول علي العنوان الجديد
او مراسلتي عبر الالكتروني

والله الموفق

ليست هناك تعليقات :

إرسال تعليق