آشنایی با حلقه ها برای چرخه های تکرار

در هنگام برنامه‌نویسی موارد زیادی به وجود می‌آید که می‌خواهیم قطعه کدی چندین‌بار تکرار شود که این‌گونه مسائل را با استفاده از حلقه (Loop) انجام می‌دهیم.

حلقه for

در بعضی الگوریتم‌ها نیاز داریم که یک کد را به تعداد مشخصی تکرار کنیم. مثلاً می‌خواهیم متنی را 10 بار در کنسول نمایش دهیم برای این کار از حلقۀ for استفاده می‌کنیم. برای این کار باید سه بخش زیر را در حلقۀ for مشخص کنیم: 

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

for(تغییر_متغیر ;  شرط_تکرار ;  تعریف_متغیر)
{
کدی که می خواهیم به تعداد مشخص اجرا شود
}

بین بخش‌ها از (semicolon) استفاده می‌کنیم.

یک مثال برای استفاده از حلقۀ for:

for(int counter = 0; counter < 3; counter = counter + 1)
{
    Console.WriteLine("Task is Running");
}

در قطعه کد بالا یک متغیر از نوع عدد صحیح به نام counter تعریف کردیم و مقدار اولیۀ آن را صفر قرار دادیم و گفتیم که تا وقتی این مقدار از 3 کوچک‌تر است عبارت "Task is Running" را در کنسول نمایش بده و بعد از هربار نمایش مقدار درون متغیر را یک واحد اضافه کن. متغیر را از 0 شروع کردیم و تا زمانی ‌که کوچک‌تر از 3 است، ادامه دادیم. با در نظر گرفتن این‌که در هر بار متغیر یک واحد افزایش می‌یابد، پس این حلقه 3 بار تکرار می‌شود.

قطعه کد بالا معادل فرایند زیر است:

 یک متغیر از نوع عدد صحیح با نام counter تعریف کن و مقدار 0 را به آن تخصیص بده
 آیا مقدار counter کوچک‌تر از 3 است؟ بله
 "Task is Running" را در کنسول بنویس
بهcounter یکی اضافه کن و آن را برابر با 1 کن
آیا مقدار counter کوچک‌تر از 3 است؟ بله
 "Task is Running" را در کنسول بنویس
به counter یکی اضافه کن و آن را برابر با 2 کن
آیا مقدار counter کوچک‌تر از 3 است؟ بله
"Task is Running" را در کنسول بنویس
به counter یکی اضافه کن و آن را برابر با 3 کن
آیا مقدار counter کوچک‌تر از 3 است؟ خیر
از حلقه بیرون بیا و کدهای بعد از حلقه را اجرا کن

به‌صورت معمول در برنامه‌نویسی شمارش‌ها از 0 شروع می‌شوند، نه از 1. در این‌جا می‌توانیم از 1 تا 3<= هم بنویسیم و هیچ مشکلی پیش نمی‌آید،  اما بهتر است عادت كنيم كه شمارش ها را از 0 شروع کنیم تا با بقیه بخش های زبان برنامه نویسی هماهنگ باشد مگر در شرایط و الگوریتم های خاص که از صفر شروع کردن محاسبات را پیچیده تر می کند. در ادامه با این مفهوم بیشتر آشنا می شویم.

  1. قطعه کدی بنویسید که 10 بار متن "Task is Running" را تکرار کند و وقتی برای بار 5‌ام این متن را نوشت متن "Half of Tasks Completed" را هم در کنسول نمایش دهد.

  2. به سؤال زیر بدون اجرای کد پاسخ دهید.  قطعه کد زیر چه کاری انجام می‌دهد؟

    int usersCount = 10;
    for(int i = 1; i <= usersCount; i = i + 1)
    {
     Console.WriteLine("Sending Text Message to user " + i);
     if(i == usersCount / 2)
       Console.WriteLine("Fifty percent of Text Messages are sent");
    }

  3. قطعه کد زیر را با استفاده از حلقۀ for بازنویسی کنید.

    int number = 0;
    Console.WriteLine("Number " + number + " is Less Than 5");
    number = number + 1;
    Console.WriteLine("Number " + number + " is Less Than 5");
    number = number + 1;
    Console.WriteLine("Number " + number + " is Less Than 5");
    number = number + 1;
    Console.WriteLine("Number " + number + " is Less Than 5");
    number = number + 1;
    Console.WriteLine("Number " + number + " is Less Than 5");

     

حلقه while

یکی دیگر از انواع حلقه‌ها حلقۀ while است. گاهی در الگوریتم‌ها نمی‌دانیم که یک قطعه کد چند بار باید تکرار شود (برخلاف for که تعداد مشخص است)، در این حالت از حلقۀ while استفاده می‌کنیم:

while(شرط)
{
کدی که می خواهیم تا زمان برقرار بودن شرط اجرا شود
}

می‌توانیم این قطعه کد را به‌صورت زیر بخوانیم:

تا زمانی که شرط برقرار است، کد را اجرا کن و به محض این‌که دیگر شرط برقرار نبود، کد را اجرا نکن و ادامۀ برنامه را اجرا کن.

در نظر داشته باشید از حلقۀ while می‌توانیم در شرایطی که تعداد تکرار مشخص است استفاده کنیم. ضمناً شرط یک عبارت منطقی است.

یک مثال برای استفاده از حلقۀ while:

int taskCount = 40;
bool isRunning = true;
while(isRunning == true)
{
    Console.WriteLine("A lot of tasks are running...");
    taskCount = taskCount - 1;
    if(taskCount < 10)
    {
        isRunning = false;
    }
}

در این قطعه کد ابتدا یک متغیر برای نگهداری تعداد تسک‌ها درست کردیم و یک متغیر از نوع bool هم برای شرط while تعریف کردیم و در بدنۀ while هربار یکی از تعداد کارها کم کردیم و گفتیم که اگر تعداد کارها از 10 عدد کمتر بود، متغیری را که در شرط استفاده می‌شود برابر false قرار بده، به این معنی که دیگر حلقه تکرار نمی‌شود و کد بعد از حلقه اجرا می‌شود.

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

  1. قطعه کد زیر را با استفاده از حلقۀ while بازنویسی کنید.

    for(int i = 0; i < 10; i = i + 1)
    {
      Console.WriteLine("Current Number is " + i);
    }