📘 شرح الدرس الوحدة 3: القرار والتكرار وتشخيص الأخطاء · الدرس 6 من 17
الدرس 6
📋 في الخطة: الوحدة 5. العبارات الشرطية · ⏱ 1 نظري + 5 عملي

العبارات الشرطية: if و switch

حتى الآن كان البرنامج ينفّذ كل سطر من الأعلى إلى الأسفل. الآن يتّخذ قرارًا: إذا تحقّق شرط فافعل كذا.

if true ✓ false → else
بعد هذا الدرس ستستطيع أن:
  • تكتب جملة if و if…else وسلسلة else if.
  • تكتب if المتداخلة وتربط الشروط بالرموز المنطقية.
  • تكتب جملة switch مع case و break و default.
  • تختار بين if و switch حسب طبيعة المسألة.
الجزء الأول: جملة if

١الفكرة

نضع شرطًا نتيجته true أو false، فيُنفَّذ الكود المرتبط به فقط عند تحقّقه.

الشرطgrade >= 60 «ناجح» else: «راسب» يكمل البرنامج true false

٢الصور الأربع لجملة if

١. if بمفردها: نفّذ أو تجاوز

Main.java
int age = 20; if (age >= 18){    System.out.println("مسموح لك بالدخول");}
Output – JavaApplication (run)×
run:
مسموح لك بالدخول
BUILD SUCCESSFUL (total time: 0 seconds)

لو كان العمر أقل من 18 لا يُطبع شيء.

٢. if … else: اختر بين مسارين

Main.java
int grade = 50; if (grade >= 60){    System.out.println("ناجح");}else{    System.out.println("راسب");}
Output – JavaApplication (run)×
run:
راسب
BUILD SUCCESSFUL (total time: 0 seconds)

٣. if … else if … else: عدّة شروط بالترتيب

يُنفَّذ أوّل شرط يتحقّق فقط، ثم يخرج. و else الأخيرة لبقية الحالات.

حرّك الدرجة وراقب المسار
int
snippet
int grade = 75; if (grade >= 90) {    System.out.println("ممتاز");}else if (grade >= 80) {    System.out.println("جيد جدًا");}else if (grade >= 70) {    System.out.println("جيد");}else {    System.out.println("راسب");}
الناتج
الشروط التي فُحصت

٤. if المتداخلة: شرط داخل شرط

جرّب الشرطين
int;
snippet
int age = 20;boolean hasTicket = true; if (age >= 18) {    if (hasTicket) {        System.out.println("تفضّل بالدخول");    }}
الناتج

٣أخطاء شائعة

✗ خطأ
snippet
if (x = 5)
✓ صواب
snippet
if (x == 5)

= إسناد، و == مقارنة. داخل الشرط نحتاج المقارنة.

✗ خطأ
snippet
if (age >= 18);{    System.out.println("مسموح");}
✓ صواب
snippet
if (age >= 18){    System.out.println("مسموح");}

الفاصلة المنقوطة بعد الشرط تُنهي جملة if فارغة، فتُنفَّذ الكتلة دائمًا مهما كان الشرط.

الجزء الثاني: جملة switch

٤الفكرة والصيغة

بديل أنظف عن سلسلة if … else if عندما نسأل: هل قيمة المتغيّر تساوي إحدى هذه القيم؟ والمقارنة تكون مع رقم أو حرف أو نصّ.

