ال

الحلقات في C++

12 تمرينًا

نبذة عن الحلقات

تُستخدم الحلقات لتنفيذ بعض المنطق بشكل متكرر. النوعان الأكثر شيوعًا هما while loop (التكرار غير المحدد) وfor loop (التكرار المحدد أو المعدود). وهناك أيضًا for each حلقة، التي ستظهر في مفهوم لاحق.

الصيغة العامة

تتكوّن for loop من ترويسة ومن كتلة كود تحتوي على جسم الحلقة محاطًا بالأقواس المعقوفة. تتكوّن الترويسة من 3 مكوّنات تفصل بينها الفواصل المنقوطة ;: عبارة التهيئة، والشرط، وتعبير آخر. ويمكن أن يكون كلٌّ من هذه المكوّنات فارغًا.

for (init-statement; condition; expression) {
  some_statement;
}
  • مكوّن التهيئة هو كود يُنفَّذ مرة واحدة فقط قبل أن تبدأ الحلقة.
  • مكوّن الشرط يجب أن يكون تعبيرًا يُقيَّم إلى قيمة منطقية ويتحكّم في متى يجب أن تتوقّف الحلقة. سيُنفَّذ الكود داخل الحلقة ما دام هذا الشرط يُقيَّم إلى صحيح. وبمجرد أن يُقيَّم هذا التعبير إلى خطأ، لن تُنفَّذ أي تكرارات أخرى للحلقة.
  • مكوّن التعبير هو كود سيُنفَّذ في نهاية كل تكرار.

تُنفِّذ while loop جسمها ما دام فحص شرطها صحيحًا. يوضّح مقطع الكود التالي كيفية تحويل حلقة for إلى حلقة while.

init-statement;
while(condition) {
    some_statement;
    expression;
}

استطراد: الزيادة والنقصان

عند العمل مع الحلقات، يُطلب غالبًا إضافة 1 إلى متغير العدّاد أو طرح 1 منه. هذا أمر شائع جدًا لدرجة أن للعملية عاملين خاصين: ++ و--.

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

int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3

حلقات For: مثال

عادةً ما يُهيّئ مكوّن التهيئة متغير عدّاد، ويتحقّق الشرط مما إذا كان ينبغي متابعة الحلقة أو إيقافها، فيما يزيد المكوّن اللاحق العدّاد عادةً في نهاية كل تكرار.

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

ستجمع هذه الحلقة الأعداد من 1 إلى 9 (بما في ذلك 9).

Break و Continue

داخل جسم الحلقة، يمكنك استخدام الكلمة المفتاحية break لإيقاف تنفيذ الحلقة بالكامل:

int sum{2};
while(true) {
    sum *= 2;
    if (sum > 1000)
        break;
}
// sum is now 1024

في المقابل، تُوقف الكلمة المفتاحية continue تنفيذ التكرار الحالي فقط وتُتابع مع التكرار التالي:

int equal_sum{0};
for (int i{1}; i < 7; ++i) {
  if  (n%2 == 1) {
    continue;
  }
  equal_sum += i;
}
// equal_sum is now 12

ملاحظة: عادةً ما يكون فهم منطق الحلقة أسهل عندما يكون استخدام break وcontinue في أدنى حدّ أو مُتجنَّبًا تمامًا.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم الحلقات

التدريب مقفل

افتح 4 تمارين إضافية لممارسة الحلقات