يک حلقه (loop) دستوری است تا زمان برآورده شدن شرطی دستورات ديگر را تکرار می کند. دستور داخل حلقه می تواند بلاکی از کد، حلقه يا هر دستور ديگری باشد.
حلقه for احتمالا متداولترین حلقه در کلیه زبان های برنامه نویسی است. وقتی بخشی از کد به تعداد معینی تکرار شود بکار برده می شود. یک عدد صحیح به عنوان شمارنده حلقه برای شمارش تعداد دفعات اجرای حلقه استفاده می شود. در دستور باید تعیین شود شمارنده از کجا شروع کند، کی متوقف شود و چقدر افزيش يا کاهش پيدا کند.
در C++ فرم کلی حلقه for به صورت زير است:
For (initial; condition; update)
{
loop_body
}
قسمت های initial، condition و update همگی عبارت هستند و با هم درون يک جفت پرانتز قرار می گيرند و توسط علامت سميکولن از هم جدا می شوند. Loop_body يا بدنه حلقه دستورات داخل حلقه است که بايد تکرار شود و می تواند يک دستور ساده يا دستور ترکيبی باشد. اگر بدنه حلقه فقط شامل يک دستور باشد نيازی به آکولاد نيست. اما اگر بيشتر از يکی باشد بايد درون آکولاد محصور شود تا به عنوان بلاکی از کد ديده شود.
حلقه for طبق دياگرام زير اجرا می شود:
همانطور که ديده می شود ابتدا مرحله initial اجرا می شود. سپس condition بررسی می شود. اگر شرط برقرار نباشد حلقه به پايان می رسد و اجرا از دستور بعدی حلقه ادامه پيدا می کند. اگر شرط درست باشد loop_body اجرا می شود. سپس قسمت update اجرا می شود.
قسمت initial تنها يکبار در ابتدای ورود به حلقه اجرا می شود و معمولا برای اعلان و مقداردهی اوليه شمارنده ها و متغيرهای داخل حلقه استفاده می شود. قسمت condition عبارت شرطی است و هربار قبل از تکرار بدنه حلقه ارزيابی می شود. اگر در آغاز غلط باشد بدنه حلقه اصلا اجرا نخواهد شد. قسمت update در هربار تکرار حلقه اجرا می شود و معمولا برای افزايش يا کاهش شمارنده حلقه استفاده می شود.
نکته. قسمت های initial، condition و update هر کدام می توانند حذف شوند.
نکته. اگر قسمت شرط حذف شود هميشه درست فرض می شود.
نکته. برای خوانائی آکولادها زير هم قرار می گيرند و دستورات داخل آنها سه space جلوتر نوشته می شود.
مثال. قطعه کد زير اعداد 1 تا 20 را نمايش می دهد.
for (count = 1; count <= 20; count++)
cout << count << endl;
با وجوديکه کاربرد اصلی دستور for برای حلقه های با تکرار معلوم است کارهای ديگری را هم می توان با آن انجام داد.
مثال. در حلقه زير چون قسمت شرط حذف شده است هميشه درست درنظر گرفته می شود و عبارت Hello را دائما چاپ می کند.
for ( ; ; )
cout << "Hello" << endl;
مثال. برنامه زير کاراکترهای اسکی را نمايش می دهد.
#include <iostream.h> int main()
{
for(int i = 0; i < 128; i++)
if (i != 26) // ANSI Terminal Clear screen
cout << " value: " << i
<< " character: " << char(i) << endl;
return 0;
}
توجه کنيد که متغير i درون for اعلان شده است و تنها در بدنه حلقه قابل استفاده است.
معمولا شمارنده حلقه به صورت صعودی افزايش پيدا می کند ولی می توان حلقه هائی داشت که متغيير شمارنده آن به صورت های ديگری تغيير می کند.
مثال. در حلقه زير شمارنده حلقه هر بار يک واحد کم می شود.
for (count = 100; count > 0; count--)
مثال. در حلقه زير شمارنده حلقه هر بار 5 واحد زياد می شود.
for (count = 0; count < 1000; count += 5)
مثال. قسمت initial نه تنها برای مقداردهی اوليه بلکه برای اعمال ديگر هم می تواند بکار برود.
count = 1;
for (cout << count ; count < 1000; count++);
مثال. در قسمت شرط حلقه می توان از عملگرهای رابطه ای و منطقی استفاده کرد.
for ( count = 0; count < 1000 && array[count] != 0; )
cout << array[count++]
مثال. بدنه حلقه می تواند يک جمله پوچ باشد. دستور زير عناصر يک آرايه را برابر با عدد 50 می کند.
for ( count = 0; count < 1000 ; array[count++] = 50 )
;
مثال. عملگر کاما را می توان برای مقداردهی يا بروزرسانی دو متغير در دستور for استفاده کرد.
for (i = 0, j = 999; i < 1000; i++, j--)
b[j] = a[i];
مثال. تا وقتی که کاربر عدد 99 را وارد کند حلقه تکرار می شود.
int nbr = 0;
for ( ; nbr != 99; )
cin >> nbr;
for تودرتو
حلقه ها مانند دستورات شرطی می توانند تودرتو باشند. يک دستور for می تواند درون دستور ديگری قرار بگيرد. در این حالت حلقه داخلی به تعداد تکرار شمارنده خود ضرب در شمارنده حلقه بیرونی تکرار می شود.
مثال. دستور cout درون حلقه داخلی 5×3=15 بار تکرار می شود.
for (int i = 1 ; i < 3 ; i++ )
{
for(int j=0 ; j < 4 ; j++ )
{
cout << "This is inner loop " << j ;
cout << " of outer loop " << i << endl;
}
}
مثال. برنامه زير با کاراکتر ستاره (*) يک مستطيل 3×20 رسم می کند.
#include <iostream.h>
int main()
{
int col=3, row=20;
for ( ; row > 0; row--)
{
for ( ; col > 0; col--)
cout << "*";
cout << endl;
}
return 0;
}
حلقه for احتمالا متداولترین حلقه در کلیه زبان های برنامه نویسی است. وقتی بخشی از کد به تعداد معینی تکرار شود بکار برده می شود. یک عدد صحیح به عنوان شمارنده حلقه برای شمارش تعداد دفعات اجرای حلقه استفاده می شود. در دستور باید تعیین شود شمارنده از کجا شروع کند، کی متوقف شود و چقدر افزيش يا کاهش پيدا کند.
در C++ فرم کلی حلقه for به صورت زير است:
For (initial; condition; update)
{
loop_body
}
قسمت های initial، condition و update همگی عبارت هستند و با هم درون يک جفت پرانتز قرار می گيرند و توسط علامت سميکولن از هم جدا می شوند. Loop_body يا بدنه حلقه دستورات داخل حلقه است که بايد تکرار شود و می تواند يک دستور ساده يا دستور ترکيبی باشد. اگر بدنه حلقه فقط شامل يک دستور باشد نيازی به آکولاد نيست. اما اگر بيشتر از يکی باشد بايد درون آکولاد محصور شود تا به عنوان بلاکی از کد ديده شود.
حلقه for طبق دياگرام زير اجرا می شود:
همانطور که ديده می شود ابتدا مرحله initial اجرا می شود. سپس condition بررسی می شود. اگر شرط برقرار نباشد حلقه به پايان می رسد و اجرا از دستور بعدی حلقه ادامه پيدا می کند. اگر شرط درست باشد loop_body اجرا می شود. سپس قسمت update اجرا می شود.
قسمت initial تنها يکبار در ابتدای ورود به حلقه اجرا می شود و معمولا برای اعلان و مقداردهی اوليه شمارنده ها و متغيرهای داخل حلقه استفاده می شود. قسمت condition عبارت شرطی است و هربار قبل از تکرار بدنه حلقه ارزيابی می شود. اگر در آغاز غلط باشد بدنه حلقه اصلا اجرا نخواهد شد. قسمت update در هربار تکرار حلقه اجرا می شود و معمولا برای افزايش يا کاهش شمارنده حلقه استفاده می شود.
نکته. قسمت های initial، condition و update هر کدام می توانند حذف شوند.
نکته. اگر قسمت شرط حذف شود هميشه درست فرض می شود.
نکته. برای خوانائی آکولادها زير هم قرار می گيرند و دستورات داخل آنها سه space جلوتر نوشته می شود.
مثال. قطعه کد زير اعداد 1 تا 20 را نمايش می دهد.
for (count = 1; count <= 20; count++)
cout << count << endl;
با وجوديکه کاربرد اصلی دستور for برای حلقه های با تکرار معلوم است کارهای ديگری را هم می توان با آن انجام داد.
مثال. در حلقه زير چون قسمت شرط حذف شده است هميشه درست درنظر گرفته می شود و عبارت Hello را دائما چاپ می کند.
for ( ; ; )
cout << "Hello" << endl;
مثال. برنامه زير کاراکترهای اسکی را نمايش می دهد.
#include <iostream.h> int main()
{
for(int i = 0; i < 128; i++)
if (i != 26) // ANSI Terminal Clear screen
cout << " value: " << i
<< " character: " << char(i) << endl;
return 0;
}
توجه کنيد که متغير i درون for اعلان شده است و تنها در بدنه حلقه قابل استفاده است.
معمولا شمارنده حلقه به صورت صعودی افزايش پيدا می کند ولی می توان حلقه هائی داشت که متغيير شمارنده آن به صورت های ديگری تغيير می کند.
مثال. در حلقه زير شمارنده حلقه هر بار يک واحد کم می شود.
for (count = 100; count > 0; count--)
مثال. در حلقه زير شمارنده حلقه هر بار 5 واحد زياد می شود.
for (count = 0; count < 1000; count += 5)
مثال. قسمت initial نه تنها برای مقداردهی اوليه بلکه برای اعمال ديگر هم می تواند بکار برود.
count = 1;
for (cout << count ; count < 1000; count++);
مثال. در قسمت شرط حلقه می توان از عملگرهای رابطه ای و منطقی استفاده کرد.
for ( count = 0; count < 1000 && array[count] != 0; )
cout << array[count++]
مثال. بدنه حلقه می تواند يک جمله پوچ باشد. دستور زير عناصر يک آرايه را برابر با عدد 50 می کند.
for ( count = 0; count < 1000 ; array[count++] = 50 )
;
مثال. عملگر کاما را می توان برای مقداردهی يا بروزرسانی دو متغير در دستور for استفاده کرد.
for (i = 0, j = 999; i < 1000; i++, j--)
b[j] = a[i];
مثال. تا وقتی که کاربر عدد 99 را وارد کند حلقه تکرار می شود.
int nbr = 0;
for ( ; nbr != 99; )
cin >> nbr;
for تودرتو
حلقه ها مانند دستورات شرطی می توانند تودرتو باشند. يک دستور for می تواند درون دستور ديگری قرار بگيرد. در این حالت حلقه داخلی به تعداد تکرار شمارنده خود ضرب در شمارنده حلقه بیرونی تکرار می شود.
مثال. دستور cout درون حلقه داخلی 5×3=15 بار تکرار می شود.
for (int i = 1 ; i < 3 ; i++ )
{
for(int j=0 ; j < 4 ; j++ )
{
cout << "This is inner loop " << j ;
cout << " of outer loop " << i << endl;
}
}
مثال. برنامه زير با کاراکتر ستاره (*) يک مستطيل 3×20 رسم می کند.
#include <iostream.h>
int main()
{
int col=3, row=20;
for ( ; row > 0; row--)
{
for ( ; col > 0; col--)
cout << "*";
cout << endl;
}
return 0;
}