الصيغة العامة
switch (المتغيّر){    case القيمة_الأولى:        // كود يُنفّذ عند التطابق        break;    case القيمة_الثانية:        // كود آخر        break;    default:        // إذا لم تتطابق أي قيمة}
العنصروظيفته
caseقيمة نقارن بها المتغيّر
breakيوقف الجملة ويخرج منها بعد تنفيذ الحالة
defaultتُنفَّذ إذا لم تتطابق أي حالة (اختيارية لكنها مستحسنة)

٥جرّب: رقم اليوم‏ ← ‏اسمه

مختبر switch

اختر قيمة day، ثم جرّب إلغاء break من إحدى الحالات.

int
snippet
int day = 3; switch (day){    case 1:        System.out.println("الأحد");        break;    case 2:        System.out.println("الاثنين");        break;    case 3:        System.out.println("الثلاثاء");        break;    default:        System.out.println("رقم غير صحيح");}
الناتج

مثال: المقارنة مع حرف

Main.java
char grade = 'B'; switch (grade){    case 'A': System.out.println("ممتاز");     break;    case 'B': System.out.println("جيد جدًا");  break;    case 'C': System.out.println("جيد");       break;    default:  System.out.println("يحتاج تحسين");}
Output – JavaApplication (run)×
run:
جيد جدًا
BUILD SUCCESSFUL (total time: 0 seconds)

٦تجميع الحالات: ترك break عمدًا

الحالات التي لها الناتج نفسه تُكتب متتالية بلا break بينها:

snippet
case 'A':case 'B':    System.out.println("ناجح بتقدير مرتفع");    break;

٧switch أم if؟

switchif
نوع المقارنةمساواة متغيّر واحد بقيم ثابتةمجالات أو منطق مركّب
أمثلةرقم قائمة، حرف تقدير، رقم يومالدرجة أكبر من 60، أو شرطان معًا

توقّع وتحقّق

تأمل الكود التالي،

snippet
int x = 10;if (x > 15)    System.out.println("كبير");else    System.out.println("صغير");

ماذا سيكون الناتج عند تنفيذه؟

10 > 15 خطأ، فيُنفَّذ else.

تأمل الكود التالي،

snippet
int grade = 95;if (grade >= 90)    System.out.println("ممتاز");else if (grade >= 80)    System.out.println("جيد جدًا");else if (grade >= 70)    System.out.println("جيد");else    System.out.println("مقبول");

كم رسالة تُطبع عند تنفيذه؟

أوّل شرط متحقّق فقط يُنفَّذ، ولو تحقّقت الشروط التالية أيضًا.

تأمل الكود التالي،

snippet
if (age >= 18){    if (hasTicket)        System.out.println("تفضّل بالدخول");}

متى تُطبع العبارة «تفضّل بالدخول»؟

يمكن كتابتها أيضًا بشرط واحد: age >= 18 && hasTicket.

أي سطر صحيح؟

تأمل الكود التالي،

snippet
int n = 2;switch (n){    case 1: System.out.print("A ");    case 2: System.out.print("B ");    case 3: System.out.print("C ");    default: System.out.print("D");}

ماذا سيكون الناتج عند تنفيذه؟

لا يوجد break، فيكمل من case 2 حتى النهاية (fall-through).

أي حالة لا تناسب switch؟

المجالات تحتاج if.

متى يُنفَّذ default؟

ما فائدة break داخل switch؟

الخلاصة

تحدٍّ برمجي: مُقدِّر الدرجات

متوسط

حوّل الدرجة إلى تقدير، ثم حدّد هل الدرجة زوجية أم فردية.

المطلوب:
  • 90 فأكثر ممتاز، 80 جيد جدًا، 70 جيد، 60 مقبول، وأقل من 60 راسب.
  • استخدم سلسلة if … else if … else.
  • استخدم % 2 لمعرفة الزوجي والفردي.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

Grader.java
public class Grader{    public static void main(String[] args)    {        int grade = 67;         // 1) التقدير         // 2) زوجي أم فردي    }}
Output – المطلوب×
التقدير: مقبول
الدرجة فردية
💡 تلميح 1
رتّب الشروط من الأعلى إلى الأدنى: >= 90 ثم >= 80 …
💡 تلميح 2
الرقم زوجي إذا كان grade % 2 == 0.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

Grader.java
public class Grader{    public static void main(String[] args)    {        int grade = 67;         if (grade >= 90)            System.out.println("التقدير: ممتاز");        else if (grade >= 80)            System.out.println("التقدير: جيد جدًا");        else if (grade >= 70)            System.out.println("التقدير: جيد");        else if (grade >= 60)            System.out.println("التقدير: مقبول");        else            System.out.println("التقدير: راسب");         if (grade % 2 == 0)            System.out.println("الدرجة زوجية");        else            System.out.println("الدرجة فردية");    }}

🧪 تدريبات المذكرة العملية

التدريب العملي 11: زوجي أم فرديمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 12: ناجح أم راسبمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 13: التقدير من المجموع النهائيمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 14: الرقم الأكبر من ثلاثةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 15: القسمة بشرط ألا يكون المقسوم عليه صفرًامن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 16: مقارنة العدد بالعدد 10من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 17: عمولة المبيعاتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 18: موجب أم سالب أم صفرمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 19: حساب قيمة y من المعادلةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 20: رموز الكلياتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 21: هل العدد ضمن المجال من 1 إلى 20؟من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 22: آلة حاسبة بسيطةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 23: القسمة على 3 أو 4من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 24: خصم المشترياتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 25: علاوة التقدير (switch)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 26: اسم اليوم (switch)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 27: عدد أيام الشهر (switch)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←