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

حلقات التكرار والتحكم فيها

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

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

١الفكرة

طباعة الأرقام من 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 في كل دورة

٨نقاط مهمة

٩الفرق الجوهري

whileافحص‏ ← ‏ثم نفّذ. قد لا تعمل ولو مرّة.
do…whileنفّذ‏ ← ‏ثم افحص. تعمل مرّة واحدة على الأقل.
الصيغة العامة
do{    // الكود الذي يتكرّر}while (الشرط);

١٠جرّب الفرق بنفسك

الحلقتان جنبًا إلى جنب

غيّر قيمة x. عند 5 يكون الشرط x > 10 خاطئًا من البداية.

int
while
int x = 5;while (x > 10){    System.out.println("نُفّذت");}
الناتج
do…while
int x = 5;do{    System.out.println("نُفّذت");}while (x > 10);
الناتج

١١الاستخدام الأنسب: قائمة إدخال

يجب أن تظهر القائمة قبل أن نعرف اختيار المستخدم، ثم تتكرّر حتى يختار الخروج.

Menu.java
import java.util.Scanner; public class Menu{    public static void main(String[] args)    {        Scanner input = new Scanner(System.in);        int choice;         do        {            System.out.println("1) بدء");            System.out.println("2) مساعدة");            System.out.println("0) خروج");            System.out.print("اختر: ");            choice = input.nextInt();        }        while (choice != 0);   // كرّر حتى يُدخل 0         System.out.println("تم الخروج");    }}
محاكي القائمة

أنت المستخدم: اختر رقمًا في كل مرّة.

الناتج

متى تستخدمها؟ عندما يجب تنفيذ الكود مرّة واحدة على الأقل ثم تقرّر التكرار: القوائم، والتحقّق من الإدخال، وإعادة المحاولة. وفي غير ذلك، while و for أكثر شيوعًا.

الجزء الثاني: التحكم في الحلقات break و continue

١٢الفرق في جملة واحدة

breakتُنهي الحلقة كلّها وتخرج منها فورًا، ويكمل البرنامج ما بعدها.
continueتتخطّى بقية الدورة الحالية فقط، وتقفز إلى الدورة التالية. الحلقة مستمرّة.

وتأتي كلتاهما غالبًا داخل شرط if يتحقّق من حالة معيّنة.

١٣الحلقة نفسها بالكلمتين

🔎 مع break
Main.java
for (int i = 1; i <= 5; i++){    if (i == 3)        break;    System.out.println(i);}System.out.println("انتهت الحلقة");
Variables · المتغيّرات في الذاكرة
Output×

🔎 مع continue
Main.java
for (int i = 1; i <= 5; i++){    if (i == 3)        continue;    System.out.println(i);}System.out.println("انتهت الحلقة");
Variables · المتغيّرات في الذاكرة
Output×

breakcontinue
ماذا يفعل؟يُنهي الحلقة كلّهايتخطّى الدورة الحالية فقط
ثم ماذا؟يخرج من الحلقة نهائيًّايعود لأعلى الحلقة للدورة التالية
ناتج المثال1 21 2 4 5

١٤أمثلة تطبيقية

break: ابحث ثم توقّف

Main.java
int target = 7; for (int i = 1; i <= 10; i++){    if (i == target)    {        System.out.println("وجدته عند: " + i);        break;   // لا داعي لإكمال باقي الأرقام    }}
Output – JavaApplication (run)×
run:
وجدته عند: 7
BUILD SUCCESSFUL (total time: 0 seconds)

continue: اطبع الفردي فقط

Main.java
for (int i = 1; i <= 6; i++){    if (i % 2 == 0)        continue;            // تخطَّ الزوجي    System.out.println(i);   // اطبع الفردي فقط}
Output – JavaApplication (run)×
run:
1
3
5
BUILD SUCCESSFUL (total time: 0 seconds)

١٥نقاط مهمة

توقّع وتحقّق

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

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);}

ما الخطأ فيه؟

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

snippet
int n = 0;do{    System.out.println("Hi");}while (n > 5);

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

do…while تنفّذ أولًا، ثم 0 > 5 false فتتوقّف.

ما الذي يميّز do…while عن while؟

أي موقف يناسب do…while أكثر؟

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

snippet
for (int i = 1; i <= 6; i++){    if (i == 4) break;    System.out.print(i + " ");}

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

عند i = 4 تخرج الحلقة قبل الطباعة.

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

snippet
for (int i = 1; i <= 6; i++){    if (i == 4) continue;    System.out.print(i + " ");}

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

تُتخطّى الدورة التي فيها i = 4 فقط.

أي كلمة تناسب: «عندما تجد الرقم المطلوب توقّف عن البحث»؟

الخلاصة

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

سهل

اطبع جدول ضرب العدد 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));        }    }}

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

التدريب العملي 28: طباعة كلمة عشر مراتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 29: العدّ التنازلي من 10 إلى 0من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 30: تكرار طباعة الاسممن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 31: الأعداد من 0 إلى 20 بخطوة 5من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 32: الأعداد الزوجية من 1 إلى 20من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 33: مضروب العددمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 34: جدول ضرب العدد 4من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 35: جمع الأعداد حتى إدخال صفر (do-while)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 36: جمع الأعداد حتى إدخال صفر (break)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 37: تجاهل مضاعفات العدد 3 (continue)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 38: طباعة شكل النجوم (حلقات متداخلة)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 39: جدول ضرب الأعداد من 1 إلى 3 (حلقات متداخلة)من مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←