رسم الأشكال (المثلثات)
يمكنك استخدام منطق الحلقات المتداخلة لإنشاء أشكال مختلفة، على سبيل المثال يمكنك رسم مثلث.
هذا البرنامج يحتوي على حلقة for متداخلة تطبع مثلثًا من النجوم إلى شاشة المخرجات. تتكرر الحلقة الخارجية 5 مرات، وتتكرر الحلقة الداخلية لكل تكرار للحلقة الخارجية.
#include <iostream> using namespace std; int main() { for ( size_t i = 1; i <= 5; i++) { for ( size_t j = 1; j <= i; j++) { cout << "*"; } cout << endl; } return 0; }
فيما يلي شرح خطوة بخطوة لما يحدث عند تشغيل هذا البرنامج:
- يعرّف البرنامج متغيرين إثنين
i
وj
ويعطيهما قيمة بدائية تساوي 1. - يبدأ البرنامج بحلقة الدوران الخارجية for.
- الشرط في الحلقة الخارجية يتحقق إذا كانت قيمة المتغير
i
أقل أو يساوي 5. إذا كانت كذلك، يتم الإنتقال إلى حلقة الدوران الداخلية. - الشرط في الحلقة الداخلية يتأكد ما إذا كانت قيمة المتغير
j
أقل أو تساوي قيمة المتغيرi
.إذا كانت كذلك، يقوم البرنامج بطباعة نجمة إلى شاشة المخرجات. - الحلقة الداخلية تقوم بزيادة قيمة المتغير
j
بمقدار 1. - تقوم الحلقة الداخلية بتكرار الخطوات 4 إلى 5 حتى تصبح قيمة المتغير
j
أكبر من قيمة المتغيرi
. - بعد انتهاء حلقة for الداخلية، يقوم البرنامج بطباعة حرف السطر الجديد إلى شاشة المخرجات.
- حلقة for الخارجية تقوم بزيادة قيمة المتغير
i
بمقدار 1. - تقوم الحلقة الخارجية بتكرار الخطوات 3 إلى 8 حتى تصبح قيمة المتغير
i
أكبر من 5:
مخرجات البرنامج تكون كالتالي:
* ** *** **** *****
ماذا لو أردنا رسم المثلث السابق بشكل مقلوب؟
نغير الشرط الموجود في حلقة for الخارجية.
هذا البرنامج يحتوي على حلقة متداخلة تطبع مثلثًا مقلوبًا من النجوم إلى شاشة المخرجات. تتكرر الحلقة الخارجية تنازليًّا من 5 إلى 1، وتتكرر الحلقة الداخلية لكل تكرار للحلقة الخارجية.
#include <iostream> using namespace std; int main() { for ( size_t i = 5; i >= 1; i--) { for ( size_t j = 1; j <= i; j++) { cout << "*"; } cout << endl; } return 0; }
فيما يلي شرح خطوة بخطوة لما يحدث عند تشغيل هذا البرنامج:
- يعرّف البرنامج متغيرين إثنين
i
وj
ويعطيهما قيمًا بدائية 5 و 1 على التوالي. - يبدأ البرنامج بحلقة الدوران الخارجية for.
- الشرط في الحلقة الخارجية يتحقق إذا كانت قيمة المتغير
i
أكبر أو تساوي 1. إذا كانت كذلك، ينتقل إلى حلقة for الداخلية. - الشرط في الحلقة الداخلية يتأكد ما إذا كانت قيمة المتغير
j
أقل أو تساوي قيمة المتغيرi
.إذا كانت كذلك، يقوم البرنامج بطباعة نجمة إلى شاشة المخرجات. - الحلقة الداخلية تقوم بزيادة قيمة المتغير
j
بمقدار 1. - تقوم الحلقة الداخلية بتكرار الخطوات 4 إلى 5 حتى تصبح قيمة المتغير
j
أكبر من قيمة المتغيرi
. - بعد انتهاء حلقة for الداخلية، يقوم البرنامج بطباعة حرف السطر الجديد إلى شاشة المخرجات.
- حلقة for الخارجية تنقّص من قيمة المتغير
i
بمقدار 1. - تقوم الحلقة الخارجية بتكرار الخطوات 3 إلى 8 حتى تصبح قيمة المتغير
i
أقل من 1.
مخرجات البرنامج تكون كالتالي:
***** **** *** ** *
هل نستطيع جعل الرسمة أكثر صعوبة؟
يطبع هذا الرمز مثلثًا قائمًا من النجوم إلى شاشة المخرجات. تتكرر الحلقة الخارجية من 1 إلى 5، وتتكرر الحلقة الداخلية من 4 إلى قيمة المتغير i
حيث يكون i
هو رقم التكرار الحالي في حلقة الدوران الخارجية.
#include <iostream> using namespace std; int main() { for ( size_t i = 1; i <= 5; i++) { for ( size_t j = 4; j >= i; j--) { cout << " "; } for (size_t k = 1; k <= i; k++) { cout << "*"; } cout << endl; } return 0; }
فيما يلي شرح خطوة بخطوة لما يحدث عند تشغيل هذا البرنامج:
- هذا البرنامج يُعرّف 3 متغيرات
i
,j
، وk
ويعطيهم القيم البدائية 1، 4 و 1، على التوالي. - يبدأ البرنامج بحلقة الدوران الخارجية for.
- الشرط في الحلقة الخارجية يتحقق إذا كانت قيمة المتغير
i
أقل أو يساوي 5. إذا كانت كذلك، يتم الإنتقال إلى حلقة الدوران الداخلية. - الشرط في الحلقة الداخلية يتأكد ما إذا كانت قيمة المتغير
j
أكبر أو تساويi
، يقوم البرنامج بطباعة مساحة إلى شاشة المخرجات. - ثم تتناقص قيمة المتغير في الحلقة الداخلية
j
بمقدار 1. - تقوم الحلقة الداخلية بتكرار الخطوات 4 إلى 5 حتى تصبح قيمة المتغير
j
أقل منi
. - بعد انتهاء حلقة for الداخلية، يقوم البرنامج بطباعة نجمة على شاشة المخرجات لكل تكرار للحلقة الداخلية.
- يقوم البرنامج بعد ذلك بطباعة حرف السطر الجديد إلى شاشة المخرجات.
- حلقة for الخارجية تقوم بزيادة قيمة المتغير
i
بمقدار 1. - تقوم الحلقة الخارجية بتكرار الخطوات 3 إلى 9 حتى تصبح قيمة المتغير
i
أكبر من 5:
مخرجات البرنامج تكون كالتالي:
* ** *** **** *****
دعونا نطبعه رأسًا على عقب!
#include <iostream> using namespace std; int main() { for ( size_t i = 5; i >= 1; i--) { for ( size_t j = 4; j >= i; j--) { cout << " "; } for (size_t k = 1; k <= i; k++) { cout << "*"; } cout << endl; } return 0; }
انظروا إلى ما لدينا هنا!
***** **** *** ** *
لنرسم مثلثًا مختلفًا
#include <iostream> using namespace std; int main() { int e = 1; for (int a = 1; a <= 5; a++) { for (int b = 4; b >= a; b--) { cout << " "; } for (int c = 0; c < e; c++) { cout << "*"; } cout << endl; e = e + 2; } return 0; }
فيما يلي شرح خطوة بخطوة لما يحدث عند تشغيل هذا البرنامج:
- يقوم البرنامج بتعريف 4 متغيرات
e
,a, c
، وb
ويعطيهم القيم البدائية 1، 1، 0 و 4، على التوالي. - يبدأ البرنامج بحلقة الدوران الخارجية for.
- الشرط في الحلقة الخارجية يتحقق إذا كانت قيمة المتغير
a
أقل أو يساوي 5. إذا كانت كذلك، يتم الإنتقال إلى حلقة الدوران الداخلية. - الشرط في الحلقة الداخلية يتأكد ما إذا كانت قيمة المتغير
b
أكبر أو تساويa
، يقوم البرنامج بطباعة مساحة إلى شاشة المخرجات. - ثم تتناقص قيمة المتغير في الحلقة الداخلية
b
بمقدار 1. - تقوم الحلقة الداخلية بتكرار الخطوات 4 إلى 5 حتى تصبح قيمة المتغير
b
أقل منa
. - بعد انتهاء حلقة for الداخلية، يقوم البرنامج بطباعة نجمة على شاشة المخرجات لكل تكرار للحلقة الداخلية.
- يقوم البرنامج بعد ذلك بطباعة حرف السطر الجديد إلى شاشة المخرجات.
- حلقة for الخارجية تقوم بزيادة قيمة المتغير
a
بمقدار 1. - تقوم الحلقة الخارجية بتكرار الخطوات 3 إلى 9 حتى تصبح قيمة المتغير
a
أكبر من 5:
مخرجات البرنامج تكون كالتالي:
* *** ***** ******* *********
دعونا نطبعه رأسًا على عقب!
#include <iostream> using namespace std; int main() { int e = 9; for (int r = 1; r <= 5; r++) { for (int c = 0; c < e; c++) { cout << "*"; } cout << endl; e = e - 2; for (int s = 0; s < r; s++) { cout << " "; } } return 0; }
المخرجات:
********* ******* ***** *** *
يمكنك أيضًا استخدام الحلقات المتداخلة لرسم أشكال أخرى، مثل المربعات والمستطيلات والمعينات.