فصل سوم برنامه سازی پیشرفته « انتخاب »++C

<!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

 

C++ فصل سومبرنامه سازی پیشرفته« انتخاب »

 

mohsen_mahyar@yahoo.com

 

همۀ برنامه هایی که در دو فصل اول بیان شد، به شکل ترتیبی اجرا می شوند،

یعنی دستورات برنامه به ترتیب از بالا به پایین و هر کدام دقیقا یک بار اجرا م یشوند.

در این فصل نشان داده می شود چگونه از دستورالعمل های انتخاب 1 جهت

انعطاف پذیری بیشتر برنامه استفاده کنیم. همچنین در این فصل انواع صحیح که در

وجود دارد بیشتر بررسی می گردد. C++

if 3 دستور ‐1

موجب می شود برنامه به شکل شرطی اجرا شود. نحو آن به گونۀ زیر if دستور

است :

If (condition) statement;

که شرط نامیده می شود یک عبارت صحیح است (عبارتی که با یک Condition

می تواند هر فرمان قابل اجرا باشد. statement مقدار صحیح برآورد می شود) و

مقدار غیر صفر داشته باشد. condition وقتی اجرا خواهد شد که Statement

1 – Selection

 

64 برنامه سازی پیشرفته

دقت کنید که شرط باید درون پرانتز قرار داده شود.

3 آزمون بخش پذیری ‐ * مثال 1

این برنامه بررسی می کند که یک عدد صحیح مثبت بر عدد دیگر قابل تقسیم

نباشد:

int main()

{ int n, d;

cout << "Enter two positive integers: ";

cin >> n >> d;

if (n%d) cout << n << " is not divisible by "

<< d << endl;

}

در اولین اجرا، اعداد 66 و 7 را وارد می کنیم:

Enter two positive integers: 66 7

66 is not divisible by 7

66 برابر با 3 برآورد می گردد. چون این مقدار، یک عدد صحیح غیرصفر % مقدار 7

اجرا شده و cout است، پس شرط به عنوان درست تفسیر می شود و در نتیجه دستور

پیغام عدم قابلیت تقسیم چاپ می شود.

برنامۀ بالا را دوباره اجرا می نماییم و این دفعه اعداد 56 و 7 را وارد می کنیم:

Enter two positive integers: 56 7

56 برابر با 0 برآورد می شود که این به معنی نادرست تفسیر م یگردد، پس % مقدار 7

نادیده گرفته شده و هیچ پیغامی روی صفحه چاپ نمی شود. cout دستور

هر وقت یک عبارت صحیح به عنوان یک شرط استفاده شود، مقدار 0 C++ در

است. « درست » و همۀ مقادیر دیگر به معنی « نادرست » به معنی

قابل تقسیم باشد، برنامه d بر n 3 ناقص به نظر می آید زیرا اگر ‐ برنامۀ مثال 1

رفع می شود. if..else هیچ عکس العملی نشان نمی دهد. این نقص به کمک دستور

فصل سوم / انتخاب 65

if..else 3 دستور ‐2

موجب م یشود بسته به این که شرط درست باشد یا خیر، if..else دستور

یکی از دو دستورالعمل فرعی اجرا گردد. نحو این دستور به شکل زیر است:

if (condition) statement1;

else statement2;

همان شرط مساله است که یک عبارت صحیح می باشد و condition

فرمان های قابل اجرا هستند. اگر مقدار شرط، غیر statement و 2 statement1

اجرا می شود. statement اجرا خواهد شد وگرنه 2 statement صفر باشد، 1

3 یک آزمون دیگر قابلیت تقسیم ‐ * مثال 2

با دستور if 3 است بجز این که دستور ‐ این برنامه مانند برنامۀ مثال 1

جایگزین شده است: if..else

int main()

{ int n, d;

cout << " Enter two positive integers: ";

cin >> n >> d;

if (n%d) cout << n << " is not divisible by "

<< d << endl;

else cout << n << " is divisible by " << d << endl;

}

حالا وقتی در این برنامه اعداد 56 و 7 را وارد کنیم، برنامه پاسخ می دهد که 56

بر 7 قابل تقسیم است:

Enter two positive integers: 56 7

56 is divisible by 7

56 برابر با صفر است، پس این عبارت به عنوان نادرست تفسیر % چون حاصل 7

اجرا else نادیده گرفته شده و دستور بعد از if می گردد. در نتیجه دستور بعد از

به تنهایی یک دستور است، گر چه به دو if..else می شود. توجه کنید که

