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

مروری بر الگوریتم و فلوچارت حلقه‌ها و توضیحات تکمیلی در مورد حلقه‌ی while


مسعود درویشیان 29 دیدگاه سی شارپ Wednesday, 17th October , 2012 68380 بازدید

در قسمت قبل در مورد حلقه‌ی for مثال بیشتری زده شد و تمرین‌های ۱ تا ۴ حل شدند. در این قسمت به چندین مثال تکمیلی‌تر در مورد حلقه‌ی while می‌پردازیم و در نهایت تمرین شماره ۵ حل خواهد شد. حل تمرینات برای یادگیری ضروری هستند پس سعی کنید در ابتدا خودتان برای حل آن‌ها تلاش لازم را انجام دهید.

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

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

while (condition) statement;

که statement می‌تواند تنها یا بلاکی از statement ها باشد و condition یک عبارت شرطی است که شرط حلقه را چک می‌کند و می‌تواند هر نوع عبارت بولینی باشد. همین‌طور دانستید تا زمانی‌که condition برابر با true است statement اجرا می‌شود. در ادامه برای فهم بهتر مطالب از الگوریتم و فلوچارت نیز بهره می‌بریم، برای یادگیری الگوریتم و فلوچارت پیشنهاد می‌شود این مطلب کوتاه و مفید را که نوشته‌ی امید شمس دیوبند است مطالعه بفرمایید.

به فلوچارت زیر دقت کنید:

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

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

static void Main()
{
    int number = 1;

    while (number > 0)
        Console.WriteLine("Hello");
}

در این‌جا، شرط 0 < number بررسی می‌شود که برابر با true است، بنابراین عبارت Hello نمایش داده می‌شود. دوباره شرط 0 < number بررسی می‌شود و مجدداً Hello چاپ می‌شود. به‌دلیل این‌که هیچ‌چیزی متغیر number را تغییر نمی‌دهد، این حلقه تا بی‌نهایت اجرا خواهد شد و پیوسته شرط را چک می‌کند (که همیشه برابر با true است) و Hello را نمایش می‌دهد. برای این‌که یک حلقه‌ی while به‌درستی پایان یابد، باید ۳ کار به‌صورت جداگانه انجام شود:

  • قبل از ورود به حلقه باید یک متغیر که کنترل‌کننده‌ی حلقه است معرفی شود.
  • متغیر کنترل‌کننده‌ی حلقه باید در قسمت condition مورد بررسی قرار گیرد.
  • در بدنه‌ی حلقه باید عملی انجام شود که متغیر کنترل‌کننده‌ی حلقه تغییر یابد (تا در نهایت مقدار condition برابر با false شود).

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

using System;
class Example
{
    static void Main()
    {
        int number = 1;
        int limit = 5;

        while (number <= limit)
        {
            Console.WriteLine("Number is " + number);
            number++;
        } 
        Console.WriteLine("Done!");
    }
}

همان‌طور که می‌بینید ابتدا متغیر‌ کنترل‌کننده‌ی حلقه تعریف شده‌، سپس در قسمت condition بررسی می‌شود و در نهایت در بدنه‌ی حلقه تغییر می‌یابد.

فلوچارت این برنامه:

حلقه‌ی do-while

یکی دیگر از حلقه‌های سی‌شارپ، حلقه‌ی do-while است. برخلاف حلقه‌ی for و while که شرط در بالای حلقه بررسی می‌شد، در do-while شرط در پایین حلقه بررسی می‌شود و به‌همین دلیل، این حلقه همیشه حداقل یک‌بار اجرا می‌شود. فرم کلی آن به شکل زیر است:

do {
    statements;
} while(condition);

در این حلقه نیز تا زمانی‌که conditon برابر با true است، statement اجرا می‌شود. البته قبل از این‌که برنامه به condition برسد statement یک‌بار اجرا می‌شود.

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

using System;
class Example
{
    static void Main()
    {
        int number = 1;
        int limit = 5; 
        
        do
        {
            Console.WriteLine("Number is " + number);
            number++;
        } while (number <= limit);
    }
}

خروجی و عمل‌کرد این برنامه همانند مثال قبلی در حلقه‌ی while است با این تفاوت که شرط در پایین حلقه چک می‌شود.

به این مثال دقت کنید:

using System;
class Example
{
    static void Main()
    {
        int number = 3;

        do
        {
            Console.WriteLine("False condition, once execute!");
        } while (number < 2);
    }
}

اگر این برنامه را اجرا کنید متوجه می‌شوید با این‌که شرط برقرار نیست ولی پیغام نمایش داده می‌شود. علت این است که شرط در پایین حلقه بررسی می‌شود و statement حداقل یک‌بار اجرا خواهد شد.

حل تمرین شماره ۵:

