الحلقة التكرارية بتعمل إيه؟
الفكرة الأساسية
الحلقة تكرر مجموعة أوامر ما دام الشرط يسمح. في C تجمع for البداية وشرط الاستمرار والتحديث في مكان واحد. تفحص while الشرط قبل التكرار، بينما تفحصه do-while بعد تنفيذ الجسم، ولذلك ينفذ جسمها مرة واحدة على الأقل.
اختر الشكل الذي يجعل قاعدة التوقف واضحة. اسأل دائمًا: ما الذي يتغير؟ ولماذا ستتوقف الحلقة في النهاية؟
تتبع مثالًا كاملًا
#include <stdio.h>
int main(void) {
int values[] = {2, 4, 6};
size_t count = sizeof values / sizeof values[0];
int total = 0;
for (size_t i = 0; i < count; ++i) {
total += values[i];
}
printf("%d\n", total);
return 0;
}
الناتج 12. أماكن عناصر المصفوفة هي 0 و1 و2، ولذلك الشرط i < count. عندما يصبح i مساويًا 3، يفشل الشرط قبل قراءة عنصر جديد.
| الفهرس | القيمة المضافة | المجموع بعدها |
|---|---|---|
| 0 | 2 | 2 |
| 1 | 4 | 6 |
| 2 | 6 | 12 |
حساب count هنا يعتمد على مصفوفة محلية فعلية. لا تنسخ تعبير sizeof إلى دالة تستقبل مصفوفة كمعامل وتتوقع نفس النتيجة؛ هذا المعامل يُعامل كمؤشر.
خطأ زيادة أو نقص تكرار
لو استخدمت i <= count فستحاول قراءة مكان بعد آخر عنصر. ولو توقفت عند i < count - 1 في هذا المثال، ستترك آخر عنصر دون جمعه.
فكر في المجال الصحيح: نبدأ من صفر ونتوقف قبل العدد. ظهور نتيجة تبدو سليمة بعد قراءة خارج المصفوفة لا يجعل العملية صحيحة؛ هذا وصول بسلوك غير معرّف.
الجمع مختلف عن العد
لو تريد عدد القيم الأكبر من 3، ابدأ العداد بصفر وأضف واحدًا عند تحقق الشرط. لا تضف قيمة العنصر نفسه. في 2 و4 و6 يوجد عنصران أكبر من 3، بينما مجموعهما 10.
هذا تعديل مفيد على التمرين: شكل الحلقة قريب، لكن معنى الناتج تغير. اختر اسمًا للمتغير يعبر عن وظيفته.
راجع التوقف قبل التشغيل
حدد أول فهرس وآخر فهرس صحيح وما الذي يتغير بعد كل مرور. وفي while تأكد أن جسم الحلقة يستطيع تقريب الحالة من التوقف.
جرّب مصفوفة بعنصر واحد. وعندما تصمم دالة تستقبل عدد العناصر، اختبر حالة العدد صفر بطريقة صحيحة؛ لا تنشئ مصفوفة C بطول صفر كاختصار.
بعد فهم هذه الحالات، انتقل إلى تقسيم العمل في دوال مع تحديد طول البيانات المطلوب بوضوح.
مراجع وتفاصيل الكورسات
المراجع التالية تساعد على متابعة التعلم. الأمثلة والتمارين في هذا المقال تعليمية، وتفاصيل الكورسات تُراجع من الكتالوج.