دستورات كنترلي
DESCRIPTION
دستورات كنترلي. ساختارهاي كنترل. همیشه برنامه بصورت ترتیبی اجرا می شود مگر اینکه اتفاق خاصی رخ دهد. در این حالت ما از ساختارهای كنترل برنامه استفاده می کنیم. ساختارهای كنترلي دو نوع عملکرد مفید را در اختیار ما قرار میدهند: انتخاب بین گزینه های مختلف بر حسب شرایط موجود تکرار یا حلقه. - PowerPoint PPT PresentationTRANSCRIPT
1
دستورات كنترلي
2
ساختارهاي كنترل
همیشه برنامه بصورت ترتیبی اجرا می شود مگراینکه اتفاق خاصی رخ دهد.
در این حالت ما از ساختارهای كنترل برنامهاستفاده می کنیم.
ساختارهای كنترلي دو نوع عملکرد مفید را دراختیار ما قرار میدهند:
بین گزینه های مختلف بر حسب شرایط موجودانتخاب یا حلقهتکرار
3
انتخاب
یک ساختار کنترلی انتخاب، برای انتخاب بینگزینه های متفاوت استفاده می گردد.
وجود داشته داشته باشد که بر شرطباید یک اساس آن گزینه مورد نظر انتخاب شود.
ساختارهای کنترلی انتخاب درC++: if if/else switch
4
ساختارهاي كنترل تكرار(Repetition Control Structures)
به ما امکان می دهند تکرارساختارهای کنترلی که قسمتی از برنامه را به تعداد دلخواه اجرا
کنیم.
C++:دارای ساختارهای تکرار زیر است while for do-while
5
ساختار انتخاب
ifدستور
6
ifدستور ساختار کنترلیif پس از بررسي صحت يك
شرط اجازه انجام يك دستور العمل يا يك بلوك از دستورات را صادر مينمايد.
نحوه استفاده از دستورif:به شكل زير است
if (<عبارت منطقي>){
< if بدنه >
}
7
ifفلوچارت مربوط به دستور
دستورهاي قبلي
شرط؟ عمل
دستور بعدي
true
false
8
عملگرهاي شرطي
آشنا شديم اين عملگرها u همانطور كه قبًالخروجي منطقي دارند :
:عملگرهاي مقايسه اي> بزرگتر=> بزرگتر مساوي< کوچکتر=< کوچکتر مساوي
:عملگرهاي تساوي==مساوي=!مخالف
9
مثال: ’y‘برنامه اي بنويسيد كه كاراكتري را از كاربر گرفته و اگر برابر
بود يك پيغام نشان دهد
int main)({
char ch;printf ) "Enter a character:" (;ch = getche)(;if )ch == ‘y’ ({
printf ) "\n You typed y." (;printf ) "\n Not some other letter." (;
} getch)(;
return 0;}
10
عملگرهاي منطقي
اين عملگرها بر روي اپرندهاي منطقي عملميكنند و يك مقدار منطقي را برميگردانند:
AND , OR , NOT
xyx AND yx OR yNOT x
xyx && yx || y!x
00001010111001011110
11
عملگرهاي شرطي و عملگرهاي منطقي
ورودي عملگرهاي شرطي، عبارات رياضيهستند
خروجي عملگرهاي شرطي يك مقدار منطقياست
ورودي عملگرهاي منطقي ، عبارات منطقيهستند
خروجي عملگرهاي منطقي يك مقدار منطقياست
12
با استفاده از عملگرهاي منطقي ميتوان عباراتشرطي مورد نظر را توليد نمود.
،مثال: عبارت شرطيx بزرگتر از y و y مخالف عدد مثبت باشد به شكل زير نوشته xصفر و ميشود
)x < y( && )y != 0( && )x < 0(
13
مثال: برنامه اي بنويسيد كه تعداد واحد اخذ شده توسط كاربر و معدل را
بود 18و معدل او باالتر از 14گرفته و اگر تعداد واحدها بيشتر از به او پيام تبريك بگويد.
void main)({
float units,average;printf ) "Enter Units , Average\n:" (;scanf ) “%f %f", &units, &average (;
if )units<14 && average <18({
printf ) "\n You are the best." (;printf ) "\n You will be a good programmer!!!!." (;
}getch)(;
}
14
عبارت شرطي
در ساختارهای انتخاب، عبارت شرطي یک درست دارد که (Boolean) مقدار منطقي
استغلطیا درC++:
برابر غلط است0مقدار هر مقدار دیگری برابر درست است
15
درصورتي كه بدنه دستورif تنها يك دستور داشته باشد ميتوان آكوالدها را ننوشت
:مثالif (3<4) printf( "I am true!\n");
16
تودرتوifدستورات ميتوان دستوراتif را پشت سر هم براي
بررسي شرايط مختلف استفاده نمود. يعني يك ديگري باشدif بخشي از بدنه دستور ifدستور
char main)({ if )getche)( == ‘n’ ( {
if )getche)( == ‘o’ ( {
printf ) "\n You typed no." (; } } return getch)(;}
char main)({
if )getche)( == ‘n’ ( if )getche)( == ‘o’ ( printf ) "\n You typed no."
(;return getch)(;
}
17
اشتباهات معمول
اغلب عملگر انتساب )=( با عملگر تساوی)==( اشتباه گرفته میشود.
:در عبارت زیر چه ایرادی وجود دارد
if )grade=100(printf) "your grade is perfect!\n" (;
18
if-elseساختار كنترلي در دستورif اگر شرط درست باشد، يك دستور يا مجموعه اي از
دستورات اجرا ميشود.ساختار کنترلیif else اجازه می دهد که در صورت صدق نکردن
یا غلط بودن شرط، عمل دیگری انجام گردد.if (<عبارت شرطي>){
< ifبدنه >}else{
< elseبدنه >}
19
دستورهاي قبلي
شرط؟ 1عمل
دستوربعدي
truefalse2عمل
20
مثال:
char main)({
char ch;printf ) "Enter a character:" (;ch = getche)(;if )ch == ‘y’ ({
printf ) "\n You typed y." (;}else{
printf ) "\n You did not type y." (;}return getch)(;
}
21
هاي متواليif-elseدستورات
تا كنون با استفاده از دستورif-else ساختاري پياده سازي شد كه درصورت صحت شرط يك سري
دستورات و درصورت عدم صحت شرط مجموعه اي ديگر از دستورات انجام ميشدند
در بسياري از كاربردها الزم است كه شرايطمختلفي بررسي شوند و با توجه به صحت هر يك از
شرطها عمليات مناسب انجام پذيرد همچنين اينكه درصورت صحت يك شرط ديگر الزم
نيست شرطهاي ديگر بررسي شوند
22
هاي متواليif-elseدستورات
بدين ترتيب ميتوان از ساختارif-else متوالي >) ifاستفاده نمود 1عبارت شرطي >)
{1بدنه شرط > >
}else if (< عبارت
2شرطي >){
2بدنه شرط > >}…else{
< elseبدنه >}
23
دستورهاي قبلي
؟1شرط 1عمل
دستوربعدي
true
false
؟2شرط 2عمل true
false
elseبدنه
...
24
)(char mainمثال: {
char ch;float grade;printf ) "Enter grade:" (;scanf ) "%f" , &grade(;if )grade < 18.0(
ch = ‘A’ ;else if )grade < 16.0(
ch = ‘B’ ;else if )grade < 14.0(
ch = ‘C’ ;else if )grade < 10.0(
ch = ‘E’ ;else
ch = ‘F’ ; printf ) "\n Your Level is: %c" , ch (;return getch)(;
}
25
ifتمرين مربوط به كاربرد
زمان تحويل: جلسه آينده
26
تمرين الف
برنامه حل معادله درجه دو را به شكل زيراصًالح نماييد:
درصورتي كه دلتا منفي بود پيغام مناسب دادهشود.
درصورتي كه دلتا برابر با صفر بود وجود ريشهمضاعف و مقدار آن گزارش شود
درغير اينصورت ريشه هاي معادله محاسبهشده و نمايش داده شوند
27
تمرين ب
برنامه اي بنويسيد كه ساعات كاركرد كارمند و تعدادفرزندان وي را گرفته و حقوق آنرا محاسبه نمايد
* 2500حقوق خالص = ساعات كاركرد تومان 1500به ازاي هر فرزند و حداكثر تا سه فرزند، مبلغ
به حقوق اضافه ميشود ساعت كمتر باشد به ازاي 100اگر ساعات كاركرد از
تومان 500 براي هر ساعت مبلغ 100ساعات باقيمانده تا از حقوق كسر ميشود
حقوق بعنوان ماليات و بيمه از حقوق كسر 5مبلغ %ميشود.
28
switch-caseساختار انتخاب
از اين ساختار براي تصميم گيري هاي چندگانه، استفاده يك عبارتبراساس مقادير مختلف
ميشود. بطور كلي در تمامي تصميم گيري هايي كه بيش از
سه انتخاب وجود داشته باشد، بهتر است از استفاده شود.switchساختار
ساختار انتخابswitch-case مشابه if-else هاي متوالي ميباشد ولي كد برنامه را خواناتر ميكند.
29
-switchنحوه استفاده از ساختار case
switch (<عبارت>){
case < مقدار ثابت1>:
< 1دستورات >break;
case < مقدار ثابت2>:
< 2دستورات >break;
default:< n دستورات
>
}
مقادير نوشته شده در مقابل ثابت بايد caseعبارت باشند.
انتهاي دستورات مربوط به با كلمه كليدي caseهر
breakمشخص ميشود در صورتي كه حاصل ارزيابي
عبارت در هيچ يك از حاالت درنظر گرفته شده، موجود
نباشد عبارت مربوط به اجرا ميگردد.defaultبخش
30
-swithنحوه استفاده از ساختار case
فرض كنيد متغيري با نامx وجود دارد كه ميخواهيم براساس مقادير مختلف
آن تصميمات مختلفي بگيريم. اگرx برابر با يك بود، مجموعه
،1دستورات 2 بود، مجموعه دستورات7اگر برابر با، 3 بود، مجموعه دستورات9اگر برابر با، بود، مجموعه 15اگر برابر با
4دستورات و اگر با هيچكدام برابر نبود، مجموعه
اجرا شوند.5دستورات
swith (x){
case 1:دستورات >
1>break;
case 7:دستورات >
2>break;
case 9:دستورات >
3>break;
case 15:دستورات >
4>break;
default:دستورات >
5>}
31
switchنكات استفاده از ساختار ساختارswitch ميتواند فاقد بخش defaultباشد مقادير موجود درcase هاي switch نميتوانند با
هم مساوي باشند. توجه داشته باشيد كه ثوابت كاراكتري هنگام
كامپايل به كد اسكي تبديل ميشوند اگر در انتهاي دستورات مربوط به يكcase ،
فراموش شود، دستورات مربوط breakدستور بعدي نيز اجرا ميشوند.caseبه
32
و ساختار if-elseتفاوتهاي switch
در ساختارif چند عبارت با هم مقايسه ميشوند و شرطي دوم if اول نوشته ميشود محدوديتي در نوشتن ifكه در
حاصل يك عبارت مورد switchايجاد نميكند ولي در ارزيابي قرار ميگيرد
مقادير مقايسه شونده در ساختارif-else ميتوانند متغير مقادير انتخاب بايد ثابتهايي swithباشند ولي در ساختار
قرار ميگيرندcaseباشند كه مقابل دستور در ساختارif-else ميتوان عبارت منطقي يا رابطه اي را
فقط switchمورد بررسي قرار داد ولي در ساختار بودن“ مورد بررسي قرار ميگيرد.”مساوي
33
مثال:
برنامه اي بنويسيد كه دو عملوند و يك عملگر راخوانده و با توجه به عملگر نتيجه را در خروجي
نمايش دهد
34
int main)({ int num1 , num2 , result = 0; char op; printf)"\nEnter num1: "(; scanf) "%d" , &num1(; printf)"\nEnter num2: "(; scanf) "%d" , &num2(; printf)"\nEnter operator)+,*,-,/(: "(; op = getche)(; switch)op( {
case '+':result = num1 + num2;break;
case '-':result = num1 - num2;break;
case '*':result = num1 * num2;break;
case '/':result = num1 / num2;break;
default:printf)"\n\noperator is indefined"(;
} printf)"\n\nresult is: %d",result(; getch)(; return 0;}
Enter num1: 5
Enter num2: 3
Enter operator+ :)/,-,*,+(
result is: 8