مبحث چهارم: ساختارهای کنترلی

Post on 10-Jan-2016

48 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

حسابگری الگوریتمی. مبحث چهارم: ساختارهای کنترلی. فهرست مطالب. تعاریف مقدماتی ساختار تکرار: دستور for ساختار تکرار: دستور while ساختار تکرار: دستور do … while ساختار تصمیم: دستور if ساختار تصمیم: دستور else if انتقال کنترل غیر شرطی ساختار تصمیم: دستور switch. مقدمه. - PowerPoint PPT Presentation

TRANSCRIPT

مهدی آذرنوش

http://azarnoosh.mshdiau.ac.ir

مبحث چهارم: ساختارهای کنترلی

یموریت

گی ال

رگساب

ح

2

ساختارهای کنترل

یLecture_4

فهرست مطالب

تعاریف مقدماتی • forساختار تکرار: دستور •whileساختار تکرار: دستور •do … whileساختار تکرار: دستور •ifساختار تصمیم: دستور •else ifساختار تصمیم: دستور •انتقال کنترل غیر شرطی •switchساختار تصمیم: دستور •

3

تعاریف مقدماتی

Lecture_4

مقدمه

در حالت عادی:•اجرای دستورات از اولين دستور تا رسیدن به –

آخرين دستور

شرايط خاص:•بخواهيم بعضي از دستورات چندين بار اجرا شوند.–برخي از دستورات تحت شرايط خاص اجرا شوند –

يا اجرا نشوند.

راه حل:•

استفاده از ساختار هاي کنترلي

4

تعاریف مقدماتی

Lecture_4

انواع ساختارهاي کنترلي)براي تکرار اجراي دستورات( ساختارهاي تکرار•

forاستفاده از دستور –whileاستفاده از دستور –do … whileاستفاده از دستور –

)براي بررسي شرايطي در برنامه و تصميم ساختارهاي تصميم•گيري بر اساس آن شرايط(

ifاستفاده از دستور –else ifاستفاده از دستور –switchاستفاده از دستور –

)انتقال اجراي برنامه بدون کنترل انتقال کنترل غير شرطي •شرط(

breakاستفاده از دستور –continueاستفاده از دستور –gotoاستفاده از دستور –

5

ساختارت کرار: دستور for Lecture_4

forشرایط دستور F استفاده در حالتي که تعداد دفعات تکرار مشخص • معموًال

است.متغير کنترل تعداد دفعات تکرار حلقه

داراي يک مقدار اوليه است و افزايش مقدار آن در هر انديس تکرار بار اجراي دستورات

نوع آن: عدد منفي، مثبت، صحيح، اعشاري، کاراکتري )شمارنده(

مقداري که پس از هر بار اجراي حلقه به شمارنده اضافه مي شود.

گام حرکتنوع آن: عدد منفي، مثبت، صحيح، اعشاري، کاراکتري

تعيين زمان حدود اجراي دستورات حلقه

اجراي دستورات ارزش درستي شرط حلقه شرط حلقهداخل حلقه

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

6

ساختارت کرار: دستور for Lecture_4

forساختار دستور for (مقدار اوليه انديس حلقه; شرط حلقه; گام حرکت)

;دستور

for (مقدار اوليه انديس حلقه; شرط حلقه; گام حرکت) {1دستور ;2دستور ;

...nدستور ;

}

for (;;);دستور

ايجاد حلقه بي نهايت

خروج: Ctrl+Break

7

ساختارت کرار: دستور for Lecture_4

forمثال استفاده از دستور Example 4-1:

int i;for (i=0 ; i < 10 ; i++)

cout << i << “ ”;

0 1 2 3 4 5 6 7 8 9

Example 4-2:

char i;for (i=‘a’ ; i != ‘k’ ; i++)

cout << i << “ ”;

a b c d e f g h i j

: چاپ ارقام در سیستم 1-4مثال دهدهی

1 -0i 4 تا 3 دستورات i<10- تا زمانیکه 2

را تکرار کن.3 -i.را چاپ کن 4 -i+1 i- پایان حلقه5k تا a: چاپ حروف 2-4مثال - پایان6

1 -ai 4 تا 3 دستورات i!=k- تا زمانیکه 2

را تکرار کن.3 -i.را چاپ کن 4 -i+1 i- پایان حلقه5- پایان6

8

ساختارت کرار: دستور for Lecture_4

for - 2مثال استفاده از دستور عدد صحيح که از 5: محاسبه و نمایش ميانگين 3-4مثال •

ورودي خوانده شده است.Example 4-3:

#include <iostream.h>#include <conio.h>int main() { int i, sum=0, num ; float ave ; const int n = 5; clrscr(); for (i = 0 ; i < n; i++) { cout << "Enter number" << i+1 << ": "; cin >> num; sum +=num; } // end of for ave = (float) sum / n ; cout << "The average is: " << ave; getch(); return 0;}

Enter number 1: 12Enter number 2: 13Enter number 3: 15Enter number 4: 16Enter number 5: 18The average is: 13.8

1 -0i 0 وsum 6 تا 3 دستورات i<5- تا زمانیکه 2

را تکرار کن. را وارد i+1- چاپ کن ”عدد 3

کن.“4 -num.را بخوان 5 -sum+num sum6 -i+1 i- پایان حلقه78 -sum/5 ave9 -ave.را چاپ کن

- پایان10

9

ساختارت کرار: دستور for Lecture_4

for - 3مثال استفاده از دستور به همراه کد اسکي آنهاf تا a: نمايش کاراکتر های 4-4مثال •

Example 4-4:#include <iostream.h>#include <conio.h>int main() { char ch; int code; clrscr(); for(ch = 'a'; ch <= 'f'; ch ++) {

code=ch;cout << "ch= " << ch ;cout << " code= " << code

<< endl; } getch(); return 0;}

