مبحث چهارم: ساختارهای کنترلی
description
Transcript of مبحث چهارم: ساختارهای کنترلی
مهدی آذرنوش
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.