الدرس 4 من 10
الحلقات
- 13 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
التكرار بـ for وwhile وحلقة داخل حلقة
الشرح
تستعمل for حين تعرف عدد مرّات التكرار، وفي for (int i = 1; i <= n; i++) ثلاثة أجزاء تفصل بينها فاصلتان منقوطتان: القيمة التي يبدأ بها العدّاد، وشرط يُفحص قبل كل دورة، وخطوة تُنفَّذ بعد كل دورة. وi++ تزيد العدّاد واحدًا، وtotal += i تضيف i إلى المجموع. وانتبه إلى الحدّ، فإذا كتبت < مكان <= ضاعت الدورة الأخيرة دون أي تنبيه.
وتستعمل while (n != 0) حين لا تعرف عدد الدورات مسبقًا، فهي تكرّر ما دام الشرط متحقّقًا، كأن تقسم العدد على 10 ما دام فيه شيء. أما do { ... } while (n != 0); فتفحص شرطها بعد الدورة وليس قبلها، فتدور مرّة واحدة على الأقل. وانتبه إلى الحلقة التي لا يتغيّر فيها ما يفحصه شرطها، فإذا نسيت n /= 10 دارت الحلقة إلى ما لا نهاية حتى يوقفها الخادم بعد ثوانٍ.
وبالحلقة داخل الحلقة ترسم الأشكال، فالحلقة الخارجية تمرّ على الأسطر، والداخلية ترسم السطر الواحد، ويأتي حدّها من عدّاد الحلقة الخارجية مثل for (int i = 0; i < row; i++). واجعل لكل حلقة عدّادًا باسم مختلف.
المطلوب
أكمل int sumTo(int n) بـ for لتُرجع مجموع الأعداد من 1 إلى n، وصفرًا إذا كان n صفرًا أو سالبًا. ثم أكمل int countDigits(int n) لتُرجع عدد أرقام n بقسمته على 10 مرّة بعد مرّة، واعلم أنّ للصفر رقمًا واحدًا، وأنّ أرقام العدد السالب تُعدّ بلا الإشارة، فـ countDigits(-907) تساوي 3. وأخيرًا اطبع من main هذا الدرج وحده بحلقتين متداخلتين: # ثم ## ثم ### ثم ####، كل واحد في سطر.
الفحوص
6 فحوص- ناتج sumTo(5) يساوي 15
- ناتج sumTo(1) وsumTo(100) صحيح
- الدالة sumTo تُرجع صفرًا للصفر والسالب
- ناتج countDigits(12345) يساوي 5، وناتج countDigits(7) يساوي 1
- الدالة countDigits تعدّ للصفر رقمًا واحدًا، وتعدّ أرقام السالب بلا إشارته
- طُبع الدرج بأسطره الأربعة فقط