3 - دانشگاه گیلانstaff.guilan.ac.ir/staff/users/htavakoli/fckeditor_repo/file/j4.pdf ·...

35
ﷲ الرحمن الرح بسم يم

Upload: duongdien

Post on 07-Mar-2018

232 views

Category:

Documents


1 download

TRANSCRIPT

يمبسم�هللا�الرحمن�الرح

3: تعداد�واحد

: �يه�كننده

دک���حسن�توک ی

برنامه�سازي

جلسه چھارم

»تكرار«

:آنچه در اين جلسه مي خوانيدwhileدستور -1

خاتمه دادن به يك حلقه -2

do..whileدستور -3

forدستور -4

breakدستور -5

continueدستور -6

gotoدستور -7

توليد اعداد شبه تصادفي -8

:رفتاري هدف هاي:بتوانيد جلسه اين مطالعة از پس مي رود انتظار

.دكني استفاده حلقه ايجاد براي آن از و شناخته را whileدستور نحو -

با آن تفاوت و شناخته را do..while دستور نحو -.كنيد بيان را while دستور

حلقه هاي آن از استفاده با و شناخته را for دستور نحو -.بسازيد گوناگون

.كنيد تبديل يكديگر به را فوق حلقه هاي - فاوتت و كرده ذكر را »پرش دستورات« از استفاده علت -

.كنيد بيان را goto و continue و break دستور سه اعداد« توليد نحوة و كرده بيان را تصادفي اعداد اهميت -

.بدانيد را »تصادفي شبه

:كلي هدف

و آن ها نحو و تكرار ساختارهاي انواع شناخت.يكديگر به آن ها تبديل

مقدمه از بلوكي يا دستور يك پي در پي اجراي ،تكرار

از استفاده با .است برنامه يك در دستورالعمل ها به تا مكني مجبور را برنامه كنترل مي توانيم تكرار.نمايد اجرا دوباره را آن ها و برگردد قبلي خطوط

C++ دستور :است تكرار دستور سه داراي while، دستور do_while دستور و for.

، انچرخه مانندش طبيعت علت به تكرار دستور هاي .مي شوند ناميده نيز حلقه

whileدستور -1 :است زير شكل بهwhileدستور نحو

while (condition) statement;

جاي به و مي گيرد قرار شرط يك ،conditionجاي بهstatementيردمي گ قرار شود تكرار بايد كه دستوري.

