آموزش زبان C (قسمت سوم:if)

به آموزش زبان C (قسمت سوم – if) خوش اومدید.

بازبینی اول : در تاریخ ۹۹/۱۱/۰۷ انجام شد!

دستور های شرطی (if):

دستورات شرطی یا همون (if,else if, else) که خیلی جاها دیدینشون. کاربردهای زیادی دارن و امکان نداره شما در یک پروژه به زبان C این دستورات رو نبینید.

در واقع این دستورات همون اما و اگرهای خودمون هستند که هرروز ازشون استفاده می کنیم.

مثال اول: فرض کنید یه پدر به بچش میگه : پسرم برو از سوپرمارکت سرکوچه یه دبه ماست بگیر!

مثال دوم: یه پدر مسئولیت پذیر به بچش میگه: پسرم برو سر کوچه اگه (if) سوپرمارکت باز بود یه دبه ماست بگیر! اگر(else) نبود برگرد.

مثال سوم: یه پدر که خیلی کارش درسته به بچش میگه: پسرم برو سر کوچه اگه (if) سوپرمارکت باز بود یه دبه ماست بگیر! اگر(else if) باز نبود برو سوپرمارکت کوچه پایینی و اگه (else) هیچکدوم باز نبود برگرد خونه

خب حالا فکر کنید به شما میگن این سه داستانو به کد تبدیل کنید چجوری مینویسید؟

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

مثال اول:

قدم اول: برای هر پارامتر یک اسم میزاریم

فرض کنید پدر همون تابع main ما هست.

پسر همون کامپایلر ما یا میکروکنترلر ما هست.

سوپرمارکت : متغیر X

int main() {
/*define the variables here*/
bool X;
/* TODO: Go to supermarket
and check if X is open (true) */
if (X==true)
{
printf("Mast ra Bekhar");}

return 0;

}

مثال دوم:

int main() {
/*define the variables here */
bool X;
/* TODO: Go to supermarket
and check if X is open (true) */
if (X==true)
{
printf("Mast ra Bekhar");
}
else
{
printf("Bargard Bia");;
}

return 0;
}

مثال سوم:

در مثال سوم سوپر مارکت اول را X1 و متغیر دوم را X2 می نامیم. پس داریم:

int main() {
/* TODO: define the variables here */
bool X1,X2;
/* TODO: Go to supermarket1
and check if X1 is open (true) */
if (X1==true)
{
printf("Mast ra az X1 Bekhar!");

}
else if (X2==true)
{
printf("Mast ra az X2 Bekhar!");
}

else
{
printf("Bargard Bia!");
}

return 0;
}

سه مثال بالا در واقع از نظر کد نویسی درست نیستند چون مثلا ما هیچ جا متغیر X1 یا X2 را به عنوان ورودی دریافت نکردیم که بخوایم بررسی کنیم. در واقع مثالهای بالا فقط یک مثال استفاده از توابع شرطی هستند.

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

int target = ۱۰;
if (target == ۱۰) {
    printf("Target is equal to 10");
}

همانطور که ملاحظه می کنید. دستورات شرطی در واقع میان عبارت داخل پرانتز جلوی خودشونو چک می کنن و اگه برقرار بود تمام عبارتهای درون {} رو اجرا می کنن.

مثلا در مثال بالا اگه متغیر target برابر ۱۰ بود (که هست!) دستور شرطی if درست بوده و کامپایلر در خروجی جمله “Target is equal to 10” را چاپ میکنه.

نکته: به عملگر == عملگر تساوی گفته میشه. و به عملگر = عملگر نسبیت گفته میشه که بعدا در موردشون توضیح میدیم. همینقدر بدونید که وقتی از == استفاده می کنیم. دو طرف تساوی باید برابر باشند وگرنه شرط تساوی برقرار نیست.

بیاید یه مثال دیگه هم بررسی کنیم:

int foo = ۱;
int bar = ۲;
if (foo < bar) {
    printf("foo is smaller than bar.");
}
if (foo > bar) {
    printf("foo is greater than bar.");
}

متوجه شدید در مثال بالا چه اتفاقی افتاد یا توضیح بدم؟

توضیح میدم: دو متغیر از نوع int (عددی) تعریف شده و مقدار دهی هم شده اند.

حالا با استفاده از دو دستور if چک میکنیم آیا foo بزرگتر از bar هست یا کوچیکتر و هر حالت که بود در خروجی میگه کی بزرگتره یا کوچیکتر

اگه دقت کنید ما در کد بالا از دو دستور if استفاده کردیم. یعنی یبار چک کن آیا foo کوچیکتر از bar هست اگه نه! حالا یبار چک کن که آیا foo بزرگتر هست یا نه؟

اما یجور دیگه هم میشه این کد را نوشت به صورت زیر:

int foo = ۱;
int bar = ۲;
if (foo < bar) {
    printf("foo is smaller than bar.");
} else {
    printf("foo is greater than bar.");
}

کد بالا هم کار کد قبلی رو انجام میده اما دو تا تفاوت داره. اولا اینکه با دستور else میگه اگه شرط if برقرار نبود در هر حالتی محتویات else اجرا بشه. دوم اینکه در این حالت خود به خود اگه foo با bar هم برابر باشه محتویات else اجرا میشه. در حالیکه کد قبلی ایرادی که داشت این بود که شرط تساوی رو بررسی نمیکرد.

