المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


آموزش:برنامه نویسی:حلقه های شرطی

حلقه های شرطی

بر خلاف دستور شرطی که شرط خود را تنها یک بار چک می کند و اگر برقرار باشد دستورات بلو ک خود را اجرا می کند، حلقه های شرطی به این صورت عمل می کنند که شرط داخل خود را بررسی می کنند و تا زمانی که شرطشان برقرار باشد دستورات داخل بلوکشان اجرا خواهند شد. این حلقه ها از دو نوع هستند که در زیر به توضیح آن ها می پردازیم.

while

تکه کد زیر را که صورت کلی این نوع حلقه است، در نظر بگیرید.

while (condition) {
    //statement
}

عملکرد این حلقه شرطی به این صورت است: ابتدا شرط حلقه چک می شود، اگر شرط آن برقرار باشد داخل حلقه شده و دستورات آن اجرا می شود. بعد از اجرای دستورات دوباره شرط حلقه چک می شود و اگر برقرار باشد باز هم داخل حلقه شده و دستورات آن را اجرا می کند و این روند تا زمانی که شرط حلقه برقرار باشد ادامه می یابد.

do while

این نوع حلقه شرطی هم همانند حلقه شرط while است با این تفاوت که دستورات داخل بلوک آن حداقل یک بار اجرا می شوند. برای درک این مسعله صورت کلی آن را در نظر بگیرید.

do {
    //statement
} while(condition);

همان طور که از صورت کلی این حلقه هم نمایان است، زمانی که برنامه به این قسمت می رسد وارد حلقه شده و دستورات را انجام می دهد و سپس شرط حلقه را چک می کند. بنابراین واضح است که در این حالت دستورات حداقل یک بار اجرا می شوند. به علامت نقطه ویرگول(semicolon) بعد از پرانتز دقت کنید. این نقطه ویرگول اجباری است و در صورت نگذاشتن آن با syntax error مواجه می شوید.

مثال

int i = 0;
while(i < 0) {
    if( i == 0 )
        i= -10;
    cout<<i<<endl;
    i++;
}
int i = 0;
do {
    if ( i == 0 )
        i = -10;
    cout<<i<<endl;
    i++;
} while (i<0) ;

در کد اول چون شرط حلقه برقرار نیست بنابراین برنامه وارد حلقه نشده و هیچ چیزی چاپ نمی کند. در کد دوم ابتدا وارد حلقه می شویم و چون مقدار i برابر 0 است پس وارد بلوک if شده و مقدار i برابر 10- می شود. بعد از چاپ شدن i، شرط حلقه چک می شود و چون برقرار است، به اول بلوک حلقه بر می گردد. با کمی دقت مشاهده می کنیم که در این حلقه اعداد 10- تا 1- چاپ می شوند و سپس از حلقه خارج می شویم.

break

دستور پرکاربردی که در حلقه‌ها کاربرد دارد، دستور break است. هر زمان که در طی اجرای حلقه، به این دستور برسیم اجرای دستورات حلقه متوقف شده و از حلقه خارج می‌شویم.
فرض کنید در مثال قبل می‌خواهیم،تنها اعداد 10- تا 5- چاپ شوند. این کار را می‌توان به صورت زیر انجام داد.

int i = 0;
do {
    if (i == 0)
        i = -10;
    if (i == -4)
        break;
    cout<<i<<endl;
    i++;
} while (i<0) ;

continue

دستور دیگری که در حلقه‌ها کاربرد دارد، continue است. تفاوتی که این دستور با دستور break دارد،آن است که با رسیدن به این دستور ادامه‌ی اجرای دستورات حلقه متوقف شده و برنامه به ابتدای حلقه باز می‌گردد و از حلقه خارج نمی‌شود.
فرض کنید در همان مثال قصد داریم اعداد 10- تا 1- را چاپ کنیم با این تفاوت که عدد 4- چاپ نشود. این کار به صورت زیر امکان‌پذیر است.

int i = 0;
do {
    if (i == 0)
        i = -10;
    if (i == -4)
        continue;
    cout<<i<<endl;
    i++;
} while (i<0) ;

ابزار صفحه