1- عبارة for
تستخدم حلقة for عندما نحتاج للتحكم فى دورة حلقة تكرار, حيث يمكن "إعداد عبارتها للبدءinitialization" و "تزايد incrementأو تناقص" متغير التحكم . يتم أولا "تقييم" أو اختبار الشرط conditionفإذا كان صواب true يتم تنفيذ أوامر الحلقة . فى كل دورة تنفذ يتم تزايد أو تناقص قيمة المتغير .
صيغة عبارة for :
كود:
for (initialization; condition; increment) statement;
Or
for (initialization; condition; increment)
{
...
command A1
command A2
...
}
عبارة for الأساسية تبدأ بكلمة for يليها قوسين ( ) (قوس بداية وقوس نهاية) بداخلهما ثلاثة بارامترات يفصل بينهما الفاصلة المنقوطة ";" .
حيث :
initialization : هو تعبير يستخدم لإعداد (تهيئة) متغير التحكم فى الحلقة للبدء .
condition : هو الشرط الذى يحدد استمرار تكرار الحلقة من عدمه , طالما أن هذا الشرط صواب فسوف تستمر الحلقة فى التنفيذ .
increment : هو تزايد بواحد فى قيمة متغير الحلقة مع كل دورة تكرار للحلقة .
بعد قوس النهاية تكتب العبارة أو العبارات المراد تنفيذها فى حالة صحة الشرط condition .
مثال :
كود:
int count;
for (count = 0;count = 10; count ++) PORTB = count;
· فى الكود السابق , يتم إعداد متغير عداد الحلقة count للبدء بتحميله (تخصيص) بالقيمة صفر.
· ثم يتم تقييم الشرط count = 10فإن تحقق الشرط يتم تنفيذ أوامر الحلقة PORTB = count.
· بعد تنفيذ جميع أوامر الحلقة يتم تزايد المتغير بقيمة واحد count ++ .
· يتم تكرار الحلقة طالما أن الشرط متحقق .
· آخر حلقة عندما تصبح قيمة متغير عدادا الحلقة بمدخل عبارة ifبالقيمة 10 : count = 10 حيث يتم تنفيذ أوامر الحلقة وفى نهايتها يتزايد متغير عداد الحلقة بواحد أى بالقيمة 11 وهذه القيمة تجعل الشرط غير صواب ويتم الخروج من الحلقة إلى العبارة التالية لها .
مثال آخر :
كود:
int v, d;
for (v = 0; v = d; v ++)
{
Command A
Command B
}
هذ المثال يعمل بالطريقة التالية :
1- تخصيص القيمة صفرللمتغير v = 0 .
2- تقييم الشرط v = d .
3- تنفيذ الأوامر Command Aو Command Bطالما أن الشرط صواب true.
4- تزايد المتغير بواحد v ++.
5- بعد هذا التزايد تتكرر الحلقة ويتم مقارنة القيمة الجديدة مع قيمة المتغير d ويتكررالتتابع بدءا من الخطوة رقم 2 .
6- ينتهى التكرار عندما لا يتحقق الشرط v = d .
الفائدة الرئيسية لحلقة for هى مرونتها , فهى تقبل أى تعبير صالح بلغة السى حتى لو كان هذا التعبير ليس له علاقة مباشرة بالحلقة .
المثال البسيط لتطبيق حلقة for هو إنشاء تأخيرات بزمن صغير small time delays كما يلى :
كود:
int delay;
for (delay = 0; delay <1000; delay ++);
هذه الحلقة تسبب استمرار عملية التزايد فى المتغير delay بدءا من الصفر وحتى يساوى 1000 .
لاحظ أن كود البرنامج التالى صالح للاستخدام :
كود:
for (n = 0; (n <100) && portb.f0; n ++)
فى المثال السابق يتم تزايد المتغير n 100 مرة طالما أن الطرف RB0 يظل فى الحالة المرتفعة . عندما يتحول الطرف RB0 إلى الحالة المنخفضة تنتهى على الفور الحلقة لعدم تحقق الشرط
(n <100) && portb.f0 (&& العامل المنطقى "و" true&&true>>>true) .