1 / 30

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

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

quilla
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. تعاریف مقدماتی مقدمه • در حالت عادی: • اجرای دستورات از اولين دستور تا رسیدن به آخرين دستور • شرايط خاص: • بخواهيم بعضي از دستورات چندين بار اجرا شوند. • برخي از دستورات تحت شرايط خاص اجرا شوند يا اجرا نشوند. • راه حل: استفاده از ساختار هاي کنترلي

  4. تعاریف مقدماتی انواع ساختارهاي کنترلي • ساختارهاي تکرار(براي تکرار اجراي دستورات) • استفاده از دستور for • استفاده از دستور while • استفاده از دستور do … while • ساختارهاي تصميم(براي بررسي شرايطي در برنامه و تصميم گيري بر اساس آن شرايط) • استفاده از دستور if • استفاده از دستور else if • استفاده از دستور switch • انتقال کنترل غير شرطي (انتقال اجراي برنامه بدون کنترل شرط) • استفاده از دستور break • استفاده از دستور continue • استفاده از دستور goto

  5. ساختار تکرار: دستور for شرایط دستور for • معمولاً استفاده در حالتي که تعداد دفعات تکرار مشخص است. متغير کنترل تعداد دفعات تکرار حلقه انديس تکرار داراي يک مقدار اوليه است و افزايش مقدار آن در هر بار اجراي دستورات (شمارنده) نوع آن: عدد منفي، مثبت، صحيح، اعشاري، کاراکتري مقداري که پس از هر بار اجراي حلقه به شمارنده اضافه مي شود. گام حرکت نوع آن: عدد منفي، مثبت، صحيح، اعشاري، کاراکتري تعيين زمان حدود اجراي دستورات حلقه شرط حلقه ارزش درستي شرط حلقه اجراي دستورات داخل حلقه ارزش نادرست شرط حلقه خروج کنترل برنامه از حلقه

  6. ساختار تکرار: دستور for ساختار دستور for for (مقدار اوليه انديس حلقه; شرط حلقه; گام حرکت) دستور; for (مقدار اوليه انديس حلقه; شرط حلقه; گام حرکت) { دستور 1; دستور 2; ... nدستور ; } ايجاد حلقه بي نهايت خروج: Ctrl+Break for (;;) دستور;

  7. ساختار تکرار: دستور for مثال استفاده از دستور for Example 4-1: int i; for (i=0 ; i < 10 ; i++) cout << i << “ ”; مثال 4-1: چاپ ارقام در سیستم دهدهی 1- 0i 2- تا زمانیکه i<10 دستورات 3 تا 4 را تکرار کن. 3- i را چاپ کن. 4- i+1i 5- پایان حلقه 6- پایان 0 1 2 3 4 5 6 7 8 9 مثال 4-2: چاپ حروف a تا k 1- ai 2- تا زمانیکه i!=k دستورات 3 تا 4 را تکرار کن. 3- i را چاپ کن. 4- i+1i 5- پایان حلقه 6- پایان Example 4-2: char i; for (i=‘a’ ; i != ‘k’ ; i++) cout << i << “ ”; a b c d e f g h i j

  8. ساختار تکرار: دستور for مثال استفاده از دستور for - 2 • مثال 4-3: محاسبه و نمایش ميانگين 5 عدد صحيح که از ورودي خوانده شده است. 1- 0i و 0sum 2- تا زمانیکه i<5 دستورات 3 تا 6 را تکرار کن. 3- چاپ کن ”عدد i+1 را وارد کن.“ 4- num را بخوان. 5- sum+numsum 6- i+1i 7- پایان حلقه 8- sum/5ave 9- ave را چاپ کن. 10- پایان 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: 12 Enter number 2: 13 Enter number 3: 15 Enter number 4: 16 Enter number 5: 18 The average is: 13.8

  9. ساختار تکرار: دستور for مثال استفاده از دستور for - 3 • مثال 4-4: نمايش کاراکتر های a تا f به همراه کد اسکي آنها 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; } 1- ach 2- تا زمانیکه ch<=f دستورات 3 تا 5 را تکرار کن. 3- chcode 4- ch و code را چاپ کن 5- ch+1ch 6- پایان حلقه 7- پایان ch= a code= 97 ch= b code= 98 ch= c code= 99 ch= d code= 100 ch= e code= 101 ch= f code= 102

  10. ساختار تکرار: دستور for مثال استفاده از دستور for - 4 • مثال 4-5: شمارش کاراکترهاي يک جمله که به نقطه ختم مي شود. 1- چاپ کن ”یک جمله با نقطه در پایان وارد کنید.“ 2- 0count 3- تا زمانیکه کاراکتر ورودی مخالف نقطه است دستورات 4 را تکرار کن. 4- count+1count 5- پایان حلقه 6- count را چاپ کن. 7- پایان 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

  11. ساختار تکرار: دستور for حلقه هاي تکرار تودرتو با 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 مثال حلقه هاي تکرار تودرتو با دستور for • مثال 4-6: چاپ جدول ضرب اعداد 1 تا 10 1- 1 i 2- تا زمانیکه i<=10 دستورات 3 تا 10 را تکرار کن. 3-1 j 4- تازمانیکه j<=10دستورات 5 تا 6 را تکرار کن. 5- مقدار i*j را چاپ کن. 6- j+1j 7- پایان حلقه j<=10 8- برای چاپ به سطر بعد برو. 9- i+1i 10-پایان حلقه i<=10 11- پایان 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 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30

  13. ساختار تکرار: دستور for عملگر کاما و حلقه for • در قسمت مقدار اوليه حلقه و گام حرکت دو يا چند عبارت را با هم ترکيب کرد. for (i=0, m+=i; i<10; i++, m++) { … }

  14. ساختار تکرار: دستور for مثال عملگر کاما و حلقه for • مثال 4-7: محاسبة مجموع 6 جمله اول از سري 1 / 2n 1- 0 sum و 1x و 1count و 6NUM 2- تا زمانیکه count<=NUM دستورات 3 تا 6 را تکرار کن. 3- sum+1/xsum 4- sum را چاپ کن. 5- x*2x 6- count+1 count 7-پایان حلقه 8- پایان Example 4-7: #include <iostream.h> #include <conio.h> #define NUM 6 int 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=1 sum= 1.5 when count= 2 sum= 1.75 when count= 3

  15. ساختار تکرار: دستور while ساختار دستور while • تست شرط حلقه با رسيدن برنامه به اين دستور • اجراي دستورات حلقه در صورت شرط حلقه • شرط حلقه بايد در دستورات داخل حلقه نقض شود. while (شرط) دستور; while (شرط) { دستور 1; دستور 2; ... nدستور ; } ايجاد حلقه بي نهايت در صورت عدم نقض شرط

  16. ساختار تکرار: دستور while مثال دستور while • مثال 4-8: شمارش کاراکترهاي يک جمله که انتهاي آن با Enter مشخص شده 1- چاپ کن ”یک جمله با فشردن Enter در پایان وارد کنید.“ 2- 0count 3- تا زمانیکه کاراکتر ورودی مخالف Enter است دستور 4 را اجرا کن. 4- count+1count 5- پایان حلقه 6- count را چاپ کن. 7- پایان 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

  17. ساختار تکرار: دستور while مثال دستور while - 2 • مثال 4-9: نمايش مجموع مربعات تعدادي عدد که از ورودي دريافت شده است 1- 0sum و 0n و yans 2- تا زمانیکه ans=y است دستورات 3 تا 8 را اجرا کن. 3- عبارت ”یک عدد وارد کنید“ را چاپ كن 4- x را بخوان. 5- sum+x*xsum 6- n+1n 7- عبارت ”آیا می خواهید ادامه دهید؟“ را چاپ كن 8- ans را بخوان. 9- پایان حلقه 10- sum و n را چاپ کن. 11- پایان 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: 10 Do you want to continue? (y/n): y Enter a number: 15 Do you want to continue? (y/n): n You entered 2 numbers. Sum of square is: 325

  18. ساختار تکرار: دستور do ... while ساختار دستور do … while • شبيه ساختار while است با اين تفاوت که شرط حلقه در انتهاي حلقه تست مي شود. • دستورات در اين حلقه حداقل يکبار اجرا مي شود. • do • دستور; • while (شرط); do { دستور 1; دستور 2; ... nدستور ; } while (شرط) ;

  19. ساختار تکرار: دستور do ... while مثال دستورdo … while • مثال 4-10: نمايش وارون عددي که از ورودي خوانده شده است. 1- num را از ورودی بخوان. 2- num-(num/10*10)digit 3- digit را چاپ کن. 4- num/10num 5- تا زمانیکه num!=0 است به دستور 2 برو. 6- پایان 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: 1652 Inverse= 2561 Enter a number:

  20. ساختار تصمیم: دستور if ساختار دستور if if (شرط) دستور; else دستور; if (شرط) { دستور 1; دستور 2; ... nدستور ;} else { دستور 1; دستور 2; ... nدستور ;}

  21. ساختار تصمیم: دستور if مثال دستورif • مثال 3-11: شمارش تعداد کلمات و کاراکترهاي يک جمله 1- چاپ کن ”یک جمله وارد کنید و در پایان Enter بزنید.“ 2- تا زمانیکه کاراکتر ورودی مخالف Enter است دستورات 3 تا 4 را اجرا کن. 3- charcount+1charcount 4- اگر کاراکتر ورودی فاصله است آنگاه wordcount+1wordcount 5- پایان حلقه 6- charcount و wordcount را چاپ کن. 7- پایان 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; } شبيه getche() تفاوت: نمايش کاراکتر در صفحه نمايش Enter a statement (and press Enter): This book is my favorite. Char count= 26 Word count= 5

  22. ساختار تصمیم: دستور if مثال دستورif - 2 • مثال 3-12: نمايش کاراکترهاي مربوط به هر کد اسکي 1-36i 2- تا وقتیکه i<=125 است دستورات 3 تا 5 را تکرار کن. 3- مقدار i و کاراکتر i را چاپ کن. 4- اگر i-i/5*5==0 آنگاه برای چاپ به خط بعد برو. 5- پایان حلقه 6- پایان 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= }

  23. ساختار تصمیم: دستور if مثال دستورif - 3 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'); } • مثال 4-13: توليد یک عدد تصادفی و حدس آن توسط کاربر توليد عدد تصادفي: rand() فايل header: stdlib Guess the magic number: 100 wrong :( :( :( Your guess is low. Do you want to continue? (y/n): n The magic number is: 24891

  24. ساختار تصمیم: دستور else if ساختار دستور else if • استفاده از if براي تست شرطهاي متعدد • استفاده از if به صورت تو در تو • طولاني شدن برنامه • کاهش خوانايي برنامه • راه حل: استفاده از ساختار else if

  25. ساختار تصمیم: دستور else if مثال دستور else if اگر مقدار score صفر شود از حلقه خارج مي شود. • مثال 4-14: چاپ معادل حرفي نمرة دانشجو 1-score را بخوان. 2- تا وقتیکه score!=0 است دستورات 3 تا 5 را تکرار کن. 3- اگر 17<=score<=20 آنگاه چاپ کن درجة A در غیر این صورت اگر 15<=score<17 آنگاه چاپ کن درجة B در غیر این صورت اگر 12<=score<15 آنگاه چاپ کن درجة C در غیر این صورت چاپ کن درجة D 4- چاپ کن ”یک نمره وارد کنید“ 5- score را بخوان. 6- پایان حلقه 7- پایان 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: 19 score= 19 grade= A Enter a score: 14 score= 14 grade= C Enter a score: 0

  26. انتقال کنترل غير شرطي دستور break • خروج از حلقه های تکرار • مثال 4-15: تعيين تعداد اعداد زوج و فرد در اطلاعات ورودي 1-0count و 0n 2- دستورات 3 تا 7 را تکرار کن. 3- چاپ کن ”يک عدد وارد کنید.“ 4- num را بخوان. 5- اگر num==0 آنگاه از حلقه خارج شو. 6- n+1n 7- اگر num-(num/2*2)==0 باشد آنگاه count+1count 8- پایان حلقه 9- count و n-count را چاپ کن 10- پایان 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; }

  27. انتقال کنترل غير شرطي دستور continue • انتقال کنترل به محل کنترل شرط حلقه • مثال 4-16: نمايش کاراکتر ورودي به همراه کاراکتر بعدي در خروجي 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; } 1-1done 2- تا وقتیکه done!=0 دستورات 3 تا 6 را تکرار کن. 3- چاپ کن ”يک کاراکتر وارد کنید.“ 4- ch را بخوان. 5- اگر ch==‘&’ آنگاه 0done به محل کنترل شرط برو. 6- ch و ch+1 را چاپ کن. 7- پایان حلقه 8- پایان Enter a character: s You typed char s , next char is: t Enter a character: &

  28. انتقال کنترل غير شرطي دستور goto • انتقال کنترل از نقطه اي به نقطة ديگر • فرمت استفاده: • goto <برچسب> • نامگذاري برچسب همانند متغيرها • انتهاي برچسب علامت کولن (:) • مثال: • L1: • loop:

  29. ساختار تصميم: دستور switch ساختار دستور switch switch (عبارت) { case <مقدار 1>: <دستورات 1> break; case <مقدار 2>: <دستورات 2> break; … … … default: <دستورات> } • تصميم گيريهاي چندگانه • بر اساس مقادير مختلف • براي تصميم گيري در بيش از 3 انتخاب • مي تواند فاقد بخش default باشد. • مقادير مربوط به case ها نبايد يکسان باشند. • تبديل ثوابت کاراکتري به عدد صحيح • عدم استفاده از break: or شدن case ها • فقط بررسي مساوي بودن در عبارات case • چند ساختار switch مي تواند تو در تو باشد.

  30. ساختار تصميم: دستور switch مثال دستور 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.

More Related