زنگ سی شارپ – قسمت نهم

توضیح کامل و دقیق حلقه‌ی for و while به همراه ۵ تمرین


مسعود درویشیان 26 دیدگاه سی شارپ Wednesday, 3rd October , 2012 48527 بازدید

در قسمت قبل با دو عمل‌گر Increment و Decrement و چند عمل‌گر ریاضی دیگر آشنا شدیم که دانستن آن‌ها برای کار با حلقه‌ها و بسیاری از موارد دیگر ضروری است. در این قسمت با چگونگی کار با حلقه‌ی for و while آشنا می‌شویم و در انتها چند تمرین برای درک بهتر مطلب داده می‌شود.

زنگ سی‌شارپ - قسمت نهم

حلقه‌ی The for loop) for)

در برنامه‌نویسی همیشه مواردی پیش می‌آید که نیاز است یک بخش از کد چندین مرتبه اجرا و یک‌کار به‌صورت مکرر چندین مرتبه انجام شود. برای این منظور باید از حلقه‌‌ها استفاده کرد. یکی از این حلقه‌ها که استفاده‌ی زیادی در برنامه‌نویسی دارد حلقه‌ی for است. به‌عنوان مثال فرض کنید می‌خواهید برنامه‌ای بنویسید که ۵ مرتبه پیغام خوش‌آمد گویی را چاپ کند. آیا برای این‌کار پنج مرتبه این پیغام را به‌صورت دستی می‌نویسید؟ مسلماً این‌کار زمان‌بر است و اگر قصد داشته باشید ۱۰۰ مرتبه پیغام خوش‌آمد گویی را به‌صورت دستی تایپ کنید، مدت زمان زیادی از وقت شما صرف می‌شود. در این‌جا حلقه‌ی for به شما کمک می‌کند تا از کدنویسی تکراری بپرهیزید. البته از این حلقه به‌منظورهای دیگر هم استفاده می‌شود که در آینده با آن‌ها آشنا خواهیم شد.

حلقه‌ی for مانند دستورات دیگر شکل و فرم خاص خودش را دارد که با زبان‌های ++C ،C و جاوا متشابه است.

شکل و فرم کلی حلقه‌ی for را می‌توانید در زیر ببینید:

for(initialization; condition; iteration)
{
     statement sequence
}

در قسمت initialization (مقدار دهی اولیه) معمولاً متغیری قرار داده می‌شود که این متغیر، کنترل‌کننده‌ی حلقه‌ است و به‌عنوان شمارنده (counter) حلقه عمل می‌کند. در قسمت condition یک عبارت بولین (true یا false) قرار می‌گیرد که مشخص می‌کند حلقه به چه تعداد باید تکرار شود. قسمت iteration مقدار متغیر کنترل‌کننده (متغیری که در قسمت initialization قرار دارد) را در هربار که حلقه تکرار می‌شود به‌روز رسانی کرده و تغییراتی را روی آن اعمال می‌کند. توجه داشته باشید که این سه قسمت (initialization و condition و iteration) باید حتماً توسط سمی‌کالن از هم جدا شوند. حلقه‌ی for تا زمانی‌که مقدار condition برابر با true است تکرار شده و به‌محض این‌که condition برابر با false شد برنامه از حلقه خارج می‌شود.

به مثال زیر توجه کنید:

using System;
class Example
{
    static void Main()
    {
        int i;

        for (i = 0; i < 5; i++)
        {
            Console.WriteLine(i);
        }

        Console.WriteLine("Done!");
    }
}

خروجی:

0

1

2

3

4

Done!

اکنون این برنامه را به‌طور کامل بررسی می‌کنیم تا بدانیم دقیقاً چه اتفاقی در حال رخ دادن است. هنگامی که کامپایلر شروع به خواندن کدها می‌کند، ابتدا متغیر i تعریف می‌شود سپس کامپایلر با یک حلقه‌ی for برخورد می‌کند.