سمیکولن نیاز دارد.

 

66 برنامه سازی پیشرفته

3 عملگرهای مقایسه ای ‐4

شش عملگر مقایسه ای وجود دارد: > و < و => و =< و == C++ در

و =! . هر یک از این شش عملگر به شکل زیر به کار می روند:

x < y // است y کوچک تر از x

x > y // است y بزرگ تر از x

x <= y // است y کوچک تر یا مساوی x

x >= y // است y بزرگ تر یا مساوی x

x == y // است y مساوی با x

x != y // نیست y مساوی با x

این ها می توانند برای مقایسۀ مقدار عبارات با هر نوع ترتیبی استفاده شوند. عبارت

حاصل به عنوان یک شرط تفسیر م یشود. مقدار این شرط صفر است اگر شرط

نادرست باشد و غیر صفر است اگر شرط درست باشد. برای نمونه، عبارت

7 برابر با صفر ارزیابی می شود، به این معنی که این شرط نادرست است. ×8<6×9

3 کمینۀ دو عدد صحیح ‐ * مثال 3

این برنامه مشخص می کند که از دو عدد صحیح ورودی، کدام یک کوچ کتر

است:

int main()

{ int m, n;

cout << "Enter two integers: ";

cin >> m >> n;

if ( m < n ) cout << m << " is the minimum." << endl;

else cout << n << " is the minimum." << endl;

}

Enter two integers: 77 55

55 is the minimum.

عملگر جایگزینی با عملگر برابری فرق دارد. عملگر جایگزینی C++ دقت کنید که در

یک مساوی تکی " = " است ولی عملگر برابری، دو مساوی " = = " است. مثلا

 

فصل سوم / انتخاب 67

بررسی x == قرار می دهد ولی دستور ; 33 x مقدار 33 را در x = دستور ; 33

با 33 برابر است یا خیر. درک این تفاوت اهمیت زیادی دارد. x می کند که آیا مقدار

x = تخصی ص می دهد // ; 33 X مقدار 33 را ب ه

x == برابر با 33 باشد // ; 33 x صفر ارزیاب ی می شود (به معنی نادرست ) مگر این که مقدار

3 یک خطای برنامه نویسی متداول ‐ * مثال 4

این برنامه خطادار است:

int main()

{ int n;

cout << "Enter an integer: ";

cin >> n;

if (n = 22) cout << "n = 22" << endl; // LOGICAL ERROR!

else cout << "n != 22" << endl;

}

Enter an integer: 77

n = 22

ظاهرا منطق برنامۀ فوق به این گونه است که عددی از ورودی دریافت می شود و اگر

این عدد با 22 برابر بود، پیغام برابری چاپ می شود و در غیر این صورت پیغام عدم

برابری چاپ می گردد. ولی اجرای بالا نشان می دهد که برنامه درست کار نمی کند. عدد

در خروجی چاپ شده است! ایراد در خط پنجم n = 77 وارد شده ولی پیغام 22

قرار داده و مقدار قبلی آن که 77 n مقدار 22 را در n = برنامه است. عبارت 22

استفاده شده پس if به عنوان شرط دستور n = است را تغییر می دهد. اما عبارت 22

به (n = به عنوان یک عبارت صحیح با مقدار 22 برآورد می شود. لذا شرط ( 22

است. به همین « نادرست » تفسیر می شود زیرا فقط مقدار 0 به معنای « درست » عنوان

اجرا می شود. خط پنجم باید ای نطور نوشته می شد: else دلیل دستور قبل از

if (n = = 22) cout << "n = 22" << endl; // CORRECT

خطای نشان داده شده در این مثال، خطای منطقی 1 نام دارد. این نوع خطا،

بدترین نوع خطاهاست. خطاهای زمان کامپایل (مانند از قلم افتادن یک سمیکولن) به

1 – Logical Error

68 برنامه سازی پیشرفته

وسیلۀ کامپایلر گرفته م یشود. خطاهای زمان اجرا (مانند تقسیم بر صفر) نیز به وسیلۀ

سیستم عامل گرفته می شود اما خطای منطقی را نمی توان با این ابزارها کشف کرد.

3 کمینۀ سه عدد صحیح ‐ * مثال 5

3 است با این تفاوت که از سه عدد صحیح استفاده ‐ این مثال شبیه مثال 3

می کند:

int main()

{ int n1, n2, n3;

cout << "Enter three integers:

/ 0 نظر / 159 بازدید