الدرس 4 من 10
الحلقات
- 15 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
التكرار بـ for وwhile وforeach
الشرح
تستعمل for حين تعرف عدد مرّات التكرار، وفي سطرها الأول ثلاثة أجزاء: البداية int i = 1، والشرط i <= 5 الذي يُفحص قبل كل دورة، والخطوة i++ التي تُنفَّذ بعد كل دورة. والفرق بين < و<= دورة كاملة، وهذا من أشهر أخطاء الحلقات.
وتكرّر while (hp > 0) ما دام شرطها صحيحًا، وتناسب الحالات التي لا تعرف فيها عدد الدورات مسبقًا، مثل «اضرب حتى يسقط العدوّ». وتأكّد أن شيئًا داخل الحلقة يقرّبها من نهايتها، وإلا ظلّت تدور حتى يوقفها الخادم. أما foreach (char c in row) فتمرّ على كل عنصر في المجموعة دون عدّاد، والنصّ نفسه مجموعة من الأحرف من نوع char.
ولكل نوع عددي حدّ أقصى، فأكبر قيمة يحملها int نحو 2.1 مليار (int.MaxValue)، وإذا تجاوزتها انقلبت القيمة إلى عدد سالب دون أي تحذير. والمضروب يكبر بسرعة، فمضروب 13 أكبر من أن يتّسع له int، ولذلك استعمل long الذي يصل حدّه إلى نحو 9.2 مليار مليار.
المطلوب
أكمل SumTo(n) لتجمع الأعداد من 1 إلى n باستعمال for، وFactorial(n) لتُرجع مضروب n من نوع long، علمًا بأن مضروب الصفر يساوي 1، وHitsToKill(hp, damage) لتعدّ بـ while الضربات اللازمة حتى تصل الصحّة إلى الصفر أو أقلّ، وCountWalls(row) لتعدّ بـ foreach الجدران '#' في صفّ من خريطة اللعبة. ثم اطبع من Main جدول ضرب 7 من 1 إلى 5، كل عملية في سطر بالشكل 7 x 3 = 21، ولا تطبع شيئًا غيره.
الفحوص
6 فحوص- ناتج SumTo(5) يساوي 15، وناتج SumTo(100) يساوي 5050
- ناتج Factorial(5) يساوي 120، ومضروب الصفر 1
- ناتج Factorial(20) صحيح لأنه من نوع long
- الدالة HitsToKill تحسب أربع ضربات بضرر 30 لصحّة 100
- الدالة CountWalls تعدّ الجدران #
- طُبع جدول ضرب 7 من 1 إلى 5 وحده