ch= a code= 97ch= b code= 98ch= c code= 99ch= d code= 100ch= e code= 101ch= f code= 102

1 -ach 5 تا 3 دستورات ch<=f- تا زمانیکه 2

را تکرار کن.3 -ch code4 -ch و codeرا چاپ کن 5 -ch+1 ch- پایان حلقه6- پایان7

10

ساختارت کرار: دستور for Lecture_4

for - 4مثال استفاده از دستور : شمارش کاراکترهاي يک جمله که به نقطه ختم مي 5-4مثال •

شود.

Example 4-5:#include <iostream.h>#include <conio.h>int main() { int count; clrscr(); cout << “Enter a statement with (.) Enter in end:” << endl; for (count = 0; cin.get() != '.'; count ++); cout << “Length of statement is: ” << count; getch(); return 0;}Enter a statement with (.) Enter in end:I like C++ very much.Length of statement is: 20

- چاپ کن ”یک جمله با نقطه در پایان وارد 1کنید.“

2 -0 count- تا زمانیکه کاراکتر ورودی مخالف نقطه است 3

را تکرار کن.4دستورات 4 -count+1 count- پایان حلقه56 -count.را چاپ کن - پایان7

11

ساختارت کرار: دستور for Lecture_4

forحلقه هاي تکرار تودرتو با بازاي هر بار اجراي حلقه تکرار خارجي، حلقه تکرار داخلي •

کامل انجام مي شود.انتهای حلقه تکرار داخلي، زودتر از حلقه تکرار خارجی •

مشخص مي شود.اگر حلقه هاي تکرار تو در تو از يکجا شروع و به يکجا ختم •

} for (i=0; i<5; i++)شوند حلقه خارجي نياز به آکوًالد ندارد.…for (j=0; j<6; j++) {

…}…

}

for (i=0; i<5; i++)for (j=0; j<6; j++) {

…}

12

ساختارت کرار: دستور for Lecture_4

مثال حلقه هاي تکرار تودرتو با forدستور

10 تا 1 چاپ جدول ضرب اعداد :6-4مثال •

Example 4-6:#include <iostream.h>#include <conio.h>int main() { int i,j; clrscr(); for (i=1; i<=10; i++) { for (j=1; j<=10; j++) cout << i*j << “\t”; cout << endl; } getch(); return 0;}

1 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18 203 6 9 12 15 18 21 24 27 30

1 -1i تا 3 دستورات i<=10- تا زمانیکه 2

را تکرار کن.103-1j

6 تا 5دستورات j<=10زمانیکه - تا4را تکرار کن.

را چاپ کن.i*j- مقدار 56 -j+1 jj<=10- پایان حلقه 7- برای چاپ به سطر بعد برو.89 -i+1 i

i<=10-پایان حلقه 10- پایان11

13

ساختارت کرار: دستور for Lecture_4

forعملگر کاما و حلقه

در قسمت مقدار اوليه حلقه و گام حرکت دو •يا چند عبارت را با هم ترکيب کرد.

for (i=0, m+=i; i<10; i++, m++) {…

}

14

ساختارت کرار: دستور for Lecture_4

forمثال عملگر کاما و حلقه 2n / 1 جمله اول از سري 6: محاسبة مجموع 7-4مثال •

