1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش c++(ساختار های کنترلی - حلقه while)

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن C #C++

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    [h=2]در این فصل از آموزش برنامه نویسی C++ قصد داریم به بررسی ساختار حلقه while() بپردازیم که وظیفه ای شبیه به حلقه for() را برعهده دارد.[/h]

    [h=2]در این فصل از آموزش برنامه نویسی C++ قصد داریم به بررسی ساختار حلقه while() بپردازیم که وظیفه ای شبیه به حلقه for() را برعهده دارد.[/h]

    while ( عبارت شرطی )

    {
    Line Command 1;
    Line Command 2;
    Line Command n;
    }
    از این ساختار برای ایجاد حلقه های تکرار استفاده می شود و تا زمانیکه عبارت شرطی داخل پرانتز while() درست باشد دستورات مربوطه اجرا خواهند شد و به محض نادرستی شرط، کنترل دستورات از حلقه خارج خواهد شد.
    [TABLE="width: 476"]
    [TR]
    [TD]
    [/TD]
    [TD][/TD]
    [TD]
    int n;

    cout << "Enter the starting number that bigger than zero : " ;
    cin >> n ;

    while ( n > 0 )
    {
    cout << n << ", " ;
    }

    cout << "Fire! n" ;
    [/TD]
    [/TR]
    [/TABLE]


    Enter the starting number that bigger than zero : 8
    8, 7, 6, 5, 4, 3, 2, 1, Fire!

    کد برنامه نویسی بالا، عددی را از کاربر گرفته و با استفاده از حلقه while شمارش معکوس آنرا در خروجی نمایش می دهد.
    در برنامه C++ بالا، اگر عدد صفر یا کمتر از آنرا وارد کنیم شرط حلقه while نادرست بوده و دستورات درون حلقه اجرا نخواهد شد و فقط عبارت Fire! چاپ می شود.
    شکل دیگری از این دستور وجود دارد که شبیه به while() بوده و به آن حلقه do while گفته می شود، با این تفاوت که اگر شرط درون آن نادرست باشد دستورات درون حلقه حداقل یکبار اجرا می شوند و اگر شرط درست باشد، حلقه تا زمان نادرستی شرط ادامه خواهد یافت و ساختار آن بدینگونه است :

    do
    {
    Line Command 1;
    Line Command 2;
    Line Command n;
    }
    while ( عبارت شرطی )
    {
    Line Command 1;
    Line Command 2;
    Line Command n;
    }

    در ساختار do while() ابتدا دستورات do اجرا شده و بعد شرط درون while() بررسی می شود و در صورت درستی شرط، اجرای دستورات do ادامه پیدا خواهد کرد.
    نکته) دوستان توجه داشته باشند که اگر دستورات مربوط به for, while, do, … فقط یک دستور باشد نیازی به قرار دادن دستور درون آکولاد نیست و تکرار فقط بر روی تنها سطر دستور ادامه خواهد داشت و تا زمانیکه شرط برقرار باشد فقط و فقط آن سطر تکرار و اجرا می شود و تا زمان پایان به خط بعدی نخواهد رفت اما اگر دستورات بیش از یکی باشد لازم است که آنها را در آکولاد قرار دهیم و این قانون کلی در برنامه نویسی است.
    [TABLE]
    [TR]
    [TD]
    [/TD]
    [TD][/TD]
    [TD]
    int n;
    do
    {
    cout << "Enter number (0 to end): " ;
    cin >> n ;
    cout << "You entered: " << n << "n" ;
    } while ( n != 0 )
    [/TD]
    [/TR]
    [/TABLE]


    Enter number (0 to end): 1298
    You entered: 1298
    Enter number (0 to end): 35
    You entered: 35
    Enter number (0 to end): 0
    You entered: 0

    اگر عدد ورودی در کد بالا در ابتدا صفر باشد دستورات یکبار اجرا می شود.
    دستورهای break و continue:تا حدی با دستور break در دستور switch آشنا شدید. دستورهای switch و continue برای کنترل بیشتر جریان اجرای برنامه در ساختارهای انتخاب و تکرار به کار می‌روند. بسیاری مواقع ممکن است در میانه اجرای یک حلقه تکرار از ادامه اجرای حلقه تکرار منصرف شویم. برای مثال فرض کنید در یک آرایه به دنبال یک عدد خاص می‌گردیم، به محض این که عدد مورد نظر پیدا شد، دیگر نیازی به تکرار بیهوده حلقه تکرار نیست. در این حال چه باید کرد؟ باید از حلقه بیرون آمد. برای خروج از حلقه تکرار می‌توان از دستور break استفاده کرد. به مثال زیر دقت کنید:

    1. int [] list = new int[] { ۱۰ , ۲۰ , ۳۰ , ۴۰ , ۵۰ , ۶۰ , ۷۰ , ۸۰ , ۹۰ , ۱۰۰ };
    2. for( int i = ۰ ; i < list.length ; i++ ) {
    3. if( list == ۲۰ ) {
      [*] System.out.println(“Hooray! we found ۲۰!”);
      [*] break;
      [*] }
      [*]}


    در قطعه برنامه فوق، در ابتدای هر بار اجرای حلقه، بررسی می‌کنیم که آیا عدد مورد نظر برابر ۲۰ است یا نه. اگر عدد مورد نظر برابر ۲۰ باشد، با چاپ یک عبارت، از حلقه تکرار خارج می‌شویم.
    کارکرد دستور continue هم به نوعی مشابه است. این بار می‌خواهیم تا انتهای دستورات حلقه پیش نرفته و مجدداً از ابتدای حلقه، دستورات را اجرا کنیم، البته با مقادیر جدید شمارنده! مثال زیر را ببینید:

    1. float [] grades = new float[] { ۱۸ , ۹ , ۱۱ , ۱۶ , ۶٫۵f , ۱۴ , ۱۹ , ۹ };
    2. for( int i = ۰ ; i < grades.length ; i++ ) {
    3. if( grades < ۱۰ ) {
      [*] continue;
      [*] }
      [*] System.out.println(“Passed, grade is: ” + grades );
      [*]}


    در حلقه تکرار فوق، اگر مقدار grades کمتر از ده باشد، بقیه دستورات داخلی حلقه تکرار را ادامه نداده و مجدداً برمی‌گردیم و از ابتدای حلقه مجدداً تکرار می‌کنیم، با این تفاوت که مقدار شمارنده یکی بیشتر شده است. ماحصل این تکرار چاپ نمره‌های بیشتر از ۱۰ است. به خروجی برنامه دقت کنید:

    1. Passed, grade is: ۱۸٫۰
    2. Passed, grade is: ۱۱٫۰
    3. Passed, grade is: ۱۶٫۰
    4. Passed, grade is: ۱۴٫۰
    5. Passed, grade is: ۱۹٫۰

    نکته: کاربرد دستورات break و continue در حلقه‌های تکرار است. تنها کاربرد break در خارج از ساختارهای تکرار، در دستور switch است.
    به نقل از مجله اینترنتی نود ایران