شنبه ۲۹ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش مبانی برنامه نویسی - حلقه ها

فرض کنید که می‌خواهید کلمه Hello, World! را پنج بار چاپ کنید. یک برنامه ساده به زبان سی برای انجام همین کار در ادامه آمده است:

#include <stdio.h>

int main() {
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
   printf( "Hello, World!\n");
}

وقتی که برنامه بالا اجرا می‌شود، نتیجه زیر تولید می‌شود −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

این ساده بود، اما دوباره فرض کنید که می‌خواهید کلمه Hello, World! را هزار بار بنویسید. بدون شک نمی‌توانیم دستورات printf() را هزار بار بنویسیم. تقریباً تمامی زبان‌های برنامه‌نویسی یک مفهوم به نام حلقه (Loop) ارائه می‌دهند که در اجرای یک یا چند دستور تا تعداد مورد نظر کمک می‌کند. تمامی زبان‌های برنامه‌نویسی سطح بالا، اشکال مختلفی از حلقه‌ها را ارائه می‌دهند که برای تکرار یک یا چند دستور مورد استفاده قرار می‌گیرند.

با کمک یک حلقه while، برنامه C بالا را بنویسیم و در ادامه نحوه کار این حلقه را بررسی خواهیم کرد.

#include <stdio.h>

int main() {
   int i = 0;
   
   while ( i < 5 ) {
      printf( "Hello, World!\n");
      i = i + 1;
   }
}

وقتی که برنامه بالا اجرا می‌شود، نتیجه زیر تولید می‌شود −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

برنامه بالا از یک حلقه while استفاده می‌کند، که برای اجرای یک مجموعه دستورات بسته شده در {....} استفاده می‌شود. در اینجا، ابتدا کامپیوتر بررسی می‌کند که آیا شرط داده شده، یعنی متغیر "a" کوچکتر از ۵ است یا نه و اگر شرط را صحیح بیابد، بدنه حلقه برای اجرای دستورات داده شده وارد می‌شود. در اینجا، دو دستور زیر در بدنه حلقه وجود دارد −

  • اولین دستور تابع printf() است که Hello World! را چاپ می‌کند

  • دومین دستور i = i + 1 است که برای افزایش مقدار متغیر i استفاده می‌شود

پس از اجرای تمام دستورات داده شده در بدنه حلقه، کامپیوتر به while(i < ۵) باز می‌گردد و شرط داده شده، (i < ۵)، دوباره بررسی می‌شود و اگر شرط صحیح باشد، حلقه دوباره اجرا می‌شود. این فرآیند تکرار می‌شود تا زمانی که شرط داده شده درست باشد که به این معناست که مقدار متغیر "a" کوچکتر از ۵ است.

برای خلاصه کردن، یک عبارت حلقه به ما اجازه می دهد تا یک عبارت یا گروهی از عبارات را چندین بار اجرا کنیم. در زیر شکل کلی یک حلقه در بیشتر زبان های برنامه نویسی آمده است −

ساختار حلقه

این آموزش برای معرفی مفاهیم اولیه برنامه نویسی به غیر برنامه نویسان طراحی شده است، بنابراین بیایید دو مهمترین حلقه موجود در زبان برنامه نویسی C را بررسی کنیم. پس از آشنایی کامل با این دو حلقه، می توانید آموزش برنامه نویسی C یا یک کتاب مرجع را برداشته و دیگر حلقه های موجود در C و نحوه کار آنها را بررسی کنید.

حلقه while

یک حلقه while در زبان برنامه نویسی C دارای دستورالعمل زیر است −

while ( condition ) {
   /*....while loop body ....*/
}

کد بالا می‌تواند به صورت یک نمودار جریان به شکل زیر نمایش داده شود −

while loop in C

نکات مهم زیر درباره حلقه while می‌باشد −

  • یک حلقه while با یک کلمه کلیدی while آغاز می‌شود که دنبال آن یک شرط در پرانتز وارد می‌شود.

  • در ادامه عبارت while()، بدنه حلقه با آکولادهای {...} قرار می‌گیرد.

  • بدنه یک حلقه while می‌تواند یک یا چند خط از کد منبع داشته باشد تا مجدداً اجرا شوند.

  • اگر بدنه یک حلقه while تنها یک خط داشته باشد، استفاده از آکولاد  {...} اختیاری است.

  • یک حلقه while بدنه خود را تا زمانی که یک شرط معین شده به صورت صحیح باقی بماند، اجرا می‌کند. به محض اینکه شرط نامعتبر شود، حلقه while خارج شده و از ادامه اجرا در خط بعدی بعد از بدنه حلقه while ادامه می‌دهد.

  • یک شرط معمولاً یک عبارت رابطه‌ای است که به یکی از دو مقدار درست یا غلط تبدیل می‌شود. مقدار صفر به عنوان نامعتبر در نظر گرفته می‌شود و هر مقدار غیر صفر به عنوان درست عمل می‌کند.

