حلقه «Loop» در زبانهای برنامهنویسی روشی است برای اجرای یک دستور یا مجموعهای از دستورات به طور مکرر بسته به نتیجه شرطی که برای اجرای دستورات ارزیابی میشود. نتیجه شرط باید صحیح باشد تا دستورات داخل حلقهها اجرا شوند. در این مقاله، به بررسی انواع حلقه در سی شارپ «#Loop in C» ، ساختار و عملکرد آنها، و کاربردهای مرتبط خواهیم پرداخت.
مقدمه
در برنامهنویسی، حلقهها یکی از اجزای اساسی و پرکاربرد برای انجام عملیات تکراری هستند. این ساختارها به برنامهنویسان امکان میدهند که یک یا چند دستور را به تعداد مشخص یا تا زمانی که یک شرط خاص برقرار است، به صورت خودکار اجرا کنند. انواع مختلف حلقهها، مانند حلقههای کنترل ورودی و خروجی، ابزارهای متنوعی برای مدیریت جریان اجرای برنامه فراهم میکنند. همچنین، مفاهیمی مانند حلقههای تو در تو، حلقههای بیپایان، و دستورات کنترل جریان مانند continue، کاربرد حلقهها را در شرایط مختلف سادهتر و منعطفتر میکنند.
انواع حلقه در سی شارپ
حلقهها عمدتاً به دو دسته تقسیم میشوند:
- حلقههای کنترل ورودی «Entry-controlled loops»
- حلقههای کنترل خروجی «Exit Controlled Loops»
حلقه های کنترل ورودی
حلقههای کنترل ورودی به حلقههایی گفته میشود که در آنها شرط آزمون در ابتدای بدنه حلقه قرار دارد. این به این معناست که قبل از هر بار اجرای دستورات در بدنه حلقه، ابتدا شرط ارزیابی میشود و تنها اگر شرط صحیح باشد، حلقه ادامه مییابد. در زبان سیشارپ، دو نوع حلقه اصلی که بهعنوان حلقههای کنترل ورودی شناخته میشوند عبارتند از:
- حلقه while
- حلقه for
حلقه while در سی شارپ
در حلقه while، شرط آزمون در ابتدای حلقه قرار میگیرد. این شرط برای ارزیابی وضعیت ادامه اجرای حلقه استفاده میشود. حلقه while تا زمانی که شرط بهصورت بولی true باشد، دستورات داخل حلقه اجرا میشوند. به محض اینکه شرط به false تبدیل شود، کنترل از حلقه خارج شده و حلقه خاتمه مییابد.
ساختار while در سی شارپ
ساختار while در سی شارپ بصورت شماتیک در تکه کد زیر مشاهده می شود.
while (boolean condition) { loop statements... }
فلوچارت while در سی شارپ
هر چند که دستور while در تمام زبان های برنامه نویسی دارای یک فلوچارت می باشد ولی فلوچارت دستور while در سی شارپ بصورت زیر است:
مثال دستور while در سی شارپ
در مثال زیر میخواهیم یک کلمه را مثلاً ۴ بار چاپ کنیم. برای این منظور از دستور while در سی شارپ استفاده می کنیم. تکه کد زیر این کار را برای ما انجام میدهد.
// C# program to illustrate while loop using System; class whileLoopDemo { public static void Main() { int x = 1; // Exit when x becomes greater than 4 while (x <= 4) { Console.WriteLine("ProgramStore"); // Increment the value of x for // next iteration x++; } } }
خروجی
ProgramStore ProgramStore ProgramStore ProgramStore
نکته: شرط آزمون در ابتدای حلقه بررسی میشود و اگر false باشد، حلقه هیچوقت اجرا نمیشود.
حلقه while برای شرایطی که تعداد تکرارهای حلقه بهطور مشخص معلوم نیست، مفید است.
حلقه for در سی شارپ
حلقه for در زبان سیشارپ عملکرد مشابه حلقه while دارد، اما نوشتار و ساختار آن به گونهای است که برای شرایط خاصی بسیار مفیدتر است. بهویژه زمانی که تعداد دفعات اجرای دستورات حلقه از پیش مشخص باشد، استفاده از حلقه for ترجیح داده میشود.
ساختار for در سی شارپ
ساختار یا سینتکس for در سی شارپ به صورت زیر است:
for (loop variable initialization ; testing condition; increment / decrement) { // statements to be executed }
فلوچارت for در سی شارپ
استفاده از فلوچارت برای درک نحوه عملکرد حلقه for بهویژه برای کسانی که در حال یادگیری برنامهنویسی هستند، کمک میکند تا بهراحتی جریان برنامه را دنبال کرده و اطمینان حاصل کنند که تعداد دفعات تکرار و شرایط آن بهدرستی تنظیم شده است. فلوچارت for در سی شارپ به صورت زیر است:
در دستور for در زبان سیشارپ، سه بخش اصلی وجود دارد که هرکدام وظیفه خاص خود را دارند:
- مقداردهی متغیر حلقه «Initialization»: در این قسمت، متغیر یا عبارت کنترل حلقه مقداردهی میشود. این بخش فقط یک بار در ابتدای شروع حلقه اجرا میشود و میتواند شامل یک متغیر جدید باشد که فقط در حلقه قابل دسترسی است یا یک متغیر از پیش اعلامشده که در سایر بخشهای کد نیز قابل استفاده است.
- شرط آزمون «Condition»: این شرط برای ارزیابی وضعیت اجرای حلقه استفاده میشود. حلقه تا زمانی که این شرط مقدار صحیح (true) باشد ادامه مییابد. وقتی این شرط نادرست (false) شود، حلقه خاتمه مییابد.
- افزایش/کاهش «Increment/Decrement»: در این بخش، متغیر حلقه طبق نیاز افزایش یا کاهش مییابد. پس از آن، دوباره شرط آزمون بررسی میشود و در صورت صحیح بودن، حلقه ادامه مییابد.
مثال برای حلقه for در سی شارپ
تکه کد زیر یک برنامه ساده به زبان #C است که استفاده از حلقه for را نشان میدهد. این مثال ساده برای آموزش نحوه کارکرد حلقه for مناسب است.
در کد زیر اگر مقدار x <= 4 تغییر کند، تعداد تکرار حلقه تغییر خواهد کرد.
// C# program to illustrate for loop. using System; class forLoopDemo { public static void Main() { // for loop begins when x=1 // and runs till x <= 4 for (int x = 1; x <= 4; x++) Console.WriteLine("ProgramStore"); } }
خروجی
ProgramStore ProgramStore ProgramStore ProgramStore
حلقه های کنترل خروجی
حلقههایی که شرط آزمون در انتهای بدنه حلقه قرار دارند به عنوان حلقههای کنترل خروجی شناخته میشوند. حلقه do-while یک حلقه کنترل خروجی است.
توجه: در حلقههای کنترل خروجی، بدنه حلقه حداقل یک بار ارزیابی میشود زیرا شرط آزمون در انتهای بدنه حلقه قرار دارد.
حلقه do-while در سی شارپ
حلقه do-while مشابه حلقه while است، اما تفاوت اصلی آن در این است که شرط پس از اجرای بدنه حلقه بررسی میشود، نه قبل از آن. این ویژگی باعث میشود که حلقه do-while حداقل یک بار دستورات داخل بدنه حلقه را اجرا کند، حتی اگر شرط اولیه نادرست باشد.
ساختار do-while در سی شارپ
ساختار و نحوه نوشتار دستور do-while در سی شارپ به صورت زیر است:
do { statements.. }while (condition);
فلوچارت do-while در سی شارپ
مهمترین ویژگی do-while در سی شارپ این است که حداقل یکبار دستورات داخل حلقه اجرا میشود، زیرا شرط پس از اجرای اولین بار بررسی میشود.
فلوچارت زیر بهطور واضح نشان میدهد که پس از اولین اجرای دستورات، شرط بررسی شده و در صورت درست بودن، حلقه دوباره اجرا خواهد شد. فلوچارت دستور do while معمولاً بهصورت زیر است:
مثال do-while در سی شارپ
در زیر مثالی از برنامهای که از دستور do-while در سیشارپ استفاده میکند، آورده شده است. این برنامه کلمه ProgramStore را چاپ میکند.
در این مثال، بدنه حلقه حداقل یک بار اجرا میشود، حتی اگر شرط false باشد، زیرا شرط پس از اجرای دستورات بررسی میشود.
این نوع حلقه زمانی مفید است که بخواهید حداقل یک بار بدنه حلقه اجرا شود.
// C# program to illustrate do-while loop using System; class dowhileloopDemo { public static void Main() { int x = 21; do { // The line will be printed even // if the condition is false Console.WriteLine("ProgramStore"); x++; } while (x < 20); } }
خروجی
ProgramStore
حلقه های بیپایان در سی شارپ
حلقههای بیپایان «Infinite Loops» حلقههایی هستند که در آنها شرط آزمون هیچوقت به false تبدیل نمیشود، بنابراین حلقه به طور مداوم اجرا میشود و هیچگاه خاتمه نمییابد، مگر اینکه یک نیروی خارجی (مثل قطع برنامه یا دستور خاص برای خروج از حلقه) آن را متوقف کند.
این نوع حلقهها به دلایل مختلفی ممکن است بهطور عمدی یا تصادفی ایجاد شوند. برای مثال، اگر شرط حلقه همیشه برقرار باشد یا اگر متغیر کنترل حلقه بهطور نادرست تغییر کند، حلقه به صورت نامحدود ادامه خواهد یافت.
مثال برای حلقه های بیپایان در سی شارپ
این کد یک مثال ساده از یک حلقه بیپایان «infinite loop» در زبان #C است.
// C# program to demonstrate infinite loop using System; class infiniteLoop { public static void Main() { // The statement will be printed // infinite times for(;;) Console.WriteLine("This is printed infinite times"); } }
خروجی
This is printed infinite times This is printed infinite times This is printed infinite times This is printed infinite times This is printed infinite times This is printed infinite times This is printed infinite times ..........
توضیح: با شروع اجرای برنامه، حلقه for وارد حالت بینهایت میشود زیرا:
- مقدار اولیه مشخص نشده است.
- شرط پایان وجود ندارد.
- تغییر مقدار نیز انجام نمیشود.
- بنابراین، شرط ادامه حلقه همیشه درست (true) در نظر گرفته میشود و دستور چاپ (Console.WriteLine) به طور مداوم اجرا میشود.
حلقههای تو در تو در سی شارپ
حلقههای تو در تو «Nested Loops» در زبان سیشارپ زمانی استفاده میشوند که یک حلقه داخل حلقه دیگری قرار گیرد. این نوع حلقهها زمانی کاربرد دارند که بخواهیم برای هر تکرار یک حلقه، حلقه دیگری را اجرا کنیم. به عبارت دیگر، حلقه داخلی برای هر بار اجرای حلقه بیرونی، اجرا میشود.
حلقههای تو در تو معمولاً در مواقعی کاربرد دارند که نیاز است بهصورت موازی یا تکراری مجموعهای از دادهها یا شرایط را بررسی و پردازش کنیم.
مثال برای حلقههای تو در تو در سی شارپ
این کد نمونهای از استفاده از حلقههای تو در تو «nested loops» در زبان #C است.
// C# program to demonstrate nested loops using System; class nestedLoops { public static void Main() { // loop within loop printing GeeksforGeeks for (int i = 2; i < 3; i++) for (int j = 1; j < i; j++) Console.WriteLine("ProgramStore"); } }
خروجی
ProgramStore
توضیح: حلقه خارجی i فقط یک مقدار میگیرد. i = 2 زیرا بازه آن بسیار محدود است.
حلقه داخلی نیز فقط یک بار اجرا میشود زیرا مقدار j تنها برای یک مقدار شرط را برقرار میکند.
اگر بخواهیم حلقهها گستردهتر شوند، میتوان مقادیر یا شرایط را تغییر داد.
دستور continue در سی شارپ
دستور continue در زبان سیشارپ برای رد کردن قسمت بعدی اجرای حلقه در شرایط خاص استفاده میشود. زمانی که دستور continue اجرا میشود، به جای ادامه دادن به اجرای دستورات بعدی داخل حلقه، کنترل حلقه به بخش بعدی منتقل میشود و حلقه از سر گرفته میشود.
این دستور معمولاً زمانی کاربرد دارد که بخواهید در صورت برآورده شدن یک شرط خاص، ادامه اجرای سایر دستورات درون حلقه را نادیده بگیرید و حلقه را برای تکرار بعدی آماده کنید.
فلوچارت continue در سی شارپ
دستور continue بهعنوان یک نقطه انشعاب در فلوچارت نمایش داده میشود که اگر شرط برقرار باشد، جریان اجرای برنامه را به مرحله بعدی تکرار هدایت میکند. فلوچارت دستور continue در یک حلقه معمولاً به این صورت است:
مثال continue در سی شارپ
تکه کد زیر نمونهای از استفاده از دستور continue در زبان #C است. دستور continue برای عبور از ادامه اجرای حلقه در شرایط خاص استفاده میشود.
// C# program to demonstrate continue statement using System; class demoContinue { public static void Main() { // ProgramStore is printed only 2 times // because of continue statement for (int i = 1; i < 3; i++) { if (i == 2) continue; Console.WriteLine("ProgramStore"); } } }
خروجی
ProgramStore
سخن آخر
حلقهها در برنامهنویسی ابزاری قدرتمند و ضروری برای انجام عملیات تکراری و مدیریت جریان اجرای برنامه هستند. با درک انواع مختلف حلقه در سی شارپ مانند حلقههای کنترل ورودی، کنترل خروجی، و حلقههای تو در تو، برنامهنویسان میتوانند کدهایی بهینهتر، خواناتر و منعطفتر ایجاد کنند. علاوه بر این، استفاده صحیح از دستورات کنترلی مانند continue به بهبود کارایی و سادگی کد کمک میکند. در نهایت، آشنایی عمیق با عملکرد و کاربرد حلقهها، مهارتی حیاتی برای حل مسائل پیچیده و توسعه نرمافزارهای کارآمد محسوب میشود.
ممنون از مطالب و مثال کاردبردی که در اختیار ما قرار دادید.