الدرس السابع
حلقات التكرار
تستخدم الحلقات لأداء عمل معين بشكل متكرر حتى يتحقق شرط معين.
ويتم إستخدامها في البرامج بشكل واسع
الحلقة التكرارية For
وهي تعد أكثر أنواع الحلقات التكرارية شيوعا
تتطلب هذه الحلقة محددتين القيمةالبدائية والقيمة النهائية إذا كانت الحلقة تصاعدية تستخدم To وإذا كانت تنازلية نستخدم كلمة DownTo .
الصيغة العامة لجملة for التصاعدية هي
كود: for var := initial_value to end_value do begin statment; end;
|
في المثال السابق حلقة تكرر الشيفرة الممثلة بعبارة statement حتى تصل إلى القيمة النهائية end_value . لا داعي لاستخدام begin , end إذا كان جسم التكرار يتكون من عبارة واحدة. ولكن عندما نريد إضافة العديد من السطور فنحتاج لإستخدام Begin – End
الصيغة العامة لجملة for التنازلية:
كود: for var := initial_value DownTo end_value do begin statment; end;
|
في المثال السابق كتلة الشيفرة يجب أن تكون initial_value أكبر من end_value وتتناقص قيمة العداد المتغير var واحداً في كل تكرار للحلقة
مثال عملي :
أنشئ مشروعاً جديداً
وأضف له زراً Button1 ومكون المفكرة Memo1 غير الخاصة Caption للزر واجعله " ابدأ " أنشئ الحدث OnClick له ، واكتب معالج الحدث كالتالي
كود: var I:Integer;
begin
Memo1.Clear;
for I := 0 to 9 do Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I));
end;
|
الآن يمكنك تشغيل البرنامج ، إضغط الزر ابدأ وشاهد عمل الحلقة …
الحلقتين التكراريتين While - Repeat
والآن بعد أن رأيت كيف تعمل حلقة for لن يكون صعباً جداً عليك أن تطبق ذات المعنى على حلقتي while , repeat
لنلقي الآن نظرة عليهما الآن.
حلقة while
تختلف حلقة while عن الحلقة For في كونها تحتوي على شرط يفحص عند بداية كل تكرار للحلقة . طالما أن الشرط محقق تستمر الحلقة في التنفيذ ويتوقف التنفيذ للحلقة عندما يكون الشرط غير محقق .
إليك الشكل العام للحلقة while
كود: While cond_expr do Begin Statements; End;
|
حيث يفحص البرنامج الشرط cond_expr وعند تحقق الشرط فإن البرنامج ينفذ الأوامر بين الأمرين End – Begin ويعود لقراءة الشرط مرة أخرى وهكذا يستمر في تنفيذ التكرار إلى أن يصبح الشرط غير متحقق فيخرج من التكرار
وإذا كان جسم الحلقة مؤلف من عبارة واحدة فليس هناك داعي لإستخدام Begin – End
حلقة Repeat
مثل حلقة while ولكن الحلقة While تقوم بفحص الشرط في بداية الحلقة ولكن في حالة الحلقة Repeat فإن الشرط يفحص في نهاية الحلقة
إليك هذا البرنامج الذي يبين عمل الحلقة Repeat وهو نفس مثال البرنامج للحلقة For مع تعديل سطور البرنامج
ويمكن ملاحظة ان الحلقة repeat تتنفذ على الأقل مرة واحدة ولكن الحلقة While يمكن أن لا تنفذ ولا مرة
كود: Var I:Integer;
begin I:=5; Memo1.Clear;
Repeat Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I)); Dec(I); Until I=-1;
end;
|
الإجرائين Break , Continue
قبل أن ننهي الحديث عن الحلقات يجب أن نتعرف على إجرائين يساعدان على التحكم بتنفيذ البرنامج ضمن الحلقة .
- استخدم الأمر Continue لتجبر البرنامج على الانتقال إلى نهاية الحلقة متجاوزاً كل العبارات التي تليه .
- استخدم الأمر Break لتوقف عمل الحلقة مباشرة ولاتستحدم خارج الحلقات.