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

حلقات التكرار for و while

بدل كتابة الأمر نفسه مرارًا، نطلب من الحاسب تكراره ما دام الشرط صحيحًا.

i <= 5 ? 123…
بعد هذا الدرس ستستطيع أن:
  • تكتب حلقة while و for وتحدّد أجزاءها الثلاثة.
  • تتتبّع تنفيذ الحلقة خطوة بخطوة.
  • تتجنّب الحلقة اللانهائية.
  • تستخدم الحلقات المتداخلة.

١الفكرة

طباعة الأرقام من 1 إلى 100، أو إعادة سؤال حتى تصحّ الإجابة: كلاهما تكرار. والحلقة while تعني: «طالما الشرط صحيح، كرّر».

الصيغة العامة
while (الشرط){    // الكود الذي يتكرّر}
افحص الشرط←true: نفّذ ثم عُد للفحص·false: اخرج

٢الأجزاء الثلاثة لأي حلقة

١. التهيئةقيمة البداية، قبل الحلقةint i = 1;
٢. الشرطمتى نستمر، في رأس الحلقةi <= 5
٣. التغييرخطوة الاقتراب من التوقّف، داخل الحلقةi++;
🔎 تتبّع: طباعة 1 إلى 5
Main.java
int i = 1; while (i <= 5){    System.out.println(i);    i++;}
Variables · المتغيّرات في الذاكرة
Output×

لاحظ أن الشرط يُفحص 6 مرّات: خمس مرّات true، والسادسة false عندما تصبح i = 6.

٣مثال تطبيقي: جمع الأرقام من 1 إلى 5

🔎 تتبّع المجموع
Main.java
int i = 1;int sum = 0; while (i <= 5){    sum = sum + i;    i++;}System.out.println("المجموع = " + sum);
Variables · المتغيّرات في الذاكرة
Output×

٤الحلقة اللانهائية

🔎 ماذا لو نسينا i++؟
Main.java
int i = 1;while (i <= 5){    System.out.println(i);    // نسينا i++}
Variables · المتغيّرات في الذاكرة
Output×

٥تشريح رأس الحلقة

for ( int i = 1① التهيئة (مرّة); i <= 5② الشرط (قبل كل دورة); i++④ الزيادة (بعد كل دورة)) { ③ الكود المتكرّر }

تُفصل الأجزاء الثلاثة بفاصلة منقوطة ; وليست فاصلة عادية.

🔎 ترتيب التنفيذ ① ② ③ ④
Main.java
for (int i = 1; i <= 5; i++){    System.out.println(i);}
Variables · المتغيّرات في الذاكرة
Output×

٦for مقابل while

العمل نفسه، لكن for تجمع ما كان متفرّقًا:

while
snippet
int i = 1;while (i <= 5) {    System.out.println(i);    i++;}
for
snippet
for (int i = 1; i <= 5; i++) {    System.out.println(i);}
forwhile
متى؟عدد التكرارات معروف مسبقًاعدد التكرارات غير معروف
مثالكرّر 10 مرّات، أو من 1 إلى nكرّر حتى يُدخل المستخدم 0

٧أمثلة

العدّ التنازلي باستخدام --

Main.java
for (int i = 5; i >= 1; i--){    System.out.println(i);}
Output – JavaApplication (run)×
run:
5
4
3
2
1
BUILD SUCCESSFUL (total time: 0 seconds)

جمع الأرقام من 1 إلى 5

Main.java
int sum = 0; for (int i = 1; i <= 5; i++){    sum = sum + i;}System.out.println("المجموع = " + sum);
Output – JavaApplication (run)×
run:
المجموع = 15
BUILD SUCCESSFUL (total time: 0 seconds)
صمّم حلقتك

غيّر البداية والشرط والخطوة، وشاهد القيم التي تمرّ بها i.

قيم i في كل دورة

٨نقاط مهمة

توقّع وتحقّق

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

snippet
int i = 0;while (i < 3){    System.out.println("مرحبا");    i++;}

كم مرّة تُطبع «مرحبا» عند تنفيذه؟

i = 0 و 1 و 2‏ ← ‏ثلاث مرّات، وعند 3 يتوقّف.

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

snippet
int x = 10;while (x < 5){    System.out.println(x);    x++;}

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

الشرط 10 < 5 خطأ من البداية، فلا تُنفَّذ الحلقة.

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

snippet
int i = 1;while (i <= 5){    System.out.println(i);    i++;}

ما قيمة i بعد انتهاء الحلقة؟

تتوقّف عندما يصبح الشرط false أي عند i = 6.

ما الذي يسبّب الحلقة اللانهائية غالبًا؟

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

snippet
for (int i = 0; i < 5; i++){    System.out.println(i);}

كم مرّة يتكرّر جسم الحلقة؟

i = 0, 1, 2, 3, 4.

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

snippet
for (int i = 2; i <= 10; i = i + 2)    System.out.print(i + " ");

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

أي جزء من رأس for يُنفَّذ مرّة واحدة فقط؟

تأمل رأس الحلقة التالي،

snippet
for (int i = 1, i <= 5, i++){    System.out.println(i);}

ما الخطأ فيه؟

الخلاصة

تحدٍّ برمجي: جدول الضرب

سهل

اطبع جدول ضرب العدد 7 من 1 إلى 10 باستخدام حلقة for.

المطلوب:
  • كل سطر بالشكل: 7 x 1 = 7
  • استخدم متغيّرًا للعدد حتى يسهل تغييره.

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

Table.java
public class Table{    public static void main(String[] args)    {        int n = 7;         // for (…)     }}
Output – المطلوب×
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
💡 تلميح 1
for (int i = 1; i <= 10; i++)
💡 تلميح 2
الطباعة: n + " x " + i + " = " + (n * i)

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

Table.java
public class Table{    public static void main(String[] args)    {        int n = 7;         for (int i = 1; i <= 10; i++)        {            System.out.println(n + " x " + i + " = " + (n * i));        }    }}

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

التدريب العملي 25: طباعة كلمة عشر مراتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 26: العدّ التنازلي من 10 إلى 0من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 27: تكرار طباعة الاسممن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 28: الأعداد من 0 إلى 20 بخطوة 5من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 29: الأعداد الزوجية من 1 إلى 20من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 30: مضروب العددمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 31: جدول ضرب العدد 4من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 32: طباعة شكل النجوم (حلقات متداخلة)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 33: جدول ضرب الأعداد من 1 إلى 3 (حلقات متداخلة)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←