30
وش ن ر ذ هدی آ مhttp://azarnoosh.mshdiau.ac.ir هارم: چ ث ح ب م ی ل ر ت ن ک ارهای ت خ سا س خ ر گ ب ا ی گ* ل آ ت*. ی ور ی م

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

  • Upload
    quilla

  • View
    48

  • Download
    6

Embed Size (px)

DESCRIPTION

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

Citation preview

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

مهدی آذرنوش

http://azarnoosh.mshdiau.ac.ir

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

یموریت

گی ال

رگساب

ح

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

2

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

یLecture_4

فهرست مطالب

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

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

3

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

Lecture_4

مقدمه

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

آخرين دستور

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

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

راه حل:•

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

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

4

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

Lecture_4

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

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

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

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

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

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

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

5

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

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

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

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

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

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

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

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

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

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

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

6

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

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

;دستور

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

...nدستور ;

}

for (;;);دستور

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

خروج: Ctrl+Break

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

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

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

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

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

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

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

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

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

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++) {

…}

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

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

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

13

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

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

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

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

}

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

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

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

15

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

Lecture_4

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

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

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

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

...nدستور ;

}

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

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

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

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

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

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

18

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

Lecture_4

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

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

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

do;دستور

while (شرط);

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

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

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

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

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

20

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

Lecture_4

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

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

else;دستور

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

...nدستور ;}

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

...nدستور ;}

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

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

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

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

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

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

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

24

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

Lecture_4

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

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

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

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

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

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

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

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

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

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

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

28

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

Lecture_4

gotoدستور

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

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

• L1:• loop:

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

29

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

Lecture_4

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

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

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

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

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

………default:

<دستورات>}

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

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.