مشخصات مقاله
-
1270
-
0.0
-
4591
-
0
-
0
آموزش ساختارهای تصمیم گیری در C++
آموزش ساختارهای تصمیم گیری (دستورهای شرطی) در ++C
ساختارهای تصمیم گیری به برنامه این امکان را می دهند تا در طول اجرا یک یا چند شرط را بررسی کند و در صورت صادق بودن هر یک، عملیات خاصی را انجام دهد و نیز چنانچه شرطها هیچ یک صحیح نبودند، عملیات دیگر را به اجرا بگذارد.
در زیر شکل کلی جریان یا روند اجرای برنامه در ساختارهای تصمیم گیری را مشاهده می کنید:

++C از ساختارهای تصمیم گیری زیر پشتیبانی می کند.
عملگر :?
همان طور که در مباحث قبلی شرح دادیم، عملگر ? : یک عبارت شرطی تعریف می کند و می تواند جایگزین if…else در کدنویسی شود. شکل کلی آن به صورت زیر می باشد:
Exp1 ? Exp2 : Exp3;
در این ساختار دستوری Exp1، Exp2 و Exp3 عبارت های شرطی هستند. همان طور که می بینید قبل از عبارت سوم از عملگر دو نقطه استفاده شده است.
ساختار فوق به این صورت پردازش می شود که اول عبارت Exp1 ارزیابی شده و صحت آن بررسی می شود. چنانچه عبارت اول صحیح بود، Exp2 ارزیابی شده و مقدار آن، نتیجه ی کل عبارت فوق محسوب می شود. چنانچه Exp1 صحیح نبود، آنگاه Exp3 ارزیابی شده و مقدار آن نتیجه ی کل عبارت فوق قلمداد می شود.
در زیر نمونه های کاربردی از دستورهای نام برده را به تفصیل شرح می دهیم.
دستور شرطی if
این نوع دستور شرطی ساده از یک عبارت بولی به همراه یک یا چند دستور دیگر تشکیل می شود.
نحوه ی استفاده از دستور شرطی if در زبان C++ به شرح زیر می باشد:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true
}
در صورتی که عبارت بولی صحیح بوده و نتیجه ی ارزیابی true شد، در آن صورت قطعه کد داخل if اجرا می شود. اگر عبارت بولی برابر false شد، اولین مجموعه دستور پس از ساختمان if (پس از کاراکتر "}")
اجرا خواهد شد.

مثال:
#includeusing namespace std; int main () { // local variable declaration: int a = 10; // check the boolean condition if( a < 20 ) { // if condition is true then print the following cout << "a is less than 20;" << endl; } cout << "value of a is : " << a << endl; return 0; }
خروجی قطعه کد فوق به صورت زیر می باشد:
a is less than 20; value of a is : 10
دستور شرطی if…else
می توان پس از دستور if یک دستور else نیز استفاده کرد که در صورت برقرار نبودن شرط اول، عبارت شرطی دستور else اجرا شود.
نحوه ی استفاده از دستور if…else در C++ به شرح زیر می باشد:
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true
} else {
// statement(s) will execute if the boolean expression is false
}
اگر عبارت بولی موجود در if نتیجه ی صحیح داد (برابر true بوده و صادق باشد)، آنگاه دستور موجود در قطعه کد if اجرا می شود و در غیر این صورت کد موجود در بدنه ی else اجرا خواهد شد.
نمودار جریان و روند اجرای برنامه