بر روی این حلقه به متغیر i مقدار صفر اختصاص داده می‌شود (initialization) سپس مقدار i با عدد ۵ مقایسه می‌شود تا مشخص شود که آیا مقدار i از عدد ۵ کوچک‌تر است یا خیر (condition). اگر i کوچک‌تر بود پس condition برابر با true است، اگر کوچک‌تر نبود condition برابر با false می‌شود. در حال حاضر مقدار i برابر با صفر است، صفر کوچک‌تر از ۵ است، بنابراین condition برابر با true می‌شود. حال‌که condition برابر با true شد کامپایلر وارد حلقه می‌شود و محتوای درون حلقه را اجرا می‌کند. در این‌جا دستور چاپ مقدار i قرار دارد، بنابراین مقدار کنونی i نمایش نمایش داده می‌شود (همان‌طور که می‌دانید مقدار کنونی i برابر با صفر است). پس از این‌که مقدار i نمایش داده شد، توسط عمل‌گر افزایشی پس‌وندی یک واحد به مقدار i افزوده می‌شود (iteration)  و مجدداً مقدار i با عدد ۵ مقایسه می‌شود. مقدار i اکنون برابر با ۱ است و عدد ۱ از عدد ۵ کوچک‌تر است، پس شرط برقرار است و مجدداً کامپایلر وارد حلقه شده و مقدار جدید i را نمایش داده و سپس مقدار i را یک واحد افزایش می‌دهد. این روند همین‌طور ادامه دارد تا زمانی که مقدار i به ۵ برسد. در این لحظه که مقدار i برابر با ۵ است با عدد ۵ مقایسه شده و به‌دلیل این‌که ۵ از ۵ کوچک‌تر نیست condition برابر با false می‌شود و کامپایلر دیگر وارد حلقه نشده و از آن خارج می‌شود و به سراغ ادامه‌ی کدها می‌رود. در ادامه یک پیغام !Done نمایش داده شده و برنامه به اتمام می‌رسد.

روند اجرای این حلقه را در شکل زیر می‌بینید. ابتدا مقداردهی اولیه انجام شده و شرط بررسی می‌شود، سپس در صورت برقراری شرط، محتوای بلاک حلقه اجرا می‌شود:

سپس مقدار i یک واحد افزایش یافته و مجدداً شرط بررسی می‌شود و درصورت برقراری شرط، محتوای بلاک حلقه اجرا می‌شود:

به نمونه‌ی زیر دقت کنید:

using System;
class Example
{
    static void Main()
    {
        int count, x;
        x = 0;
        for (count = 10; count < 5; count++)
        {
            x += count; // this statement will not execute
        }
    }
}

در این برنامه به‌دلیل این‌که شرط حلقه برقرار نیست، هیچ‌گاه حلقه اجرا نمی‌شود. توضیحات تکمیلی حلقه‌ی for را در قسمت‌های بعد می‌توانید دنبال کنید.

حلقه‌ی The while loop) while)

یکی دیگر از حلقه‌های سی‌شارپ، حلقه‌ی while است. فرم کلی حلقه‌ی while به‌شکل زیر است:

while (Condition)
{
     statement sequence
}

در قسمت condition شرط حلقه بررسی می‌شود که کنترل کننده‌ی حلقه است و می‌تواند هر نوع عبارت بولینی باشد. تا زمانی که مقدار condition برابر با true است قسمت statement اجرا می‌شود. به مثال زیر که قبلاً آن را با استفاده از حلقه‌ی for انجام دادیم توجه کنید:

using System;
class Example
{
    static void Main()
    {
        int i = 0;
        while (i < 5)
        {
            Console.WriteLine(i);
            i++;
        }
        Console.WriteLine("Done!");
    }
}

اگر این برنامه را اجرا کنید متوجه خواهید شد که نتیجه‌ی یکسانی با مثال انجام‌شده‌ی حلقه‌ی for دارد. در این حلقه، قسمت iteration داخل حلقه قرار دارد و مقداردهی اولیه بیرون از حلقه قرار داده شده است. در این مثال تا زمانی‌که مقدار condition برابر با true است، حلقه اجرا می‌شود.

تمرین

تمرین شماره ۱: با استفاده از حلقه‌ی for برنامه‌ای بنویسید که اعداد زوج ۰ تا ۱۰۰ را چاپ کند.

تمرین شماره ۲: با استفاده از حلقه‌ی for برنامه‌ای بنویسید که اعداد ۰ تا ۱۰۰ را از انتها تا ابتدا چاپ کند.

تمرین شماره ۳: با استفاده از حلقه‌ی for برنامه‌ای بنویسید که اعداد فرد ۰ تا ۱۰۰ را چاپ کند.

تمرین شماره ۴: با استفاده از حلقه‌ی for برنامه‌ای بنویسید که مضارب ۵ اعداد ۰ تا ۱۰۰ را چاپ کند.

تمرین شماره ۵: تمرین‌های ۱ تا ۴ را با استفاده از حلقه‌ی while انجام دهید.


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



نویسنده / مترجم : مسعود درویشیان

علاقه مند به موسیقی و برنامه نویسی بازی


