380 likes | 598 Views
دستورات كنترلي. ساختارهاي كنترل. همیشه برنامه بصورت ترتیبی اجرا می شود مگر اینکه اتفاق خاصی رخ دهد. در این حالت ما از ساختارهای كنترل برنامه استفاده می کنیم. ساختارهای كنترلي دو نوع عملکرد مفید را در اختیار ما قرار میدهند: انتخاب بین گزینه های مختلف بر حسب شرایط موجود تکرار یا حلقه.
E N D
ساختارهاي كنترل • همیشه برنامه بصورت ترتیبی اجرا می شود مگر اینکه اتفاق خاصی رخ دهد. • در این حالت ما از ساختارهای كنترل برنامه استفاده می کنیم. • ساختارهای كنترلي دو نوع عملکرد مفید را در اختیار ما قرار میدهند: • انتخاب بین گزینه های مختلف بر حسب شرایط موجود • تکرار یا حلقه
انتخاب • یک ساختار کنترلی انتخاب، برای انتخاب بین گزینه های متفاوت استفاده می گردد. • باید یک شرط وجود داشته داشته باشد که بر اساس آن گزینه مورد نظر انتخاب شود. • ساختارهای کنترلی انتخاب در C++ : • if if/else switch
ساختارهاي كنترل تكرار(Repetition Control Structures) • ساختارهای کنترلی تکرار به ما امکان می دهند که قسمتی از برنامه را به تعداد دلخواه اجرا کنیم. • C++ دارای ساختارهای تکرار زیر است: while for do-while
ساختار انتخاب دستور if
دستور if • ساختار کنترلی if پس از بررسي صحت يك شرط اجازه انجام يك دستور العمل يا يك بلوك از دستورات را صادر مينمايد. • نحوه استفاده از دستور if به شكل زير است: if (<عبارت منطقي>) { < بدنه if> }
فلوچارت مربوط به دستور if دستورهاي قبلي شرط؟ true عمل false دستور بعدي
عملگرهاي شرطي • همانطور كه قبلاً آشنا شديم اين عملگرها خروجي منطقي دارند : • عملگرهاي مقايسه اي: • >بزرگتر • >=بزرگتر مساوي • <کوچکتر • <=کوچکتر مساوي • عملگرهاي تساوي: • ==مساوي • !=مخالف
مثال: برنامه اي بنويسيد كه كاراكتري را از كاربر گرفته و اگر برابر ‘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; }
عملگرهاي منطقي • اين عملگرها بر روي اپرندهاي منطقي عمل ميكنند و يك مقدار منطقي را برميگردانند: • AND , OR , NOT
عملگرهاي شرطي و عملگرهاي منطقي • ورودي عملگرهاي شرطي، عبارات رياضي هستند • خروجي عملگرهاي شرطي يك مقدار منطقي است • ورودي عملگرهاي منطقي ، عبارات منطقي هستند • خروجي عملگرهاي منطقي يك مقدار منطقي است
با استفاده از عملگرهاي منطقي ميتوان عبارات شرطي مورد نظر را توليد نمود. • مثال: عبارت شرطي، x بزرگتر از y و y مخالف صفر و x عدد مثبت باشد به شكل زير نوشته ميشود • (x > y) && (y != 0) && (x > 0)
مثال: برنامه اي بنويسيد كه تعداد واحد اخذ شده توسط كاربر و معدل را گرفته و اگر تعداد واحدها بيشتر از 14و معدل او بالاتر از 18 بود به او پيام تبريك بگويد. 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(); }
عبارت شرطي • در ساختارهای انتخاب، عبارت شرطي یک مقدار منطقي(Boolean) دارد که درست یا غلط است • در C++: • مقدار 0 برابر غلط است • هر مقدار دیگری برابر درست است
درصورتي كه بدنه دستور if تنها يك دستور داشته باشد ميتوان آكولادها را ننوشت • مثال: if (3<4) printf( "I am true!\n");
دستورات 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(); }
اشتباهات معمول • اغلب عملگر انتساب (=) با عملگر تساوی (==) اشتباه گرفته میشود. • در عبارت زیر چه ایرادی وجود دارد: if (grade=100) printf( "your grade is perfect!\n" );
ساختار كنترلي if-else • در دستور if اگر شرط درست باشد، يك دستور يا مجموعهاي از دستورات اجرا ميشود. • ساختار کنترلیif else اجازه می دهد که در صورت صدق نکردن یا غلط بودن شرط، عمل دیگری انجام گردد. if (<عبارت شرطي>) { <ifبدنه > } else { <elseبدنه > }
دستورهاي قبلي شرط؟ true false عمل 2 عمل 1 دستوربعدي
مثال: 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(); }
دستورات if-else هاي متوالي • تا كنون با استفاده از دستور if-else ساختاري پياده سازي شد كه درصورت صحت شرط يك سري دستورات و درصورت عدم صحت شرط مجموعه اي ديگر از دستورات انجام ميشدند • در بسياري از كاربردها لازم است كه شرايط مختلفي بررسي شوند و با توجه به صحت هر يك از شرطها عمليات مناسب انجام پذيرد • همچنين اينكه درصورت صحت يك شرط ديگر لازم نيست شرطهاي ديگر بررسي شوند
دستورات if-else هاي متوالي • بدين ترتيب ميتوان از ساختار if-else متوالي استفاده نمود if (<عبارت شرطي1>) { < بدنه شرط 1> } else if (<عبارت شرطي2>) { < بدنه شرط 2 > }… else { <elseبدنه > }
دستورهاي قبلي شرط1؟ true عمل 1 false شرط2؟ true عمل 2 ... false بدنه else دستوربعدي
مثال: 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(); }
تمرين مربوط به كاربرد if زمان تحويل: جلسه آينده
تمرين الف • برنامه حل معادله درجه دو را به شكل زير اصلاح نماييد: • درصورتي كه دلتا منفي بود پيغام مناسب داده شود. • درصورتي كه دلتا برابر با صفر بود وجود ريشه مضاعف و مقدار آن گزارش شود • درغير اينصورت ريشه هاي معادله محاسبه شده و نمايش داده شوند
تمرين ب • برنامه اي بنويسيد كه ساعات كاركرد كارمند و تعداد فرزندان وي را گرفته و حقوق آنرا محاسبه نمايد • حقوق خالص = ساعات كاركرد * 2500 • به ازاي هر فرزند و حداكثر تا سه فرزند، مبلغ 1500 تومان به حقوق اضافه ميشود • اگر ساعات كاركرد از 100 ساعت كمتر باشد به ازاي ساعات باقيمانده تا 100 براي هر ساعت مبلغ 500 تومان از حقوق كسر ميشود • مبلغ 5% حقوق بعنوان ماليات و بيمه از حقوق كسر ميشود.
ساختار انتخاب switch-case • از اين ساختار براي تصميم گيريهاي چندگانه براساس مقادير مختلف يك عبارت، استفاده ميشود. • بطور كلي در تمامي تصميم گيري هايي كه بيش از سه انتخاب وجود داشته باشد، بهتر است از ساختار switch استفاده شود. • ساختار انتخاب switch-case مشابه if-else هاي متوالي ميباشد ولي كد برنامه را خواناتر ميكند.
نحوه استفاده از ساختار switch-case • مقادير نوشته شده در مقابل عبارت case بايد ثابت باشند. • انتهاي دستورات مربوط به هر case با كلمه كليدي break مشخص ميشود • در صورتي كه حاصل ارزيابي عبارت در هيچ يك از حالات درنظر گرفته شده، موجود نباشد عبارت مربوط به بخش default اجرا ميگردد. switch (<عبارت>) { case <مقدار ثابت 1>: <دستورات 1> break; case <مقدار ثابت 2>: <دستورات 2> break; default: <n دستورات > }
نحوه استفاده از ساختار swith-case swith (x) { case 1: <دستورات 1> break; case 7: <دستورات 2> break; case 9: <دستورات 3> break; case 15: <دستورات 4> break; default: <دستورات 5> } • فرض كنيد متغيري با نام x وجود دارد كه ميخواهيم براساس مقادير مختلف آن تصميمات مختلفي بگيريم. • اگر x برابر با يك بود، مجموعه دستورات 1، • اگر برابر با 7 بود، مجموعه دستورات2، • اگر برابر با 9 بود، مجموعه دستورات3، • اگر برابر با 15 بود، مجموعه دستورات4 • و اگر با هيچكدام برابر نبود، مجموعه دستورات 5 اجرا شوند.
نكات استفاده از ساختار switch • ساختار switch ميتواند فاقد بخش default باشد • مقادير موجود در case هاي switch نميتوانند با هم مساوي باشند. • توجه داشته باشيد كه ثوابت كاراكتري هنگام كامپايل به كد اسكي تبديل ميشوند • اگر در انتهاي دستورات مربوط به يك case، دستور break فراموش شود، دستورات مربوط به case بعدي نيز اجرا ميشوند.
تفاوتهاي if-else و ساختار switch • در ساختار if چند عبارت با هم مقايسه ميشوند و شرطي كه در if اول نوشته ميشود محدوديتي در نوشتن if دوم ايجاد نميكند ولي در switch حاصل يك عبارت مورد ارزيابي قرار ميگيرد • مقادير مقايسه شونده در ساختار if-else ميتوانند متغير باشند ولي در ساختار swith مقادير انتخاب بايد ثابتهايي باشند كه مقابل دستور case قرار ميگيرند • در ساختار if-else ميتوان عبارت منطقي يا رابطه اي را مورد بررسي قرار داد ولي در ساختار switch فقط ”مساوي بودن“ مورد بررسي قرار ميگيرد.
مثال: • برنامه اي بنويسيد كه دو عملوند و يك عملگر را خوانده و با توجه به عملگر نتيجه را در خروجي نمايش دهد
case '/': result = num1 / num2; break; default: printf("\n\noperator is indefined"); } printf("\n\nresult is: %d",result); getch(); return 0; } 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; Enter num1: 5 Enter num2: 3 Enter operator(+,*,-,/): + result is: 8