درس سوم – دستورالعمل‌های کنترلی و شرطی

برنامه 1-3 از یک متغیر myInt برای دریافت ورودی از کاربر استفاده می‌نماید، سپس با استفاده از یک سری دستورات کنترلی، که همان دستور if در اینجاست، عملیات خاصی را بسته به نوع ورودی انجام می‌دهد. در ابتدای این برنامه عبارت Please enter a umber: در خروجی چاپ می‌شود. دستور Console.ReadLine() منتظر می‌ماند تا کاربر ورودی وارد کرده و سپس کلید Enter را فشار دهد. همانطور که در قبل نیز اشاره کرده‌ایم، دستور Console.ReadLine() عبارت ورودی را به فرم رشته دریافت می‌نماید پس مقدار ورودی کاربر در اینجا که یک عدد است به فرم رشته‌ای در متغیر myInput که از نوع رشته‌ای تعریف شده است قرار می‌گیرد. اما میدانیم که برای اجرای محاسبات و یا تصمیم‌گیری بر روی اعداد نمی‌توان از آنها در فرم رشته‌ای استفاده کرد و باید آنها را بصورت عددی مورد استفاده قرار داد. به همین منظور باید متغیر myInput را به نحوی به مقدار عددی تبدیل نماییم. برای این منظور از عبارت Int32.Parse() استفاده می‌نماییم. این دستور مقدار رشته‌ای متغیر داخل پرانتزش را به مقدار عددی تبدیل کرده و آنرا به متغیر دیگری از نوع عددی تخصیص می‌دهد. در این مثال نیز همانطور که دیده می‌شود، myInput که تز نوع رشته‌ای است در داخل پرانتز قرار گرفته و این مقدار برابر با myInt که از نوع int است قرار گرفته است. با این کار مقدار عددی رشته ورودی کاربر به متغیر myInt تخصیص داده می‌شود. (توضیح کامل‌تری در مورد Int32 و سایر تبدیلات مشابه به‌ آن در درسهای آینده و در قسمت نوع‌های پیشرفته مورد بررسی قرار می‌گیرند.)حال ما متغیری از نوع مورد نظر در دست داریم و می‌توانیم با استفاده از دستور if بر روی آن پردازش انجام داده و تصمیم‌گیری نماییم.

 

دستور if

اولین دستور بصورت if (boolean expression) {statements} آورده شده است. دستور if با استفاده از کلمه کلیدی if آغاز می‌شود. سپس یک عبارت منطقی درون یک زوج پرانتز قرار می‌گیرد . پس از بررسی این عبارات منطقی دستورالعمل/دستورالعمل‌های داخل کروشه اجرا می‌شوند. همانطور که مشاهده می‌نمایید، دستور if یک عبارت منطقی را بررسی می‌کند. در صورتیکه مقدار این عبارات true باشد دستورهای داخل بلوک خود را اجرا می‌نماید(قبلا توضیح داده شد که دستورهایی که داخل یک زوج کروشه {} قرار می‌گیرند در اصطلاح یک بلوک نامیده می‌شوند.) و در صورتیکه مقدار آن برابر با false باشد اجرای برنامه به بعد از بلوک if منتقل می‌شود. در این مثال همانطور که ملاحظه می‌نمایید، عبارت منطقی دستور if بشکل if(myInt > 0) است. در صورتیکه مقدار myInt بزرگتر از عدد صفر باشد، دستور داخل بلوک if اجرا می‌شود و در غیر اینصورت اجرای برنامه به بعد از بلوک if منتقل می‌گردد.

 

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

 

دستور if-else

در بیشتر موارد از تصمیم‌گیری‌های دوگانه یا چندگانه استفاده می‌شود. در این نوع تصمیم‌گیری‌ها، دو یا چند شرط مختلف بررسی می‌شوند و در صورت true بودن یکی از آنها عمل مربوط به آن اجرا می‌گردد. سومین دستور if در این برنامه نشان دهنده یک تصمیم‌گیری دوگانه است. در این حالت درصورتیکه عبارت منطقی دستور if برابر با true باشد دستور بعد از if اجرا می‌شود و در غیر اینصورت دستور بعد از else به اجرا در می‌آید. در حقیقت در این حالت می‌گوئیم " اگر شرط if صحیح است دستورات مربوط به if را انجام بده و درغیر اینصورت دستورات else را اجرا کن".

فرم کلی دستور if-else بصورت زیر است :