،باشد )نادرست يعني(صفر شرط، مقدار اگرstatementناولي به برنامه و مي شود گرفته ناديده

شرط مقدار اگر .مي كند پرشwhileاز بعد دستور و شده اجراstatement ،باشد )درست يعني (ناصفر قدر آن تكرار اين .مي شود بررسي شرط مقدار دوباره.شود صفر شرط مقدار كه اين تا مي يابد ادامه

while حلقة با متوالي صحيح اعداد جمع حاصل محاسبة 4-1 مثال

1 مقدار برنامه اين + 2 + 3 + … + n ورودي عدد براي را n محاسبه :مي كند

int main()

{ int n, i=1;

cout << "Enter a positive integer: ";

cin >> n;

long sum=0;

while (i <= n)

sum += i++;

cout << "The sum of the first " << n << " integers is "

<< sum;

}

int main(){ int n, i=1;

cout << "Enter a positive integer: ";cin >> n;long sum=0;while (true){ if (i > n) break;

sum += i++;}cout << "The sum of the first " << n << " integers is " << sum;

}

خاتمه دادن به يك حلقه -2 كنترل براي break دستور چگونه كه ديديم قبال

مثال به( مي شود استفاده switch دستورالعمل پايان براي break دستور از .)كنيد نگاه 17-4

.كرد استفاده توان مي نيز حلقه ها به دادن break دستور مزيت هاي از يكي خاتمه را حلقه فورا كه است اين

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

اعداد فيبوناچي 4-4مثال * شكل به 3F,2F,1F,0F,… فيبوناچي اعداد

:مي شوند تعريف زير معادله هاي توسط بازگشتي

F0

= 0 , F1

= 1 , Fn

= Fn-1

+ Fn-2

:داريم n=2 براي مثال

F2

= F2-1

+ F2-2

= F1

+ F0

= 0 + 1 = 1

:داريم n=3 براي يا

F3

= F3-1

+ F3-2

= F2

+ F1

= 1 + 1 = 2

:داريم n=4 براي و

F4

= F4-1

+ F4-2

= F3

+ F2

= 2 + 1 = 3

ورودي از كه مشخص محدودة يك تا را فيبوناچي اعداد همة زير، برنامة

:مي كند چاپ و محاسبه مي شود، دريافت

int main(){ long bound;

cout << "Enter a positive integer: ";

cin >> bound;cout << "Fibonacci numbers < " << bound << ":\n0, 1";

long f0=0, f1=1;while (true){ long f2 = f0 + f1;

if (f2 > bound) break;cout << ", " << f2;f0 = f1;f1 = f2;}

} Enter a positive integer: 1000Fibonacci numbers < 1000:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987

int main(){ long bound;

cout << "Enter a positive integer: ";cin >> bound;cout << "Fibonacci numbers < " << bound << ":\n0, 1";

long f0=0, f1=1;while (true){ long f2 = f0 + f1;

if (f2 > bound) exit(0); cout << ", " << f2;

f0 = f1;f1 = f2; }

}

ندمي ده ترجيح برنامه نويسان به دادن خاتمه براي break از

استفاده نامتناهي حلقه هاي انعطاف قابليت زيرا كنند

.دارد بيشتري

exit(0)استفاده از تابع 4-5مثال

ع هرچند كه اين تاب. روش ديگري براي خاتمه دادن به يك حلقه است exit(0)تابع:بالفاصله اجراي كل برنامه را پايان مي دهد

: نامتناهي حلقة يك كردن متوقف

يك عامل سيستم Ctrl+C كليدهاي فشردن با را Ctrl كليد .مي دهد خاتمه اجبار به را برنامه را خود صفحه كليد روي C كليد و داشته نگه پايين .كند پيدا خاتمه فعلي برنامة تا دهيد فشار

do..whileدستور -3 هب آن نحو .است حلقه ساختن براي ديگري روش do..while ساختار:است زير صورت

do statement while (condition);

به و مي گيرد قرار شرط يك condition جاي به ردمي گي قرار بلوكي يا دستور statement جاي

.شود تكرار است قرار كه

و مي كند اجرا را statement ابتدا دستور اين اگر .مي كند بررسي را condition شرط سپس مي شود تكرار دوباره حلقه بود درست شرط

.يابد مي پايان حلقه وگرنه

while دستور مانند do..while دستور به حلقه كنترل شرط كه فرق اين با .است دد،گر ارزيابي حلقه ابتداي در كه اين جاي

.شود مي ارزيابي حلقه انتهاي در

قبل هك اين جاي به كنترلي متغير هر يعني درون مي تواند شود، تنظيم حلقه شروع از

.گردد تنظيم آن

حلقة كه است اين ديگر نتيجةdo..while ارمقد به توجه بدون هميشه

ودمي ش اجرا بار يك الاقل كنترل، شرط .نشود اجرا اصال مي تواند while حلقة اما

do..while حلقة با متوالي صحيح اعداد جمع حاصل محاسبة 4-7 مثال :دارد را 5-1 مثال تأثير همان برنامه اين

int main(){ int n, i=0;

cout << "Enter a positive integer: ";cin >> n;long sum=0;do

sum += i++;while (i <= n);cout << "The sum of the first " << n << " integers is " << sum;

}

فاكتوريال اعداد 4-8 مثال * يبازگشت رابطه هاي از استفاده با … و !3 و !2 و !1 و !0 فاكتوريال اعداد

:مي شوند تعريف زير0! = 1 , n! = n(n-1)!

n ازاي به مثال، براي = :داريم دوم معادلة در 11! = 1((1-1)!) = 1(0!) = 1(1) = 1

n براي همچنين = :داريم 22! = 2((2-1)!) = 2(1!) = 2(1) = 2

n ازاي به و = :داريم 33! = 3((3-1)!) = 3(2!) = 3(2) = 6

اپ برنامة زير همة اعداد فاكتوريال را كه از عدد داده شده كوچك ترند، چ:كند مي

int main()

{ long bound;

cout << "Enter a positive integer: ";

cin >> bound;

cout << "Factorial numbers < " << bound << ":\n1";

long f=1, i=1;

do

{ cout << ", " << f;

f *= ++i;

}

while (f < bound);

}

:است زير صورت به for دستورالعمل نحوfor (initialization; condition; update) statement;

.نندمي ك كنترل را حلقه پرانتز، داخل قسمت سه

forدستور - 4

يا اعالن براي initialization عبارت تفادهاس حلقه كنترل متغير به اوليه مقداردهي

كه است عبارتي اولين عبارت اين.مي شود به نوبت كه اين از پيش مي شود ارزيابي .برسد تكرارها

هحلق آيا كه اين تعيين براي condition عبارت ينا يعني .مي رود كار به خير يا شود تكرار بايد

شرط اين اگر .است حلقه كنترل شرط عبارت، .مي شود اجرا statement دستور باشد درست

لكنتر متغير پيش بردن برايupdate عبارت اجراي از پس عبارت اين .مي رود كار به حلقه

statement مي گردد ارزيابي.

ي كنندم ايجاد را تكرار كه وقايعي زنجيرة بنابراين:از عبارتند

initialization عبارت ارزيابي – 1

نادرست اگر . condition شرط بررسي – 2.مي يابد خاتمه حلقه باشد،

statement اجراي – 3

update عبارت ارزيابي – 4

4 تا 2 گام هاي تكرار – 5

condition و initialization عبارت هاي ييعن .هستند اختياري عبارت هايupdateو

.نكنيم ذكر حلقه در را آن ها مي توانيم

متوالي صحيح اعداد مجموع محاسبة براي for حلقة از استفاده 4-9 مثال :دارد را 5-1 مثال تأثير همان برنامه اين

int main(){ int n;

cout << "Enter a positive integer: ";cin >> n;long sum=0;for (int i=1; i <= n; i++)

sum += I;cout << "The sum of the first " << n << " integers is " << sum;

}

اعالن for حلقة يك درون كنترل متغير يك وقتي استاندارد ++C در محدود for حلقة همان به متغير آن حوزة )باال مثال در i مانند( مي شود

.ودش استفاده حلقه آن از بيرون نمي تواند متغير آن يعني .گردد مي

for حلقة از خارج در مشابهي نام از مي توان كه است اين ديگر نتيجة .نمود استفاده ديگر متغير يك براي

نزولي for حلقة يك 4-12 مثال :دمي كن چاپ نزولي ترتيب به را مثبت صحيح عدد ده زير برنامة

int main()

{ for (int i=10; i > 0; i--)

cout << " " << i;}

for حلقة در كنترل متغير يك از بيشتر 4-15 مثال

:دارد كنترل متغير دو زير برنامة در for حلقة

int main()

{ for (int m=95, n=11, m%n > 0; m -= 3, n++)

cout << m << "%" << n << " = " << m%n << endl;

}

تودرتو for حلقه هاي 4-16 مثال:مي كند چاپ ضرب جدول يك زير برنامة

#include <iomanip>

#include <iostream>

int main()

{ for (int x=1; x <= 10; x++)

{ for (int y=1; y <= 10; y++)

cout << setw(4) << x*y;

cout << endl;

}

}

آن از قبال .آشناست دستور يك break دستور همچنين و switch دستور به دادن خاتمه براي

.كرده ايم استفاده do..while و while حلقه هاي نيز for حلقة به دادن خاتمه براي دستور اين از

.كنيم استفاده مي توانيم

حلقه درون جايي هر در break دستور مهخات را حلقه جا همان در و بگيرد جا مي تواند

.دهد

breakدستور -5 درون break دستور وقتي

،شود استفاده تودرتو حلقه هاي مستقيما كه حلقه اي روي فقط

تاثير گرفته قرار آن درون .مي گذارد هيچ بدون بيروني حلقه هاي.مي يابند ادامه تغييري

continueدستور -6

بلوك درون دستورهاي بقية break دستور بيرون دستور اولين به و گرفته ناديده را حلقه نيز continue دستور .مي كند پرش حلقه ار حلقه كه اين جاي به اما است همين شبيه

قلمنت حلقه بعدي تكرار به را اجرا دهد، خاتمه .مي كند

اين دستور، ادامة چرخة فعلي را لغو كرده و اجرايدور بعدي حلقه را آغاز

.كند مي

continue و break دستورهاي از استفاده 4-19 مثال :مي دهد شرح را continue و break دستورهاي كوچك، برنامة اين

int main(){ int n = 1;

char c;for( ; ;n++ ){ cout << "\nLoop no: " << n << endl;

cout << "Continue? <y|n> ";cin >> c;if (c = = 'y') continue;break;

}cout << "\nTotal of loops: " << n;

}

پرش دستورهاي از ديگري نوع gotoدستور برچسب يك توسط پرش اين مقصد .است .مي شود معين

عالمت آن جلوي كه است شناسه اي برچسب رارق ديگر دستور يك جلوي و مي آيد ) : (كولن

.مي گيرد دهاستفا با كه است اين goto دستور مزيت يك

خارج تودرتو حلقه هاي همة از مي توان آن از .نمود پرش برنامه در دلخواهي مكان به و شد

gotoدستور -7

تودرتو حلقه هاي از شدن خارج براي goto دستور از استفاده 4-20 مثال

int main(){ const int N=5;

for (int i=0; i<N; i++){ for (int j=0; j<N; j++)

{ for (int k=0; k<N; k++)if (i+j+k>N) goto esc;else cout << i+j+k << " ";

cout << "* ";}

esc: cout << "." << endl;}

}

رايانه ها، مهم بسيار كاربردهاي از يكي .تاس واقعي دنياي سيستم هاي » شبيه سازي«

اين به پيشرفته بسيار توسعه هاي و تحقيقات يه سازيشب وسيلة به .است وابسته خيلي راهكار

العهمط را مختلف سيستم هاي رفتار مي توانيم را آن ها واقعا باشد الزم كه اين بدون كنيم

تاس نياز شبيه سازي در .نماييم پياده سازي تا شود توليد رايانه ها توسط »تصادفي اعداد«

.شود مدل سازي واقعي دنياي نادانسته هاي

توليد اعداد شبه تصادفي -8

ايداده ه دادن با يعني هستند »ثابت كار« رايانه ها سانيك خروجي هميشه مشابه، رايانه هاي به مشابه يدتول اعدادي مي توان اين وجود با .مي شود توليد طور هب كه اعدادي هستند؛ تصادفي ظاهر به كه كرد

و گسترده اند خاص محدودة يك در يكنواخت نچني .ندارد وجود مشخصي الگوي هيچ كدام براي

.مي ناميم »شبه تصادفي اعداد« را اعدادي

تصادفي شبه اعداد توليد 4-22 مثال استفاده شبه تصادفي اعداد توليد براي ()rand تابع از برنامه اين

:مي كند

#include<cstdlib>//defines the rand() and RAND_MAX

#include <iostream>int main(){ // prints pseudo-random numbers:for (int i = 0; i < 8; i++)cout << rand() << endl;

cout << "RAND_MAX = " << RAND_MAX << endl;

} صحيح عدد هشت رايانه شود، اجرا باال برنامة كه بار هرunsigned تا 0 فاصلة در يكنواخت طور به كه مي كند توليد

RAND_MAX شده اند گسترده. RAND_MAX اين در

.است 2,147,483,647 با برابر رايانه

تهساخ خود قبلي عدد روي از شبه تصادفي عدد هر.مي شود

يداخل مقدار يك روي از شبه تصادفي عدد اولين .مي گردد ايجاد مي شود گفته »هسته« كه

ارمقد يك با هسته شود، اجرا برنامه كه دفعه هر .مي شود بارگذاري پيش فرض

ودنب تصادفي از كه نامطلوب اثر اين حذف براي تابع از استفاده با مي توانيم مي كاهد، اعداد

()srand كنيم انتخاب را هسته مقدار خودمان.

#include <cstdlib> // defines the rand() and

srand()

#include <iostream>int main(){ // prints pseudo-random numbers:

unsigned seed;cout << "Enter seed: ";cin >> seed;srand(seed); // initializes the seedfor (int i = 0; i < 8; i++)

cout << rand() << endl;}

محاوره اي طور به هسته كارگذاري 4-23 مثال بجز است 4-22 مثال برنامة مانند برنامه اين صادفيت اعداد توليدكنندة هستة مي توان كه اين:نمود وارد محاوره اي شكل به را

پايان جلسه چهارم