حلقه do...while

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

do {
   /*....do...while loop body ....*/
} 
while ( condition );

کد بالا را می‌توان به صورت یک نمودار جریانی نمایش داد، که در زیر نمایش داده شده است −

do...while loop in C

اگر شما مثال بالا را با حلقه do...while بنویسید، آنگاه Hello، World نتیجه یکسانی را تولید خواهد کرد −

#include <stdio.h>

int main() {
   int i = 0;
   
   do {
      printf( "Hello, World!\n");
      i = i + 1;
   }
   while ( i < 5 );
}

زمانی که برنامه بالا اجرا می‌شود، نتیجه زیر تولید می‌شود −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

دستور break

هنگامی که دستور break در یک حلقه به اجرا در می‌آید، حلقه به صورت فوری متوقف می‌شود و کنترل برنامه به دستور بعدی پس از حلقه بازگشت داده می‌شود. نحو دستور break در زبان C به صورت زیر است −

break;

دستور break به صورت یک نمودار جریانی در زیر نشان داده شده است −

c break statement

برنامه زیر نیز یک نسخه از برنامه بالاست، اما پس از چاپ سه بار پیغام Hello World! اجرای خود را خاتمه خواهد داد −

#include <stdio.h>

int main() {
   int i = 0;
   do {
      printf( "Hello, World!\n");
      i = i + 1;
      
      if( i == 3 ) {
         break;
      }
   }
   while ( i < 5 );
}

پس از اجرای برنامه بالا، نتیجه زیر را به دست می‌آوریم −

Hello, World!
Hello, World!
Hello, World!

دستورات continue

دستورات continue در زبان برنامه‌نویسی C کاری شبیه دستورات break دارد. با این تفاوت که به جای اتمام حلقه، دستورات continue مجبور به شروع تکرار بعدی حلقه می‌شود و هر کدی را که در بین آن باشد، رد می‌کند. دستورات continue در زبان C به صورت زیر تعریف می‌شود −

continue;

یک دستور continue می‌تواند به صورت نمودار جریانی به شکل زیر نشان داده شود −

دستور ادامه C

برنامه زیر یک نسخه از بالاست، با این تفاوت که وقتی متغیر دارای مقدار برابر با 3 باشد، چاپ را از دست می‌دهد −

#include <stdio.h>

int main() {
   int i = 0;
   do {
      if( i == 3 ) {
         i = i + 1;
         continue;
      }
      printf( "Hello, World!\n");
      i = i + 1;
   }
   while ( i < 5 );
}

وقتی برنامه بالا اجرا می‌شود، نتیجه زیر را تولید می‌کند −

Hello, World!
Hello, World!
Hello, World!
Hello, World!

حلقه ها در جاوا

برنامه معادل نوشته شده با استفاده از حلقه های while و do...while در زبان جاوا به شرح زیر است. در این برنامه، همانند برنامه‌ی سی‌، عبارت Hello, World! پنج بار چاپ می‌شود.

شما می‌توانید برای مشاهده خروجی، برنامه زیر را اجرا کنید و خروجی آن با خروجی برنامه بالا یکسان باشد.

public class DemoJava {
   public static void main(String []args) {
      int i = 0;
   
      while ( i < 5 ) {
         System.out.println("Hello, World!");
         i = i + 1;
      }
   }
}

دستورات break و continue در زبان برنامه‌نویسی جاوا به همان شکلی که در زبان سی کار می‌کنند، کار می‌کنند.

حلقه‌ها در پایتون

برنامه معادل زیر به زبان پایتون نوشته شده است. پایتون نیز از حلقه‌های while و do...while پشتیبانی می‌کند. در این برنامه معادل پنج بار چاپ کردن Hello, World! را با زبان سی بررسی کرده‌ایم. در اینجا باید توجه داشت که پایتون از آکولاد برای بدنه حلقه استفاده نمی‌کند، به جای آن از فاصله‌گذاری استفاده می‌کند.

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

i = 0

while (i < 5):
   print "Hello, World!"
   i = i + 1
print "Loop ends"

وقتی برنامه بالا اجرا می‌شود، خروجی زیر را تولید می‌کند −

Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Loop ends

دستورات break و continue در برنامه‌نویسی پایتون به همان شکلی که در برنامه‌نویسی سی کار می‌کنند.