الحلقات Loops في C++
الحلقات Loops يتم إستخدامها لهدف تكرار كود ما عدة مرات. أي كود نُريده أن يتم تنفيذه عدة مرات نقوم بكتابته في داخل حلقة Loop فتقوم هذه الحلقة بإعادة تنفيذ الكود ضمن شروط معينة يقوم المبرمج بتحديدها.
أنواع الحلقات في C++
- حلقة For Loop.
- حلقة While Loop.
- حلقة Do While Loop.
حلقة For Loop في C++
حلقة For Loop هي عبارة عن شرط يُستخدَم لتكرار شيئ ما عدة مرات وعادتاً ما يحتوي على قيمة نهائية.
طريقة إستخدام حلقة For Loop
for ( initial value ; coalition ; increment )
{
Statements;
}
حيث أن:
- initial value القيمة البدائية بداية الدورة.
- coalition هي شرط النهاية الذي تنتهي به الدورة.
- increment هي فرق المتغير بكل دورة مثلاً زيادة 1 بكل دورة.
مثال 1
#include <iostream>
using namespace std;
int main()
{
int i;
for(i=1; i<10; i++)
cout << "NUSURTECH" << endl;
}
وعند تشغيل هذا الكود سوف تكون نتيجته هي
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
NUSURTECH
نلاحظ أنه طَبَعَ لنا الكلمة 9 مرات لأننا بدأنا من الرقم 1.
مثال 2
#include <iostream>
using namespace std;
int main()
{
int a = 0;
for(;a < 10;)
{
cout << a << endl;
a++;
}
}
نتيجة هذا الكود ستكون
0
1
2
3
4
5
6
7
8
9
نستطيع اختصار الكود السابق بسطر واحد كالتالي
#include <iostream>
using namespace std;
int main()
{
for (int a = 0; a < 10; a++)
{
cout << a << endl;
}
}
حلقة While Loop في C++
حلقة While Loop تتكوَّن من شرط واحد فقط إذا كان هذا الشرط صحيح يبقى بداخل الحلقة أما إذا كان خاطئ سوف يتوقف عن الدورة ويكون المتغير خارج الأقواس.
طريقة إستخدام حلقة While Loop
while( condition )
{
/ statements
increment ;
}
مثال 3
#include <iostream>
using namespace std;
int main(){
int x = 0;
while ( x < 10 )
{
cout << "NUSUR TECH" << endl;
x++;
}
}
أنشأنا متغير x خارج الأقواس وعيننا له قيمة 0 ووضعنا حلقة وشرط إذا كان x أصغر من 10 يعني. ما دامت أصغر من الرقم 10 إطبع لنا على الشاشة كلمة NUSUR TECH عشر مرات.
وكتبنا ++x و التعليق x=x+1, في كل دورة سوف يتحقق ويُضيف لها 1 إلى أن تُطبَع عشر مرات.
وعند تشغيل الكود سوف تكون نتيجته كما يلي:
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
NUSUR TECH
حلقة Do While Loop في C++
حلقة Do While Loop نستخدمها إذا كنا نُريد تنفيذ الكود عدة مرات, ولكننا لا نعرف كم مرة في التحديد لأننا نريد إيقاف التنفيذ إذا تحقق شرط معين.
هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها.
طريقة إستخدام حلقة Do While Loop
do
{
statement
}while (condition);
يتم إستخدام do while لأجل تكرار جزء من البرنامج المُستخدَم عدة مرات.
إذا كان رقم التكرار غير ثابت فيلزم علينا إستخدام الحلقة مرة واحدة على الأقل.
و الأفضل هنا إستخدام هذه الحلقة do while, ويتم تنفيذ التكرار مرة على الأقل لأنه يتم التحقق من الحالة أثناء الحلقة.
مثال 4
#include <iostream>
using namespace std;
int main(){
int x = 0;
do{
cout << "Saja" << endl;
x++;
}while(x<5);
return 0;
}
في المثال عيننا قيمة 0 أي يبدأ العد من الصفر و كتبنا الـ do ثم وضعنا أمر الطباعة للكلمة Saja.
و أعطينا ++x لأجل الزيادة بواحد في كل دورة ووضعنا شرط الـ while إذا كانت x أصغر من 5 يكمل الدورة للدورة التي تليها وهكذا سوف يطبع لنا الجمله خمس مرات.
عند تشغيل هذا البرنامج سنحصل على النتيجة
Saja
Saja
Saja
Saja
Saja
مثال 5
#include <iostream>
using namespace std;
int main(){
int x = 1;
do{
cout << x << endl;
x++;
}while(x<=7);
return 0;
}
أنشأنا متغير عددي وهو x و قيمته هي 1 ثم فتحنا حلقة do و كتبنا بها إطبع قيمة x و قم بالزيادة عليها 1 في كل دورة.
ثم وضعنا شرط بعد كلمة while وهو إذا كانت x أصغر أو يساوي 7 نفذ الأكواد
عند تشغيل ستكون النتيجة
1
2
3
4
5
6
7
مثال 6
#include <iostream>
using namespace std;
int main(){
int x = 1;
do{
int j = 1;
do{
cout<<x<<"\n";
j++;
}while (j <= 3);
x++;
}while(x <= 3);
}
عند تشغيل الكود سوف تكون النتيجة
1
1
1
1
2
2
2
3
3
3
الفرق بين While و Do While
- الـ while تختبر الشرط في البداية ثم تنفذه إذا تحقق ذلك, ويمكن أن لا يتنفذ شيئ.
- الـ do while تتنفذ اولاً ثم تختبِر الشرط بإستمرار وقد يكون لها تنفيذ واحد على الأقل.
جمل التحكم مع الحلقات
جمل التحكم Control Statements نستخدمها للتحكم في سير تنفيذ الحلقات, و أيضاً مع جملة الشرط switch.
يوجد نوعين من جمل التحكم في الحلقات التكرارية وهما:
- Break Statement.
- Continue Statement.
جملة break في لغة C++
جملة break تكون وظيفتها إيقاف حلقة التكرار عند تحقق شرط معين أو عدة شروط معينة وعند تنفيذها يتم إيقاف الحلقة (أي الخروج من loop).
بمجرد أن تتنفذ جملة break فإنها توقف الـ scope بأكمله و تخرج منه, و تمسحه من داخل الذاكرة ثم تنتقل للكود الذي يليه في البرنامج.
طريقة تعريف جملة break
تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد.
break;
مثال 7
#include <iostream>
using namespace std;
int main(){
int count;
for (count=1;count<=10;count++)
{
if (count==5)
break;
cout<<count<<"";
}
cout<<"\n break out of the loop"<<count<<endl;
return 0;
}
قمنا بإنشاء متغير عددي وهو count و أنشأنا حلقة for تكرارية و أعطينا قيمة للمتغير count وهي 1 أي من الرقم 1 يبدأ العداد.
وقلنا في حال كانت قيمة العداد اصغر أو يساوي 10 ثم بتزويد واحد في كل دورة بواسطة count++.
ووضعنا شرط إذا قيمة العداد هي 5 قم بإيقاف الحلقة التكرارية فوراً, أي عندما يصل إلى الرقم 5 يتم إيقاف الحلقة وطباعة الأرقام لـ count.
وبعده طلبنا طباعة جملة و يكتب بها أنه تم إيقاف اللوب عند الرقم الذي يتوقف عنده العداد.
عند تشغيل البرنامج ستكون النتيجة
1234
break out of the loop5
كما لاحظنا بأن عبارة break تتنفذ اذا الشرط كان صحيحاً أي إذا كان count يساوي 5 لن يطبع شيئ بعدها وسيتوقف و يخرج عن اللوب.
مثال 8
#include <iostream>
using namespace std;
int main(){
for (int o=0; o<10 ; o++){
if (o==5) {
break;
}
cout << o << endl;
}
return 0;
}
في هذا المثال قلنا له إطبع من 1 إلى 10 و طالما o أقل من 10 إبقى زد 1 في كل عملية و عندما وصل إلى 5 توقف لأننا وضعنا له break ليتوقف و عرض لنا العد من 0 حتى 4.
عند تشغيله سنحصل على الناتج
0
1
2
3
4
جملة continue في لغة C++
جملة continue تقوم بالتنقل من الحلقة الحالية الذي نعمل بها إلى الحلقة التالية دون اكمال تنفيذ ما تتظمنه الحلقة الحالية من اكواد.
نستخدم الجملة continue لتجاوز تنفيذ كود معين في الحلقة, إذاً نستخدمها لتجاوز جزء من كود الـ scope.
و نستخدمها تحديداً لإيقاف الدورة الحالية و الإنتقال إلى الدورة التالية في الحلقة.
طريقة تعريف جملة continue
تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد.
continue;
مثال 9
#include <iostream>
using namespace std;
int main(){
int count;
for (count=1;count<=10;count++)
{
if (count==5)
continue;
cout<<count<<"";
}
cout<<"\n break out of the loop"<<count<<endl;
return 0;
}
قمنا بإنشاء متغير عددي وهو count و أنشأنا حلقة for تكرارية و أعطينا قيمة للمتغير count وهي 1 أي من الرقم 1 يبدأ العداد.
وقلنا في حال كانت قيمة العداد اصغر أو يساوي 10 ثم بتزويد واحد في كل دورة بواسطة count++.
ووضعنا شرط إذا قيمة العداد وصلت إلى 5 قم بتجاهل الرقم 5 و أكمل حتى النهاية, أي عندما يصل إلى الرقم 5 يتم تجاهله و إكمال اللوب وطباعة الأرقام لـ count.
وبعده طلبنا طباعة جملة و يكتب بها أنه تم إيقاف اللوب عند الرقم الذي يتوقف عنده العداد.
عند تشغيل البرنامج ستكون النتيجة
1234678910
break out of the loop11
هذا نفس المثال الأول في break نلاحظ عندما وضعنا continue تجاهل لنا الرقم 5 و اكمل الدورة حتى انتهى منها.
مثال 10
#include <iostream>
using namespace std;
int main(){
for (int o=0; o<10 ; o++){
if (o==5) {
continue;
}
cout << o << endl;
}
return 0;
}
في هذا المثال قلنا له إطبع من 1 إلى 10 و طالما o أقل من 10 إبقى زد 1 في كل عملية و عندما وصل إلى 5 تجاهله لأننا وضعنا له continue, و عرض لنا العداد من 0 حتى 9 و تجاهل الرقم 5.
وعند تشغيل الكود ستكون النتيجة
0
1
2
3
4
6
7
8
9
حلقة الدوران المتداخلة في C++
حلقات الدوران المتداخلة, في هذا الدرس سوف نتعرف على كيفية إستعمال حلقة for loop بداخل حلقة ثانية for loop.
فماذا تتوقعوا إذا كررّنا سطراً برمجياً ثلاثة مرات؟.
على سبيل المثال إذا كان لدينا حلقة for تُكرر لنا طباعة النجمة * ثلاثة مرات و كانت هذه الحلقة. بداخل حلقة for تكررِّ ثلاث مرات و تقوم بطباعة سطراً جديد بعد إنتهاء حلقة for الداخلية.
for (int i = 0; i < 3; i++ )
{
for (int j = 0; j < 3; j++)
{
cout << "* ";
}
count << endl;
}
تبدأ أولاً قيمة i بالصفر 0 و سوف تَمُر على for loop الداخلية و سوف تبدأ قيمة المتغير j بالصفر كذلك.
و ستبدأ حلقة for loop الداخلية بطباعة ما بداخلها و التكرار حتى تنتهي الحلقة الداخلية و تَطبَع سطر جديد.
و تَزيد قيمة i للحلقة الخارجية و تبدأ بالدوران مجدداً و سوف تدخُل للحلقة الداخلية مجدداً و تتعرف j من الصفر مرة أخرى.
و تقوم بنفس العمل حتى ينتج عندنا مربع بعرض ثلاث نجمات و طول ثلاث نجمات و هذا هو جواب ما يحصل إذا كان عندنا سطراً برمجي يكرر سطراً برمجي ثلاث مرات.
مثال 1
قُم بكتابة برنامج في لغة C++ يقوم بطباعة مربع من النجوم.
#include <iostream>
using namespace std;
int main()
{
int h;
cout << "Enter the length of the square:" << endl;
cin >> h;
for(int j=0; j<h; j++)
{
for(int i=0; i<h; i++)
{
cout << "* ";
}
cout << endl;
}
return 0;
}
في البداية لقد أنشأنا متغير عددي int و هو بإسم h ووضعنا رسالة تظهر للمستخدم ببداية البرنامج تُطالبه بإدخال طول المربع المطلوب.
و دالة cin هي التي سوف تستقبل القيم المٌدخَلة من المستخدم.
و دخلنا في حلقة for خارجية و هذه الحلقه سوف تقوم بالدوران بعدد الرقم h الذي سوف يدخله المستخدم.
و الحلقة الداخلية هي من ستقوم بطباعة سطر من النجوم في كل دورة و في النهاية وضعنا cout<<endl لكي يتم وضع النجوم في الدورة الثانية بسطر جديد.
و عند تشغيل البرنامج و كتابة رقم 3 سوف نحصل على النتيجة.
و إذا ادخلنا رقم 5.
كما نلاحظ عندما أدخلنا رقم 3 طبع لنا مربع ثلاثي و عند إدخال الرقم 5 طبع لنا مربع خماسي.
مثال 2
قُم بكتابة برنامج يقوم بطباعة شكل مستطيل من النجوم ( يتم بالطلب من المُستخدِم بإدخال طول المربع ثم عرضه أو العكس).
#include <iostream>
using namespace std;
int main()
{
int h, w;
cout << "Enter the width of the box:" << endl;
cin >> w;
cout << "Enter the length of the square:" << endl;
cin >> h;
for(int j=0; j<h; j++)
{
for(int i=0; i<w; i++)
{
cout << "* ";
}
cout << endl;
}
return 0;
}
في هذا المثال يجب أن يكون لدينا متغيرين من اجل الطول و العرض و المتغيرين هم h و w و قمنا بمطالبة. المستخدم أن يدخل طول المربع و عرض المربع عن طريق دالة الإستقبال cin.
و قمنا بالدخول في حلقة تكرارية و كان بها متغير إسمه j و قيمته هي الصفر 0 ثم قلنا له أن j اصغر من h و قم بزيادة واحد في كل دورة.
و أنشأنا حلقة داخلية ايضاً من نوع for و كان بداخلها متغير عددي قيمته 0 و هو i ثم قلنا له i اصغر من. w و قم بزيادة واحد بكل دورة, ووضعنا له أن يطبع النجمه و بكل انتهاء سطر يبدأ بسطر آخر جديد.
بحال ادخَلت عرض 10 و طول 6 ستكون النتيجة.
و إذا أدخلنا عرض 9 و طول 4 ستكون.
مثال 3
اٌكتب برنامج يطلب من المستخدم رقم ثم يقوم البرنامج ببناء مثلث قائم الزاوية من الرقم المدخل حيث يكرر كل رقم على عدده إنتهاءً بالرقم واحد 1.
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Enter a number : ";
cin >> n;
for(int i = n; i > 0; i--)
{
for (int j = 0; j < i; j++)
cout << i << " ";
cout << endl;
}
return 0;
}
في البداية قمنا بتعريف متغير عددي n ثم قمنا بمطالبة المستخدم بإدخال رقم و إستخدمنا الدالة cin للطلب من المستخدم كتابة رقم لإستقباله.
و قُمنا بفتح حلقة for خارجية و كان بهذه الحلقة متغير عددي هو i و قيمته هي قيمة المتغير n الذي سيُدخلهُ المستخدم.
و قلنا للبرنامج عندما تكون i اكبر من 0 و قم بإنقاص رقم من الحلقة الخارجية بكل دورة أي. اذا بدأت من الرقم 5 في الدورة الثانية ستصبح 4 و هكذا إلى ان تصل للرقم 1.
و بعدها دخلنا لحلقة for الداخلية و كان بها متغير عددي j و قيمته هي 0 و قلنا له j اصغر من 1 و في كل دورة قم بزيادة العداد واحد.
و في النهاية عبر دالة الطباعه قلنا له أن يطبع قيمة المتغير i لأن هذا المتغير هو الذي سوف يطبع. في كل دورة و ينزل سطر ثاني لأجل عناصر الحلقة التي تليها تكون في سطر جديد.
بحال ادخل المستخدم الرقم 4 سينتج ما يلي.
بحال ادخل المستخدم رقم 9.
هذا مفهوم الحلقات التكرارية و جمل التحكم بإختصار, في حال أعجبكم الدرس فضلاً إدعمنا بمشاركته على وسائل التواصل