26 دیدگاه برای این نوشته ثبت شده است


  1. diho
    5 October 2012

    بلاخره رسیدیم به تمرینات :D




  2. داوود
    6 October 2012

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

    using System;
    namespace ConsoleApplication4
    {
        class forandwhile
        {
    
            //1- write even numbers from 0 to 100
            static void Main()
            {
                for (int i <= 100; i = 0; i++)
                {
                    Console.WriteLine(i);
                }
                Console.ReadLine();
            }
    
            //3- write odd numbers from 0 to 100
            static void Main()
                  {
                     for (int i = 0; i <=100; i++)
                      {
                           if (i % 2 != 0)
                          Console.WriteLine(i);
                      }
                      Console.ReadLine();
                  }
    
    
            //4- write multiple's number of 5(0 To 100)
            static void Main()
                      {
                         for (int i = 0; i <= 100; i++)
                          {
                              if (i % 5 == 0)
                              Console.WriteLine(i);
                          }
                       Console.ReadLine();
                      }
    
            //1B- write even numbers from 0 to 100 with While
            static void Main()
            {
                int i = 0;
                while (i = 0)
                {
                    Console.WriteLine(i);
                    i--;
                }
                Console.ReadLine();
            }
    
            //3- write odd numbers from 0 to 100 with While
            static void Main()
                    {
                        int i = 0;
                        while (i <= 100)
                        {
                            if (i % 2 != 0)
                                Console.WriteLine(i);
                            i++;
                        }
                        Console.ReadLine();
                    }
    
    
            //4B- write multiple's number of 5(0 To 100)
            static void Main()
                {
                    int i = 0;
                    while(i <= 100)
                    {
                        if (i % 5 == 0)
                            Console.WriteLine(i);
                        i++;
                    }
                    Console.ReadLine();
                }
    
        }
    }
    



    • مسعود درویشیان
      6 October 2012

      سلام

      تمرین‌هایی که این‌جا حل‌شون رو فرستادید بعضی‌هاشون درست هستن و بعضی‌هاشون مشکل دارن. یکی از مشکلات‌تون اینه که توی یه برنامه چندین‌بار از متد ()Main استفاده کردید در صورتی‌که باید فقط یک‌بار استفاده کنید.
      توی قسمت بعد کامل متوجه می‌شید که مشکل‌تون چی بوده

      ممنون بابت حل تمرین‌ها




  3. داوود
    6 October 2012

    سلام آقا مسعود؛ آره من کاملا به این موضوع واقفم و میدونم که اینجوری ایراد داره و میشد این مورد رو با switch-case نوشت و هر کدوم از برنامه ها رو که دوست داشت انتخاب کرد. من فقط جهت اینکه حل برنامه ها رو فرستاده باشم اینجوری فرستادم و در واقع زمان تست اونها رو comment می کردم.
    موفق باشید.




  4. علی حیدرزاده
    11 October 2012

    من اینجوری حل کردم
    نمایش اعداد زوج

    int i;
    for (i = 0; i <= 50; i++)
    {
    
    Console.WriteLine(2 * i);
    }
    

    نمایش اعداد فرد

    int i;
    for (i = 0; i <= 50; i++)
    {
    
    Console.WriteLine(2 * i - 1);
    }
    

    ومضارب عدد 5

    int i;
    for (i = 0; i <= 20; i++)
    {
    
    Console.WriteLine(5 * i);
    }
    



  5. مهدی
    16 November 2012
    // نمایش اعداد زوج
    int i;
    for(i=1;i=0;i–-)
    {
        Console.WriteLine(i);
    }
    
    // مضرب ۵
    int i;
    for (i = 1; i < 100; i++)
    {
        Console.WriteLine(i = i + 4);
    }
    



    • مسعود درویشیان
      16 November 2012

      روش صحیح نمایش اعداد زوج رو می‌تونید توی قسمت‌های بعد ببینید. مضارب 5 رو درست انجام دادید.




    • کوثر
      12 September 2013

      در مورد ضریب پنج بهتره اینطوری نوشته بشه:

      for (int i = 0; i < 100; i++)
      {
      if (i % 5 == 0)
      {
      Console.WriteLine(i);
      }
      }




  6. بیتا
    17 November 2012

    سلام برای من دانلود پی دی اف باز نمیشه




    • مسعود درویشیان
      17 November 2012

      لینک سالمه!
      کلیک سمت راست کنید و لینک رو save کنید.




  7. بیتا
    18 November 2012

    متشکرم درست شد راستی نمیشه چند تا تمرین حل شده بذارین؟
    باتشکر از زحمات شما




    • مسعود درویشیان
      18 November 2012

      تا الان 11 تا تمرین توی سایت قرار دادیم. قسمت‌های بعدی رو ببینید…



    • اگر من نویسنده بودم تمرین هایی که میگفتم رو حل نمیکردم. دوستان زحمت حلش رو میکشیدن و توی کامنت مذاشتن و من ایراداتشون رو اونجا میگیرفتم. این بنظر من بهتره که اینجا الان در حال حاضر پیاده میشه.




  8. Praise
    12 December 2012
    using System;
    class Example
    {
        static void Main()
        {
            Console.WriteLine("Even Numbers By the While Loop");
    
            int i = 0;
    
            while (i <= 100)
            {
                Console.WriteLine(i);
                i = i + 2;
            }
            Console.WriteLine();
    
            Console.WriteLine("Even Numbers By the For Loop");
    
            for (i = 0; i <= 100; i = i + 2)
            {
                Console.WriteLine(i);
            }
            Console.WriteLine("Done!");
        }
    }
    



  9. علیرضا
    26 January 2013

    int i ,b ;
    i=0;
    b = 2;
    while (i <= 100)
    {
    Console.WriteLine(i);
    i += b ;
    }
    Console.WriteLine("done");

    tamrin 4:

    int i,b;
    i = 5;
    b = 5;
    while (i <= 100)
    {
    Console.WriteLine(i);
    i +=b ;
    }
    Console.WriteLine("done");



  10. تمام مسائل رو حل کردم فقط مسئله 4 رو من اینطوری برداشت کردم که اعداد از 0 تا 100 اونایی که مضربی از 5 هستن رو چاپ کنم! منم نوشتم. گفتم شاید دوستان بخوان هم با این مسئله و طریقه ی نوشتن من اشنا بشن:

    for(int i = 0; i <= 100; i++)
    {
        if (i % 5 == 0) Console.WriteLine(i);
    }
    


    • در قسمت بعدی دیدم شما هم مثل من حل کردید. پس اون دوستمون در کامنت های اول (علی حیدرزاده) چرا به اون صورت نوشتن و شما افرین گفتید؟! درک درست مسئله همیشه در همه موضوع مهم ترین قسمت بوده. ولی الان خوشحالم ;)




  11. میلاد
    24 April 2013

    با سلام و خسته نباشید

    خیلی ممنون برای مطالبی ک مینویسید

    خیلی بدرد بخور هستند

    تنتون سالم انشالا
    موفق باشید




  12. علی ابراهیمی
    30 December 2013

    لطفا ببینین اینا درستن

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace S9_EXS
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.Write(“Enter the number of exercise: “);
    string n = Console.ReadLine();
    int x =0;
    if (n == “1”)
    {
    Console.WriteLine(“Exercise number 1: Even numbers from 0 to 100\n”);

    for (x = 0; x = 0; x–)
    Console.WriteLine(x);
    }

    if (n == “3”)
    {
    Console.WriteLine(“Exercise number 3: Odd numbers from 0 to 100\n”);

    for (x = 1; x <= 100; x += 2)
    Console.WriteLine(x);
    }

    if (n == "4")
    {
    Console.WriteLine("Exercise number 4: Multiple's of number 5 between 0 & 100\n");

    for (x = 0; x <= 100; x += 5)
    Console.WriteLine(x);
    }
    }
    }
    }
    [/C#]




  13. سعید
    1 June 2014

    فوق العادس آقا مسعود




  14. عاطفه
    2 March 2015

    سلام من تازه دارم برنامه نویسی یاد میگیرم به زبان جاوا میشه تو نوشتن این برنامه که برنامه ای بنویسید که n را از کاربر بگیرد و قطعه کد زیر را چاپ کند.تعداد سطر ها و ستون ها n تا اند خیلی ممنون یکم عجله دارم.

    *@*@*@*@*@……….n تا
    @*@*@*@*@*…………
    ……………..
    …………….




  15. سجاد بافنده
    22 February 2019

    باسلام خسته نباشید من میخواستم برنامه ای بنویسم که تازمانی که
    عدد منفی یک وارد نشده است اعدادی را از کاربر بگیرد و میانگین انهارا نمایش دهد ممون میشم بهم بگین چجوری باید بنویسم.



دیدگاه خود را بنویسید





نشانی ایمیل شما منتشر نخواهد شد.

کامنت های شما بعد از تأیید توسط نویسنده وبلاگ، منتشر خواهند شد.

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

شما میتوانید با مراجعه به سایت گراواتار یک آواتار اختصاصی برای خود تعریف کنید، تا در کنار نام شما نمایش داده شود

برای قرار دادن کدهای نمونه می توانید از تگ های [php] ، [html] ، [css] و [js] استفاده کنید.
به عنوان مثال کدهای php را می توان به صورت زیر قرار داد:
[php] var $whoLoveIranians = "WebTarget!"; [/php]



کلیه حقوق مادی و معنوی برای وب سایت وب تارگت محفوظ است ©2024 وب‌تارگت

استفاده از مطالب وب سایت در سایر وب سایت‌ها و نشریات چاپی با ذکر منبع آزاد است.