Example 4-7:#include <iostream.h>#include <conio.h>#define NUM 6int main() { int count; float sum, x; clrscr(); for (sum=0, x=1.0, count=1; count <= NUM; count++, x*=2) { sum+=1/x; cout << “sum= ” << sum << “ when count= ” << count << endl; } getch(); return 0;}sum= 1 when count=1sum= 1.5 when count= 2sum= 1.75 when count= 3

1 -0sum 1 و x 1 و count 6 وNUM را 6 تا 3 دستورات count<=NUM- تا زمانیکه 2

تکرار کن.3 -sum+1/xsum4 -sum.را چاپ کن 5 -x*2 x6 -count+1count-پایان حلقه7- پایان8

15

ساختارت کرار: دستور while

Lecture_4

whileساختار دستور

تست شرط حلقه با رسيدن برنامه به اين دستور•اجراي دستورات حلقه در صورت شرط حلقه–شرط حلقه بايد در دستورات داخل حلقه نقض شود.–

while (شرط);دستور

while (شرط) {1دستور ;2دستور ;

...nدستور ;

}

ايجاد حلقه بي نهايت در صورت عدم نقض شرط

16

ساختارت کرار: دستور while

Lecture_4

whileمثال دستور : شمارش کاراکترهاي يک جمله که انتهاي آن با 8-4مثال •

Enterمشخص شده

Example 4-8:#include <iostream.h>#include <conio.h>int main() { int count=0; clrscr(); cout << “Type a statement and Enter to end:”; while(cin.get() != ‘\n’)

count++; cout << “Length of statement is: ” << count; getch(); return 0;}

Type a statement and Enter to end: I learn C++ language.

Length of statement is: 21

در پایان Enter- چاپ کن ”یک جمله با فشردن 1وارد کنید.“

2 -0 count است Enter- تا زمانیکه کاراکتر ورودی مخالف 3

را اجرا کن.4دستور 4 -count+1 count- پایان حلقه56 -count.را چاپ کن - پایان7

17

ساختارت کرار: دستور while

Lecture_4

while - 2مثال دستور : نمايش مجموع مربعات تعدادي عدد که از ورودي 9-4مثال •

:Example 4-9دريافت شده است#include <iostream.h>#include <conio.h>int main() { int x, sum=0, n=0; char ans= ‘y’; clrscr(); while(ans==‘y’) {

cout << “Enter a number: ”;cin >> x;sum +=x*x;n++;cout << “Do you want to continue?

(y/n): ”;cin >> ans;

} //end of while cout << “You entered ” << n << “numbers.” << endl; cout << “Sum of square is:” << sum; getch(); return 0;}

Enter a number: 10Do you want to continue?

(y/n): yEnter a number: 15Do you want to continue?

(y/n): nYou entered 2 numbers.Sum of square is: 325

1 -0 sum 0 و n و y ans تا 3 است دستورات ans=y- تا زمانیکه 2 را اجرا کن.8- عبارت ”یک عدد وارد کنید“ را چاپ 3

كن4 -x.را بخوان 5 -sum+x*xsum6 -n+1 n- عبارت ”آیا می خواهید ادامه دهید؟“ 7

را چاپ كن8 -ans.را بخوان - پایان حلقه9

10 -sum و n.را چاپ کن - پایان11

18

ساختارت کرار: دستور do ... while

Lecture_4

do … whileساختار دستور

است با اين تفاوت که شرط حلقه در whileشبيه ساختار •انتهاي حلقه تست مي شود.

دستورات در اين حلقه حداقل يکبار اجرا مي شود.•

do;دستور

while (شرط);

do {1دستور ;2دستور ;

...nدستور ;} while (شرط) ;

19

ساختارت کرار: دستور do ... while

Lecture_4

do … while مثال دستور: نمايش وارون عددي که از ورودي خوانده شده 10-4مثال •

است.Example 4-10:#include <iostream.h>#include <conio.h>int main() { int num, digit; clrscr(); while(1) {

cout << “\nEnter a number: ”;

cin >> num;cout << “Inverse= ”;do {digit= num%10;cout << digit;num /= 10;} while(num != 0);

} //end of while(1)return 0;}

Enter a number: 1652Inverse= 2561Enter a number:

1 -num.را از ورودی بخوان 2 -num-(num/10*10) digit3 -digit.را چاپ کن 4 -num/10 num 2 است به دستور num!=0- تا زمانیکه 5

برو.- پایان6

20

ساختارت صمیم: دستور if

Lecture_4

ifساختار دستور

if (شرط);دستور

else;دستور