مثال:
#includeusing namespace std; int main () { // local variable declaration: int a = 100; // check the boolean condition if( a < 20 ) { // if condition is true then print the following cout << "a is less than 20;" << endl; }else { // if condition is false then print the following cout << "a is not less than 20;" << endl; } cout << "value of a is : " << a << endl; return 0; }
خروجی:
a is not less than 20; value of a is : 100
دستور if…else if…else
می توان پس از دستور if، یک دستور شرطی (اختیاری) if…else if…else نیز استفاده کرد. با استفاده از از دستورهای if…else منفرد پشت سرهم، می توان شرطهای مختلف را ارزیابی و صحت درستی آن ها را بررسی کرد.
به هنگام استفاده از if، else if و else لازم است به نکات زیر توجه داشته باشید:
- یک if می تواند 0 یا 1 دستور شرطی else داشته باشد. همچنین این دستور else بایستی بعد از if متعلق به else قرار گیرد.
- یک if می تواند 0 چندین else if داشته باشد.این دستورات else if باید قبل از esle خالی درج شوند.
- زمانی که دستور else if با موفقیت اجرا می شود، در آن صورت شرط سایر else if ها یا else خالی دیگر بررسی نمی شود.
ساختار نگارشی و نحوه ی استفاده از دستور if...else if...else در زبان C++ به شرح زیر می باشد:
if(boolean_expression 1) {
// Executes when the boolean expression 1 is true
}else if( boolean_expression 2) {
// Executes when the boolean expression 2 is true
}else if( boolean_expression 3) {
// Executes when the boolean expression 3 is true
} else {
// executes when the none of the above condition is true.
}
مثال:
#includeusing namespace std; int main () { // local variable declaration: int a = 100; // check the boolean condition if( a == 10 ) { // if condition is true then print the following cout << "Value of a is 10" << endl; } else if( a == 20 ) { // if else if condition is true cout << "Value of a is 20" << endl; } else if( a == 30 ) { // if else if condition is true cout << "Value of a is 30" << endl; }else { // if none of the conditions is true cout << "Value of a is not matching" << endl; } cout << "Exact value of a is : " << a << endl; return 0; }
خروجی:
Value of a is not matching Exact value of a is : 100
دستور چند انتخابی switch
ساختار شرطی switch این امکان را فراهم می کند تا بر اساس مقدار یک متغیر ثابت از میان چندین گزینه (پس از مقایسه ی آن با لیستی از مقادیر) یکی را انتخاب کند. در ساختار switch به هر مقدار یک case گفته می شود و مقدار متغیر موجود در پرانتز switch، به ترتیب با این مقادیر تطبیق داده شود و با هر یک همخوانی داشت، دستور آن را اجرا می نماید. به عبارت دیگر، توسعه دهنده قادر است با استفاده از دستور switch مقدار یک متغیر واحد را با لیستی از مقادیر مقایسه کند و با هر یک که منطبق بود، دستور موجود در آن case را اجرا کند.
نحوه ی استفاده از ساختار چند انتخابی switch در ++C به شرح زیر می باشد:
switch(expression){
case constant-expression :
statement(s);
break; //optional
case constant-expression :
statement(s);
break; //optional
// you can have any number of case statements.
default : //Optional
statement(s);
}
قوانین زیر باید در استفاده از دستور switch رعایت شوند:
- عبارت بکار رفته در دستور switch باید یک نوع عدد صحیح (integral)، شمارشی (enumerated) یا از جنس یک کلاس که حاوی تابع تبدیل به نوع عدد صحیح یا شمارشی هست، باشد.
- می توانید n تا دستور case داخل ساختمان switch داشته باشید. هر case شامل یک مقدار است که عبارت switch با آن مقایسه شده و پس از case یک دو نقطه قرار دارد.
- زمانی که متغیر داخل پرانتز switch برابر یا منطبق با مقداری باشد، دستورات پس از آن case اجرا می شوند تا اینکه اجرا به دستور break برسد.
- زمانی که اجرا به دستور break می رسد، اجرای ساختار switch پایان یافته، روند یا کنترل اجرا به خط بعدی ساختمان switch منتقل (می پرد) می شود.
- لازم نیست تمامی case ها در خود دستور break را داشته باشند. چنانچه دستور break وجود نداشته باشد، اجرا به case های بعدی ادامه می یابد تا اینکه برنامه به یک دستور break رسیده و برنامه به دستور بعدی ساختمان switch برسد.
- توسعه دهنده می تواند در بدنه ی switch خود یک دستور اختیاری به نام default case داشته باشد. این دستور در انتهای ساختمان درج و زمانی استفاده می شود که عبارت switch با هیچ یک از گزینه ها منطبق نباشد. آنگاه عملیات تعریف شده در default اجرا خواهد شد.
نمودار جریان اجرای برنامه در ساختمان switch

مثال:
#includeusing namespace std; int main () { // local variable declaration: char grade = 'D'; switch(grade) { case 'A' : cout << "Excellent!" << endl; break; case 'B' : case 'C' : cout << "Well done" << endl; break; case 'D' : cout << "You passed" << endl; break; case 'F' : cout << "Better try again" << endl; break; default : cout << "Invalid grade" << endl; } cout << "Your grade is " << grade << endl; return 0; }
خروجی زیر را بدست می دهد:
You passed Your grade is D
دستورات if تودرتو (nested if statements)
همچنین این امکان وجود دارد که دستورات if-else را داخل بدنه ی هم قرار داد، بدین معنی که توسعه دهنده می تواند یک دستور if یا else if را داخل یک if یا else if دیگر بگنجاند.
نحوه ی تعریف if های تودرتو به شرح زیر می باشد:
if( boolean_expression 1) {
// Executes when the boolean expression 1 is true
if(boolean_expression 2) {
// Executes when the boolean expression 2 is true
}
}
در صورت نیاز می توان دستور else if…else را نیز همانند if داخل هم قرار داده و به اصطلاح تودرتو کرد.
مثال:
#includeusing namespace std; int main () { // local variable declaration: int a = 100; int b = 200; // check the boolean condition if( a == 100 ) { // if condition is true then check the following if( b == 200 ) { // if condition is true then print the following cout << "Value of a is 100 and b is 200" << endl; } } cout << "Exact value of a is : " << a << endl; cout << "Exact value of b is : " << b << endl; return 0; }
خروجی کد به صورت زیر می باشد:
Value of a is 100 and b is 200 Exact value of a is : 100 Exact value of b is : 200
دستورات switch تودرتو (nested switch statements)
می توان یک switch را داخل بدنه ی یک switch دیگر تعریف کرد. حتی اگر ثوابت (مقادیر case ها) ساختمان هر دو switch یکسان باشد، هیچ تداخلی رخ نخواهد داد.
++C این اجازه را به توسعه دهنده می دهد تا دستورات switch را تا عمق 256 به صورت تودرتو تعریف کند (256 nesting levels).
نحوه ی تعریف switch تودرتو به شرح زیر می باشد:
switch(ch1) {
case 'A':
cout << "This A is part of outer switch";
switch(ch2) {
case 'A':
cout << "This A is part of inner switch";
break;
case 'B': // ...
}
break;
case 'B': // ...
}
مثال:
#includeusing namespace std; int main () { // local variable declaration: int a = 100; int b = 200; switch(a) { case 100: cout << "This is part of outer switch" << endl; switch(b) { case 200: cout << "This is part of inner switch" << endl; } } cout << "Exact value of a is : " << a << endl; cout << "Exact value of b is : " << b << endl; return 0; }
نتیجه ی زیر حاصل می شود:
This is part of outer switch This is part of inner switch Exact value of a is : 100 Exact value of b is : 200