using System;
class Example
{
    static void Main()
    {
        /* Solution 05 */

        Console.WriteLine("Even numbers from 1 to 100:");
        int i = 1;
        while (i <= 100)
        {
            if (i % 2 == 0)
            {
                Console.Write(i + "\t");
            }
            i++;
        }
        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Counting backwards from 1 to 100:");
        int j = 100;
        while (j >= 1)
        {
            Console.Write(j + "\t");
            j--;
        }
        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Odd numbers from 1 to 100:");
        int h = 1;
        while (h <= 100)
        {
            if (h % 2 != 0)
            {
                Console.Write(h + "\t");
            }
            h++;
        }
        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Multiple of 5 from 1 to 100");
        int k = 1;
        while (k <= 100)
        {
            if (k % 5 == 0)
            {
                Console.Write(k + "\t");
            }
            k++;
        }
        Console.WriteLine();
    }
}

در قسمت بعد به مثال‌های بیشتر و توضیحات تکمیلی‌تر می‌پردازیم.



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

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


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


  1. diho
    18 October 2012

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

    یکم وقفه افتاده بین آپدیتهاتون
    اگه منظم باشه دلگرمی بیشتر برای دنبال کردن مطالب به ادم میده
    ممنون




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

      سلام
      مقالات از این به بعد هفته‌ای یک قسمت منتشر می‌شه
      ولی حجم محتوای هر قسمت رو بیشتر می‌کنیم تا سرعت پیشروی کند نباشه




  2. mandana
    18 October 2012

    سلام
    مهندس جان یک سوال دارم
    برنامه ای می خواهم که شکل زیر را تولید کند
    + + + + +
    * * * * *
    شکل بالا را 10 خط تولید
    آیا فقط باید دومتغیر stringتعریف کرد و10 بارکد زیر را بنویسیم
    لطفا کد خود را بنویسید
    باتشکر




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

      سلام. لطفاً سوال‌تون رو واضح‌تر بیان کنید.




      • mandana
        18 October 2012

        سلام
        مهندس جان می حواهم در خط اول پنچ ستاره باشد و در خط دوم چهار بعلاو قرار گیرد اما بشرطی که بعلاو ها مابین دوستاره باشند و دو ردیف هر کدام 5 بار تکرار شوند
        باتشکر




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

          بفرمایید:

          using System;
          class Example
          {
              static void Main()
              {
                  for (int counter = 0; counter < 5; counter++)
                  {
          
                      for (int i = 0; i < 5; i++)
                      {
                          Console.Write("*");
                      }
          
                      Console.WriteLine();
                      for (int j = 0; j < 4; j++)
                      {
                          Console.Write("**+");
                          if (j == 3)
                              Console.Write("**");
                      }
                      Console.WriteLine();
                      Console.WriteLine();
                  }
              }
          }
          

          البته هنوز حلقه‌های تو در تو توضحح ندادیم ولی توی قسمت‌های آینده بیان می‌شه




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

          البته از این روش ساده هم میشه انجام داد. بستگی داره چه روشی مد نظر شما باشه

          using System;
          class Example
          {
              static void Main()
              {
                  for (int counter = 0; counter < 5; counter++)
                  {
                      Console.WriteLine("*****");
                      Console.WriteLine("**+**+**+**+**");
                      Console.WriteLine();
                  }
              }
          }
          



  3. میلاد
    19 October 2012

    باز هم ممنون..
    در پناه حق – امیدوارم که موفق باشین – منتظر ادامه مطالب ایم




  4. میلاد
    19 October 2012

    باسلامی دوبازه
    دوتا سوال به ذهنم رسیده شاید سوال دوستای دیگه هم باشه:

    1- چرا برای یادگیری سی شارژ رو باید از کنسول شروع کرد؟دلیل استفاده از این محیط چی هستش؟ آیا سادگی کار هستش یا چیز دیگه.

    2- در صورت امکان در مورد wcf توضیحاتی بدین پک آموزشی به زبان فارسی و لاتین رو دارم ولی متاسفانه نه میدونم از کجا باید شروع کرد.

    باز هم تشکر بابت ریل تایم(Realtime) بودن پاسخ ها




    • میلاد
      19 October 2012

      ضمناً WPF نیز هستش




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

      سلام

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

      در مورد WPF هم می‌تونید از این لینک یه سری اطلاعات کسب کنید.

      موفق باشید.




  5. داوود
    24 October 2012

    با سلام؛
    ضمن تقدیر از شما در این تکه کد چرا ابتدا عدد 8 چاپ نمیشه و 9 چاپ میشه؟ آیا بخاطر پیشوندی و پسوندی است؟
    در صورتی که منطقا ابتدا از مقدار a یکی کم میشه که میشه 9 ، بعدش متغیر b همین عدد رو با یکی کمتر باید نشون بده که در اینجا داره 9 نشون میده! مگه نباید الان عدد 8 بعنوان عدد اول چاپ بشه؟

    using System;
    class Example
    {
        static void Main()
        {
            int a = 10;
            int b = 0;
            while (a > 0)
            {
                //   Console.WriteLine(a);
    
                a--;
                b = a--;
                Console.WriteLine(b);
            }
        }
    }
    



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

      توی این مثال ابتدا مقدار a برابر با 10 هست. وقتی‌که -‌-a می‌شه هنوز مقدار a برابر با 10 هست. وقتی‌که برنامه رفت سراغ خط بعد تازه مقدار a می‌شه 9، که توی همون خط بازهم -‌-a هست که برابر با b قرار داده شده. تا این‌جای برنامه مقدار a هنوز 9 هست و همین 9 توی b ریخته می‌شه چون برنامه باید ازین خط هم رد بشه تا مقدار a یکی دیگه کاهش پیدا کنه.
      چون از -‌- پس‌وندی استفاده شده این اتفاق می‌افته اگه -‌- پیش‌وندی بود اول 8 چاپ می‌شد.

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




  6. فرشید
    24 October 2012

    1-برنامه ای که بتواند 20 جمله اول سری فیبو نانچی را نمایش دهد با حلقه for
    2- برنامه ای که بتونه این اعداد را نمایش دهد البته حلقه تو در تو
    5 4 3 2 1
    4 3 2 1
    3 2 1
    2 1
    1 ببخشید که باعث زحمت شما میشم




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

      سری فیبوناچی:

      using System;
      class Example
      {
          static void Main()
          {
              int a = 0;
              int b = 1;
              int result;
      
              for (int i = 1; i <= 10; i++)
              {
                  result = a + b;
                  a = b;
                  b = result;
                  result = a + b;
                  Console.Write(result + " ");
              }
              Console.WriteLine();
          }
      }
      

      حلقه‌های تو در تو رو توی قسمت‌های آینده توضیح می‌دیم.




    • داوود
      4 November 2012

      سلام
      این هم هستش:

      static void Main(string[] args)
      {
              int a = 0;
              int b = 1;
              int fib = 0;
              Console.WriteLine(a);
              Console.WriteLine(b);
              for (int i = 1; i <= 18; i++)
              {
                  fib = a + b;
                  Console.WriteLine(fib);
                  a = b;
                  b = fib;
              }
      }
      



  7. امیر رضا
    24 October 2012

    آقا مسعود واقعا نمی دونم با چه زبونی از شما باید تشکر کنم من یک مبتدی هستم در زمینه یادگیری زبان سی شارپ که با صرف هزینه های زیاد از قبیل خرید کتابهای دیتیل و سی دی های آموزشی بظاهر کاربردی تا کنون نتونستم به اون نتیجه ای که مورد توقع یک برنامه نویس است برسم الان که مقاله های شما رو دانلود کردم با یک محیط جدید و کاملا متفاوتی با مجموعه هایی که تا الان پشت سر گذاشته شده متوجه شدم و نکته ای که خیلی پررنگ به نظر میرسه اینه که مطمئن هستم این نظر حرفه ای ها هم می باشد در هر صورت نهایت تشکر و قدر دانی از شما دوست عزیز رو دارم با آرزوی سلامتی و نشاط و روزهایی خوش برای شما و همه دست اندر کاران / دهقان




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

      سلام. خوشحالم که تا الان این مقاله‌ها براتون مفید بوده
      موفق باشید




  8. فرشید
    24 October 2012

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




  9. میلاد
    24 April 2013

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

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

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

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




  10. میلاد
    24 April 2013

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

    اگه بخواهیم که با گرفتن عدد از کاربر یک مثلث تو خالی بکشیم چه کار باید کرد
    مثل شکل زیر:

    *
    * *
    * *
    * *
    * *
    *******

    با تشکر




  11. میلاد
    24 April 2013

    جاهای خالی خراب شدن
    به جای جاخالی “.” میزارم

    *
    *.*
    *…*
    *…..*
    *…….*
    *******




    • میلاد
      24 April 2013

      [cs] private static void MosalasTooKhali(int n)
      {
      Console.WriteLine(” * “);

      Console.WriteLine(” * * “);

      for (int row = 3; row < n; row++)
      {
      Console.Write(" * ");

      for (int i = 3; i <= row; i++)
      {
      Console.Write(" ");
      }
      Console.WriteLine(" * ");
      }
      for (int i = 1; i <= n; i++)
      {
      Console.Write(" * ");
      }
      } [cs]




  12. Mersad
    4 August 2013

    سلام

    من دارم مقالاتتون رو دنبال میکنم

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



    • سلام نه با دیتابیس کار نمی‌کنیم.




      • سعید
        1 June 2014

        اگه مباحث مربوط به ارتباط با دیتابیس با تکنولوژی Entity Framework رو بذارین، خیلی عالی میشه آقا مسعود




  13. aida
    11 January 2015

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



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





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

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

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

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

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



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

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