if (شرط) {1دستور ;2دستور ;

...nدستور ;}

else {1دستور ;2دستور ;

...nدستور ;}

21

ساختارت صمیم: دستور if

Lecture_4

if مثال دستور: شمارش تعداد کلمات و کاراکترهاي يک جمله 11-3مثال •

Example 3-11:#include <iostream.h>#include <conio.h>int main() { int charcount=0, wordcount=0; char ch; clrscr(); cout << “\nEnter a statement(and press Enter):\n”; while ((ch= getche()) != ‘\r’) {

charcount++;if (ch==‘ ’)

wordcount++; } // end of while cout << “\nChar count=” << charcount; cout << “\nWord count=” << wordcount+1;getch();return 0;}

Enter a statement (and press Enter):

This book is my favorite.Char count= 26Word count= 5

)(getcheشبيه

تفاوت: نمايش کاراکتر در صفحه نمايش

- چاپ کن ”یک جمله وارد کنید 1و در پایان

Enter“.بزنید - تا زمانیکه کاراکتر ورودی 2

Enterمخالف را اجرا 4 تا 3 است دستورات

کن. 3 -charcount+1 charcount- اگر کاراکتر ورودی فاصله 4

است آنگاه wordcount+1 wordcount

- پایان حلقه56 -charcount و wordcount را

چاپ کن.- پایان7

22

ساختارت صمیم: دستور if

Lecture_4

if - 2 مثال دستور: نمايش کاراکترهاي مربوط به هر 12-3مثال •

کد اسکيExample 3-12:#include <iostream.h>#include <conio.h>int main() { int i; char ch; clrscr(); for (i=36; i<=125; i++) {

ch=i;cout << i<<“= ”<< ch

<< “\t ”;if (i%5==0)

cout << “\n”; } //end of for getch(); return 0;}

36= $ 37= % 38= & 39= ‘ 40= (

41= ) 42= * 43= + 44= ’ 45= -

46= . 47= / 48= 0 49= 1 50= 2

……

96= ‘ 97= a 98= b 99= c 100= d

……

121= y 122= z 123= { 124=| 125= }

1-36i 5 تا 3 است دستورات i<=125- تا وقتیکه 2

را تکرار کن. را چاپ کن.i و کاراکتر i- مقدار 3 آنگاه برای چاپ به خط i-i/5*5==0- اگر 4

بعد برو.- پایان حلقه5- پایان6

23

ساختارت صمیم: دستور if

Lecture_4

if - 3 مثال دستور: توليد یک عدد تصادفی و حدس آن توسط کاربر13-4مثال •

Example 4-13:#include <iostream.h>#include <stdlib.h>#include <conio.h>void main() { int magic, guess, count=1; char ans='y'; randomize(); magic=rand(); do { cout << "\n\nGuess the magic number: "; cin >> guess; if (guess==magic) { cout << "\n right :) :) :)\n You guess it in " << count << " turn(s)"; ans='n'; } // exit from while loop else { cout << "\n wrong :( :( :("; if (guess>magic)

cout <<"\n Your guess is high.\n"; else

cout <<"\n Your guess is low.\n"; count++; cout <<" Do you want to continue? (y/n)"; cin >> ans; if (ans=='n')

cout << "\n The magic number is: " << magic; } // end of else } while (ans!= 'n'); }

Guess the magic number: 100

wrong :( :( :( Your guess is low. Do you want to continue?

(y/n): n

The magic number is: 24891

توليد عدد تصادفي: rand)(

:headerفايل stdlib

24

ساختارت صمیم: دستور else if

Lecture_4

else ifساختار دستور

براي تست شرطهاي متعددifاستفاده از • به صورت تو در توifاستفاده از –

طوًالني شدن برنامه•کاهش خوانايي برنامه•

else ifراه حل: استفاده از ساختار •

25

ساختارت صمیم: دستور else if

Lecture_4

else ifمثال دستور : چاپ معادل حرفي نمرة دانشجو14-4مثال •

Example 4-14:#include <iostream.h>int main() { int score; cout << “\nEnter a score: ”; cin >> score; while (score) { if (score >=17 && score <=20)

cout << “score = ”<< score << “ grade= ” <<‘A’; else if (score >=15 && score <17)

cout << “score = ”<< score << “ grade= ” <<‘B’; else if (score >=12 && score <15)

cout << “score = ”<< score << “ grade= ” <<‘C’; else

cout << “score = ”<< score << “ grade= ” <<‘D’; cout << “\n\nEnter a score : ”; cin >> score; } //end of while return 0; }

Enter a score: 19score= 19

grade= A

Enter a score: 14score= 14

grade= C

Enter a score: 0

scoreاگر مقدار صفر شود

از حلقه خارج مي شود.

1-score.را بخوان را 5 تا 3 است دستورات score!=0- تا وقتیکه 2

تکرار کن.A آنگاه چاپ کن درجة score<=20>=17- اگر 3

آنگاه score<17>=15 در غیر این صورت اگر Bچاپ کن درجة

آنگاه score<15>=12 در غیر این صورت اگر Cچاپ کن درجة

D در غیر این صورت چاپ کن درجة - چاپ کن ”یک نمره وارد کنید“45 -score.را بخوان - پایان حلقه6- پایان7

26

انتقال کنترل غير شرطي

Lecture_4

breakدستور خروج از حلقه های تکرار•: تعيين تعداد اعداد زوج و فرد در اطالعات 15-4مثال •

ورودي Example 4-15:#include <iostream.h>int main() { int num, count=0, n=0; while(1) { cout << “\nEnter a number: ”; cin >> num; if (num==0)

break; n++; if (num%2==0)

count++; } cout << “\nevens=” << count << “\todds= ” << (n-count); return 0;}

