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

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


مسعود درویشیان ۲۹ دیدگاه سی شارپ چهارشنبه, ۲۶ام مهر , ۱۳۹۱ 27418 بازدید

در قسمت قبل در مورد حلقه‌ی 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");
}

در این‌جا، شرط ۰ < number بررسی می‌شود که برابر با true است، بنابراین عبارت Hello نمایش داده می‌شود. دوباره شرط ۰ < 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();
    }
}

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



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

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


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


  1. diho
    ۲۷ مهر ۱۳۹۱

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

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




    • مسعود درویشیان
      ۲۷ مهر ۱۳۹۱

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




  2. mandana
    ۲۷ مهر ۱۳۹۱

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




    • مسعود درویشیان
      ۲۷ مهر ۱۳۹۱

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




      • mandana
        ۲۷ مهر ۱۳۹۱

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




        • مسعود درویشیان
          ۲۷ مهر ۱۳۹۱

          بفرمایید:

          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();
                  }
              }
          }
          

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




        • مسعود درویشیان
          ۲۷ مهر ۱۳۹۱

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

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



  3. میلاد
    ۲۸ مهر ۱۳۹۱

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




  4. میلاد
    ۲۸ مهر ۱۳۹۱

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

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

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

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




    • میلاد
      ۲۸ مهر ۱۳۹۱

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




    • مسعود درویشیان
      ۲۸ مهر ۱۳۹۱

      سلام

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

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

      موفق باشید.




  5. داوود
    ۳ آبان ۱۳۹۱

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

    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);
            }
        }
    }
    



    • مسعود درویشیان
      ۳ آبان ۱۳۹۱

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

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




      • داوود
        ۵ آبان ۱۳۹۱

        خیلی ممنونم ازتون، کاملا فهمیدم و متوجه موضوع شدم.
        مرسی




  6. فرشید
    ۳ آبان ۱۳۹۱

    ۱-برنامه ای که بتواند ۲۰ جمله اول سری فیبو نانچی را نمایش دهد با حلقه for
    ۲- برنامه ای که بتونه این اعداد را نمایش دهد البته حلقه تو در تو
    ۵ ۴ ۳ ۲ ۱
    ۴ ۳ ۲ ۱
    ۳ ۲ ۱
    ۲ ۱
    ۱ ببخشید که باعث زحمت شما میشم




    • مسعود درویشیان
      ۳ آبان ۱۳۹۱

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

      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();
          }
      }
      

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




    • داوود
      ۱۴ آبان ۱۳۹۱

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

      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. امیر رضا
    ۳ آبان ۱۳۹۱

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




    • مسعود درویشیان
      ۳ آبان ۱۳۹۱

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




  8. فرشید
    ۳ آبان ۱۳۹۱

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




  9. میلاد
    ۴ اردیبهشت ۱۳۹۲

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

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

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

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




  10. میلاد
    ۴ اردیبهشت ۱۳۹۲

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

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

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

    با تشکر




  11. میلاد
    ۴ اردیبهشت ۱۳۹۲

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

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




    • میلاد
      ۴ اردیبهشت ۱۳۹۲

      [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
    ۱۳ مرداد ۱۳۹۲

    سلام

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

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




    • مسعود درویشیان
      ۱۳ مرداد ۱۳۹۲

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




      • سعید
        ۱۱ خرداد ۱۳۹۳

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




  13. aida
    ۲۱ دی ۱۳۹۳

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



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





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

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

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

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

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



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

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