شرط else یه بدی که داره اینه که خیلی خودمختار عمل میکنه یجورایی به دل نمیشینه!

انگار میگی که همینی که هست یا اینو بخوا یا نمیخوای باید اینو بخوای!!

شرط دیگری هم هست که یکم محترمانه هست! با نام else if که در کد زیر از اون استفاده شده:

int foo = ۱;
int bar = ۲;
if (foo < bar) {
    printf("foo is smaller than bar.");
} else if (foo == bar) {
    printf("foo is equal to bar.");
} else {
    printf("foo is greater than bar.");
}

در کد بالا شرط تساوی بودن را با دستور else if بررسی میکنیم به این صورت که:

در قدم اول با دستور if میگیم آیا foo کوچکتر از bar هست یا نه؟

اگه نبود در قدم دوم میگیم: اگه foo از bar کوچکتر نیست، اشکال نداره ولی آیا foo با bar برابر هست یا نه؟

در قدم سوم میگیم: اگه دو شرط بالا برقرار نبود پس حتما foo از bar بزرگتره پس توی خروجی در هر صورت چاپ کن که:  foo از bar بزرگتره…….

این کد یجورایی بی نقصه! و تمامی حالات رو بررسی میکنه!

خب تقریبا به سه مفهوم if و else if و else آشنا شدیم!

اما یه حالت دیگه ای که وجود داره و ممکنه زیاد باهاش موجه بشید شرط های تو در تو است! یعنی ممکنه در یک دستور شرطی دستورات شرطی دیگری هم داشته باشیم:

int peanuts_eaten = ۲۲;
int peanuts_in_jar = ۱۰۰;
int max_peanut_limit = ۵۰;
if (peanuts_in_jar > ۸۰) {
    if (peanuts_eaten < max_peanut_limit) {
        printf("Take as many peanuts as you want!\n");
    }
} else {
    if (peanuts_eaten > peanuts_in_jar) {
        printf("You can't have anymore peanuts!\n");
    }
    else {
        printf("Alright, just one more peanut.\n");
    }
}

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

استفاده از عملگرهای && و || در دستورات شرطی

عملگرهای && و || کاربردهای زیادی در دستورات شرطی دارند.

به طور خلاصه عملگر && به معنی “و”

و عملگر || به معنی “یا” می باشد.

به مثال زیر توجه کنید:

int foo = ۱;
int bar = ۲;
int moo = ۳;
if (foo < bar && moo > bar) {
  printf("foo is smaller than bar AND moo is larger than bar.");
}
if (foo < bar || moo > bar) {
  printf("foo is smaller than bar OR moo is larger than bar.");

در کد بالا: شرط اول میگه: اگر foo کوچکتر از bar بود و (&&) اگر moo بزرگتر از bar بود یعنی شرط اول برقراره. درحالیکه شرط دوم میگه: اگر foo کوچکتر از bar بود یا (||) اگر moo بزرگتر از bar بود یعنی شرط دوم برقراره.

اما عملگر دیگه ای هم هست به نام مخالف یا (!=) که یعنی : اگر نبود!. به کد زیر نگاه کنید:

int target = ۹;
if (target != ۱۰) {
    printf("Target is not equal to 10");
}

در کد بالا در واقع: شرط میگه که اگر مقدار target برابر با ۱۰ نبود! (یعنی هرچی بود غیر از ۱۰) پس در این صورت شرط درسته.

تمرین: پروژه ای بسازید که در آن سه عدد را بگیرد. یکبار عدد ۵۰۰ را بگیرد، یکبار عدد ۶۰۰ و یکبار هم عدد ۵۵۵. و به کاربر بگوید که آیا عدد را درست حدس زده یا نه. (فرض کنید عدد درست نیز ۵۵۵ است)

از کد کمکی زیر استفاده کنید:

void guessNumber(int guess) {
// TODO: write your code here
}
int main() {
guessNumber(۵۰۰);
guessNumber(۶۰۰);
guessNumber(۵۵۵);
}

جواب تمرین:

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

در واقع میتونستیم کدمونو توی تابع main هم بنویسیم اما استفاده از توابع جداگانه نظم و استاندارد کد نویسی مارو بالا میبره.

به این صورت که اگه دقت کنید ما فقط کافیه نام تابع را که اسمش guessNumber هست با ورودی عدد حدسیمون فراخوانی کنیم تا الگوریتم یا کدمون اجرا بشه.

اما این تابع رو چجوری باید بنویسیم؟

به صورت زیر:

void guessNumber(int guess) {
// TODO: write your code here
if (guess < 555) {
printf("Your guess is too low.\n"); } else if (guess > 555) {
printf("Your guess is too high.\n");
} else {
printf("Correct. You guessed it!\n");
}
}
int main() {
guessNumber(۵۰۰);
guessNumber(۶۰۰);
guessNumber(۵۵۵);
}

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

عدد فرض شده ۵۵۵ است.

حالا اگه عددی که شما به تابع میدید از ۵۵۵ کوچکتر باشد (if (guess<555) ) در این صورت تابع در خروجی عبارت : Your guess is too low را نمایش می دهد

و اگه بزرگتر باشد عبارت : Your guess is too high و اگر دقیقا ۵۵۵ باشد عبارت: Correct. You guessed it را نمایش می دهد.

به همین سادگی :))))))))))))))

پایان آموزش زبان C (قسمت سوم – if)

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...