دستورات كنترلي

34
1 ي ل ر ت ن ك ورات ت س د

Upload: vail

Post on 14-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

دستورات كنترلي. ساختارهاي كنترل. همیشه برنامه بصورت ترتیبی اجرا می شود مگر اینکه اتفاق خاصی رخ دهد. در این حالت ما از ساختارهای كنترل برنامه استفاده می کنیم. ساختارهای كنترلي دو نوع عملکرد مفید را در اختیار ما قرار میدهند: انتخاب بین گزینه های مختلف بر حسب شرایط موجود تکرار یا حلقه. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: دستورات كنترلي

1

دستورات كنترلي

Page 2: دستورات كنترلي

2

ساختارهاي كنترل

همیشه برنامه بصورت ترتیبی اجرا می شود مگراینکه اتفاق خاصی رخ دهد.

در این حالت ما از ساختارهای كنترل برنامهاستفاده می کنیم.

ساختارهای كنترلي دو نوع عملکرد مفید را دراختیار ما قرار میدهند:

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

Page 3: دستورات كنترلي

3

انتخاب

یک ساختار کنترلی انتخاب، برای انتخاب بینگزینه های متفاوت استفاده می گردد.

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

ساختارهای کنترلی انتخاب درC++: if if/else switch

Page 4: دستورات كنترلي

4

ساختارهاي كنترل تكرار(Repetition Control Structures)

به ما امکان می دهند تکرارساختارهای کنترلی که قسمتی از برنامه را به تعداد دلخواه اجرا

کنیم.

C++:دارای ساختارهای تکرار زیر است while for do-while

Page 5: دستورات كنترلي

5

ساختار انتخاب

ifدستور

Page 6: دستورات كنترلي

6

ifدستور ساختار کنترلیif پس از بررسي صحت يك

شرط اجازه انجام يك دستور العمل يا يك بلوك از دستورات را صادر مينمايد.

نحوه استفاده از دستورif:به شكل زير است

if (<عبارت منطقي>){

< if بدنه >

}

Page 7: دستورات كنترلي

7

ifفلوچارت مربوط به دستور

دستورهاي قبلي

شرط؟ عمل

دستور بعدي

true

false

Page 8: دستورات كنترلي

8

عملگرهاي شرطي

آشنا شديم اين عملگرها u همانطور كه قبًالخروجي منطقي دارند :

:عملگرهاي مقايسه اي> بزرگتر=> بزرگتر مساوي< کوچکتر=< کوچکتر مساوي

:عملگرهاي تساوي==مساوي=!مخالف

Page 9: دستورات كنترلي

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;}

Page 10: دستورات كنترلي

10

عملگرهاي منطقي

اين عملگرها بر روي اپرندهاي منطقي عملميكنند و يك مقدار منطقي را برميگردانند:

AND , OR , NOT

xyx AND yx OR yNOT x

xyx && yx || y!x

00001010111001011110

Page 11: دستورات كنترلي

11

عملگرهاي شرطي و عملگرهاي منطقي

ورودي عملگرهاي شرطي، عبارات رياضيهستند

خروجي عملگرهاي شرطي يك مقدار منطقياست

ورودي عملگرهاي منطقي ، عبارات منطقيهستند

خروجي عملگرهاي منطقي يك مقدار منطقياست

Page 12: دستورات كنترلي

12

با استفاده از عملگرهاي منطقي ميتوان عباراتشرطي مورد نظر را توليد نمود.

،مثال: عبارت شرطيx بزرگتر از y و y مخالف عدد مثبت باشد به شكل زير نوشته xصفر و ميشود

)x < y( && )y != 0( && )x < 0(

Page 13: دستورات كنترلي

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)(;

}

Page 14: دستورات كنترلي

14

عبارت شرطي

در ساختارهای انتخاب، عبارت شرطي یک درست دارد که (Boolean) مقدار منطقي

استغلطیا درC++:

برابر غلط است0مقدار هر مقدار دیگری برابر درست است

Page 15: دستورات كنترلي

15

درصورتي كه بدنه دستورif تنها يك دستور داشته باشد ميتوان آكوالدها را ننوشت

:مثالif (3<4) printf( "I am true!\n");

Page 16: دستورات كنترلي

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)(;

}

Page 17: دستورات كنترلي

17

اشتباهات معمول

اغلب عملگر انتساب )=( با عملگر تساوی)==( اشتباه گرفته میشود.

:در عبارت زیر چه ایرادی وجود دارد

if )grade=100(printf) "your grade is perfect!\n" (;

Page 18: دستورات كنترلي

18

if-elseساختار كنترلي در دستورif اگر شرط درست باشد، يك دستور يا مجموعه اي از

دستورات اجرا ميشود.ساختار کنترلیif else اجازه می دهد که در صورت صدق نکردن

یا غلط بودن شرط، عمل دیگری انجام گردد.if (<عبارت شرطي>){

< ifبدنه >}else{

< elseبدنه >}

Page 19: دستورات كنترلي

19

دستورهاي قبلي

شرط؟ 1عمل

دستوربعدي

truefalse2عمل

Page 20: دستورات كنترلي

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)(;

}

Page 21: دستورات كنترلي