1-0 count 0 و n را تکرار کن.7 تا 3- دستورات 2- چاپ کن ”يک عدد وارد کنید.“34 -num.را بخوان آنگاه از حلقه num==0- اگر 5

خارج شو.6 -n+1 n باشد num-(num/2*2)==0- اگر 7

count+1count آنگاه - پایان حلقه89 -count و n-countرا چاپ کن

- پایان10

27

انتقال کنترل غير شرطي

Lecture_4

continueدستور انتقال کنترل به محل کنترل شرط حلقه•: نمايش کاراکتر ورودي به همراه کاراکتر بعدي 16-4مثال •

در خروجيExample 4-16:#include <iostream.h>int main() { int done=1; char ch; while(done) { cout << “\n\nEnter a character: ”; cin >> ch; if (ch==‘&’) {

done=0;continue;

} // end of if cout << “You typed char ” << ch; cout << “, next char is: “ << ++ch; } // end of while return 0;}

Enter a character: sYou typed char s , next

char is: t

Enter a character: &

1-1 done 6 تا 3 دستورات done!=0- تا وقتیکه 2

را تکرار کن.- چاپ کن ”يک کاراکتر وارد کنید.“34 -ch.را بخوان ==‘&’ آنگاهch- اگر 5

0doneبه محل کنترل شرط برو.

6 -ch و ch+1.را چاپ کن - پایان حلقه7- پایان8

28

انتقال کنترل غير شرطي

Lecture_4

gotoدستور

انتقال کنترل از نقطه اي به نقطة ديگر•فرمت استفاده:•

• goto <برچسب>نامگذاري برچسب همانند متغيرها •انتهاي برچسب عالمت کولن ):(•مثال:•

• L1:• loop:

29

ساختارت صميم: دستور switch

Lecture_4

switchساختار دستور تصميم گيريهاي چندگانه•بر اساس مقادير مختلف• انتخاب3براي تصميم گيري در بيش از •

باشد.defaultمي تواند فاقد بخش – ها نبايد يکسان باشند.caseمقادير مربوط به –تبديل ثوابت کاراکتري به عدد صحيح– ها case شدن break: orعدم استفاده از – caseفقط بررسي مساوي بودن در عبارات – مي تواند تو در تو باشد.switchچند ساختار –

switch (عبارت) {case < 1مقدار >:

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

case < 2مقدار >:< 2دستورات >break;

………default:

<دستورات>}

30

ساختارت صميم: دستور switch

Lecture_4

switchمثال دستور Example 4-17:#include <iostream.h>#include <conio.h>int main() { int num1, num2, flag=1; char op; while(flag) { cout << “\n\nEnter num1, operator, num2:”; cin >> num1 >> op >> num2; switch(op) {

case ‘+’: cout << “\n sum= ” << (num1+num2); break;case ‘-’: cout << “\n minus= ” << (num1-num2); break;case ‘/’:case ‘\\’: cout << “\n division= ” << (float)num1/num2; break;case ‘*’: cout << “\n multiply= ” << (num1*num2); break;default: cout << “\nOperator is illegal. Press a key to end.”; flag=0;

} // end of switch getch(); } // end of while return 0; }

Enter num1, operator, num2: 40 + 14

sum= 54

Enter num1, operator, num2: 34 * 5

multiply= 170

Enter num1, operator, num2: 6 s 24

Operator is illegal. Press a key to end.

top related