if (boolean expression)

   {statements}

else

   {statements}

که در آن boolean expression عبارت منطقی است که صحت آن مورد بررسی قرار می‌گیرد و statements دستور یا دستوراتی است که اجرا می‌گردند.

 

دستور if-else if … else یا if تودرتو

در صورتیکه نیاز باشد تا چندین حالت منطقی مورد بررسی قرار گیرد و دستورات مربوط به یکی از آنها اجرا شود، از فرم تصمیم‌گیری چندگانه استفاده می‌نماییم. این نوع استفاده از دستور if در اصطلاح به if تودرتو (Nested If) معروف است چراکه در آن از چندین دستور if مرتبط به یکدیگر استفاده شده است. چهارمین دستور if در مثال 1-3 استفاده از if تودرتو  را نشان می‌دهد. در این حالت نیز دستور با کلمه کلیدی if آغاز می‌گردد. شرطی بررسی شده و در صورت true بودن دستورات مربوط به آن اجرا می‌گردد. اما اگر مقدار این عبارت منطقی false بود آنگاه شرطهای فرعی دیگری بررسی می‌شوند.این شرطهای فرعی با استفاده از else if مورد بررسی قرار می‌گیرند. هر یک از این شرطها دارای عبارات منطقی مربوط به خود هستند که در صورت true بودن عبارت منطقی دستورات مربوط به آنها اجرا می‌گردد و در غیر اینصورت شرط بعدی مورد بررسی قرار می‌گیرد. باید توجه کنید که در ساختار if تودرتو تنها یکی از حالتها اتفاق می‌افتد و تنها یکی از شرطها مقدار true را بازمی‌گرداند.

فرم کلی if تودرتو بشکل زیر است :

if (boolean expression)

   {statements}

else if (boolean expression)

   {statements}

else

   {statements}

عملگرهای OR و AND  (|| و &&)

نکته دیگری که باید در اینجا بدان اشاره کرد، نوع شرطی است که در عبارت منطقی دستور if آخر مورد استفاده قرار گرفته است. در این عبارت منطقی از عملگر || استفاده شده است که بیانگر OR منطقی است. عملگر OR زمانی مقدار true بازمی‌گرداند که حداقل یکی از عملوندهای آن دارای مقدار true باشد. بعنوان مثال در عبارت (myInt < 0 || myInt == 0)، در صورتیکه مقدار متغیر myInt کوچکتر یا مساوی با صفر باشد، مقدار عبارت برابر با true است. نکته قابل توجه آنست که در زبان ‍C همانطور که در درس دوم به آن اشاره شد، دو نوع عملگر OR وجود دارد. یکی OR منطقی که با || نمایش داده می‌شود و دیگری OR معمولی که با | نشان داده می‌شود. تفاوت بین این دو نوع OR در آنست که OR معمولی هر دو عملگر خود را بررسی می‌نماید اما OR منطقی تنها در صورتیکه عملگر اول آن مقدار false داشته باشد به بررسی عملگر دوم خود می‌پردازد.

 

عبارت منطقی (myInt > 0 && myInt <= 10) حاوی عملگر AND شرطی (&&) می‌باشد. این عبارت در صورتی مقدار true بازمی‌گرداند که هر دو عملوند AND دارای مقدار true باشند. یعنی در صورتیکه myInt هم بزرگتر از صفر باشد و هم کوچگتر از 10، مقدار عبارت برابر با true می‌گردد. در مورد AND نیز همانند OR دو نوع عملگر وجود دارد. یکی AND معمولی (&) و دیگری AND شرطی (&&). تفاوت این دو نیز در آنست که AND معمولی (&) همیشه هر دو عملوند خود را بررسی می‌نماید ولی AND شرطی (&&) تنها هنگامی به بررسی عملوند دوم خود می‌پردازد که مقدار اولین عملوندش برابر با true باشد. عملگرهای منطقی  (|| و &&) را در اصطلاح عملگرهای میانبر (short-circuit) می‌نامند چراکه تنها در صورت لزوم عملوند دوم خود را بررسی می‌نمایند و از اینرو سریعتر اجرا می‌شوند.

 

بررسی دستور switch

همانند دستور if، دستور switch نیز امکان تصمیم‌گیری را در یک برنامه فراهم می‌نماید.

مثال 2-3 – دستورالعمل switch

using System;

 

class SwitchSelect

 {

/ 0 نظر / 21 بازدید