21

هاي متواليif-elseدستورات

تا كنون با استفاده از دستورif-else ساختاري پياده سازي شد كه درصورت صحت شرط يك سري

دستورات و درصورت عدم صحت شرط مجموعه اي ديگر از دستورات انجام ميشدند

در بسياري از كاربردها الزم است كه شرايطمختلفي بررسي شوند و با توجه به صحت هر يك از

شرطها عمليات مناسب انجام پذيرد همچنين اينكه درصورت صحت يك شرط ديگر الزم

نيست شرطهاي ديگر بررسي شوند

Page 22: دستورات كنترلي

22

هاي متواليif-elseدستورات

بدين ترتيب ميتوان از ساختارif-else متوالي >) ifاستفاده نمود 1عبارت شرطي >)

{1بدنه شرط > >

}else if (< عبارت

2شرطي >){

2بدنه شرط > >}…else{

< elseبدنه >}

Page 23: دستورات كنترلي

23

دستورهاي قبلي

؟1شرط 1عمل

دستوربعدي

true

false

؟2شرط 2عمل true

false

elseبدنه

...

Page 24: دستورات كنترلي

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)(;

}

Page 25: دستورات كنترلي

25

ifتمرين مربوط به كاربرد

زمان تحويل: جلسه آينده

Page 26: دستورات كنترلي

26

تمرين الف

برنامه حل معادله درجه دو را به شكل زيراصًالح نماييد:

درصورتي كه دلتا منفي بود پيغام مناسب دادهشود.

درصورتي كه دلتا برابر با صفر بود وجود ريشهمضاعف و مقدار آن گزارش شود

درغير اينصورت ريشه هاي معادله محاسبهشده و نمايش داده شوند

Page 27: دستورات كنترلي

27

تمرين ب

برنامه اي بنويسيد كه ساعات كاركرد كارمند و تعدادفرزندان وي را گرفته و حقوق آنرا محاسبه نمايد

* 2500حقوق خالص = ساعات كاركرد تومان 1500به ازاي هر فرزند و حداكثر تا سه فرزند، مبلغ

به حقوق اضافه ميشود ساعت كمتر باشد به ازاي 100اگر ساعات كاركرد از

تومان 500 براي هر ساعت مبلغ 100ساعات باقيمانده تا از حقوق كسر ميشود

حقوق بعنوان ماليات و بيمه از حقوق كسر 5مبلغ %ميشود.

Page 28: دستورات كنترلي

28

switch-caseساختار انتخاب

از اين ساختار براي تصميم گيري هاي چندگانه، استفاده يك عبارتبراساس مقادير مختلف

ميشود. بطور كلي در تمامي تصميم گيري هايي كه بيش از

سه انتخاب وجود داشته باشد، بهتر است از استفاده شود.switchساختار

ساختار انتخابswitch-case مشابه if-else هاي متوالي ميباشد ولي كد برنامه را خواناتر ميكند.

Page 29: دستورات كنترلي

29

-switchنحوه استفاده از ساختار case

switch (<عبارت>){

case < مقدار ثابت1>:

< 1دستورات >break;

case < مقدار ثابت2>:

< 2دستورات >break;

default:< n دستورات

>

}

مقادير نوشته شده در مقابل ثابت بايد caseعبارت باشند.

انتهاي دستورات مربوط به با كلمه كليدي caseهر

breakمشخص ميشود در صورتي كه حاصل ارزيابي

عبارت در هيچ يك از حاالت درنظر گرفته شده، موجود

نباشد عبارت مربوط به اجرا ميگردد.defaultبخش

Page 30: دستورات كنترلي

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>}

Page 31: دستورات كنترلي

31

switchنكات استفاده از ساختار ساختارswitch ميتواند فاقد بخش defaultباشد مقادير موجود درcase هاي switch نميتوانند با

هم مساوي باشند. توجه داشته باشيد كه ثوابت كاراكتري هنگام

كامپايل به كد اسكي تبديل ميشوند اگر در انتهاي دستورات مربوط به يكcase ،

فراموش شود، دستورات مربوط breakدستور بعدي نيز اجرا ميشوند.caseبه

Page 32: دستورات كنترلي

32

و ساختار if-elseتفاوتهاي switch

در ساختارif چند عبارت با هم مقايسه ميشوند و شرطي دوم if اول نوشته ميشود محدوديتي در نوشتن ifكه در

حاصل يك عبارت مورد switchايجاد نميكند ولي در ارزيابي قرار ميگيرد

مقادير مقايسه شونده در ساختارif-else ميتوانند متغير مقادير انتخاب بايد ثابتهايي swithباشند ولي در ساختار

قرار ميگيرندcaseباشند كه مقابل دستور در ساختارif-else ميتوان عبارت منطقي يا رابطه اي را

فقط switchمورد بررسي قرار داد ولي در ساختار بودن“ مورد بررسي قرار ميگيرد.”مساوي

Page 33: دستورات كنترلي

33

مثال:

برنامه اي بنويسيد كه دو عملوند و يك عملگر راخوانده و با توجه به عملگر نتيجه را در خروجي

نمايش دهد

Page 34: دستورات كنترلي

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