Download - دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Transcript
Page 1: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

BY: Ghasem Mohammadi

_دانشگاه كردستاندانشكدة فني و

مهندسيگروه كامپيوتر

مباني كامپيوتر و برنامه سازي Basics of Computer and Programming

Session 3Algorithms

آشنايي با الگوريتم

Page 2: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Algorithm الگوريتم ها

هدفهاي كلي

اجزاء الزم براي حل مسئلهشناخت شناخت حل مسئله و ارائه الگوريتم

بررسي صحت الگوريتم

Page 3: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

هدفهاي رفتاري

.الگوريتمي را براي حل مسئله ارائه دهد

.الگوريتم هاي مختلف براي يک مسئله را مقايسه کند

. شرط ها و حلقه ها را در الگوريتم بکار ببرد

:دانشجو پس از مطالعه اين فصل بايد بتواند

Page 4: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

انسGان بGا مسGائل مختلفGي روبروسGت ،در زندگGي روزمره مقدمه مشكالت( راه حلGي و حGل از ايGن مسGائل ) و براي هGر كدام

ا غذاز قبيGGل راه رفتGGن، ي گزيند. مسGGائل روشGGي را بر ميريباً هGGر روز آنهGGا را قخوردن، خوابيدن و غيره كGGه بشGGر ت

پيش روي خود دارد.

همGه ايGن مسGائل نياز بGه روشGي براي حGل كردن دارند مثال انجام معيني مراحGل و خاصGي ترتيGب بGا بايGد رفتGن راه شود. تGا مسGئله راه رفتGن براي بشGر حGل شود. اصطالحاً مسئله آGن الگوريتGم را مسGئله حGل يGا كار انجام روش

نامند. مي

Page 5: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

تعريف الگوريتمهGر دسGتورالعملی کGه مراحGل انجام کاری را بGا زبانGی دقیGق و با جزئیات کافGی بیان نمایGد بطوریکGه ترتیGب مراحGل و شرط خاتمGه عملیات در آن کامال“ مشخGص شده باشGد را الگوریتGم گویند. بGه عبارتGي ديگGر: الگوريتم

باشGد كGه شرايGط زير اي از دسGتورالعمل هGا، براي حGل مسGئله مي مجموعهرا بايد دارا باشد:

دقيق باشد .جزئيات كامل حل مسئله را داشته باشد پذير باشد.‌پايان

Page 6: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

مراحل الگوريتم

كه بيابي�م(. )ي�ا كني�م را مشخ�ص آ�ن مس�ئله الگوريت�م باي�د ي�ك مس�ئله ح�ل براي ناميده مي آ�ن مس�ئله براي الگوريت�م الگوريتم اص�طالحاً طراح�ي شود. در طراح�ي

كنند: معموالً سه مرحله زير را از هم جدا مي

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

Page 7: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

: الگوريتمGي بنويسGيد كGه دو عدد از ورودي دريافت مثال كرده مجموع

دو عدد را محاسبه و چاپ نمايد. انجام محاسبات خروجي ها

وروديها

مجموع دو عدد جمع دو عدد a , b

G شروع 0 1 Gb ,a.را بخوان قرار بده.sum را محاسبه و در Gb , a مجموع 23 Gsum را در خروجي چاپ كن G پايان4

Page 8: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

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

چاپ مجموع محاسبه مجموع a

چاپ ميانگين محاسبه ميانگين b

مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين سه عدد را محاسبه و چاپ كند.

G شروع0G سه عدد از ورودي بخوان1 قرار بده.Gsum مجموع سه عدد را محاسبه و در 23 Gsum را بر سه تقسيم كرده،در ave.قرار بده 4 Gave , sum.را در خروجي چاپ كن G پايان.5

c

Page 9: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

معموال درك يك الگوريتم با شكل راحتGر از نوشتن آن بصورت متن

با مي را الگوريتGGGGGGم لذا باشد. دهند. (نمايش ميflowchartفلوچارت)

شود. هاي زير تشكيل مي فلوچارت از شكل

Begin End

خواندن يا Read

چاپ کردن write

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

شود: االضالع استفاده مي عالمتهاي ورودي و خروجي: كه معموال از متوازي

Page 10: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

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

جايگزين يا محاسبات

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

دار هاي جهت هاي مختلف بهم از فلش عالمت اتصال: براي اتصال شكلكنند. استفاده مي

شرط

Page 11: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

cin<<a<<b<<c;

Sum a+b+c

Ave sum/3

cout>>sum>>ave;

End

فلوچارت مجموع سه عدد

Page 12: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

نمايد. مثال: فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا

را دو متغيGر كGه در آنها دو عدد خوانده شده، قرار b , aبراي حGل ايGن مسGئله گيريم. سGپس بGا اسGتفاده از يGك متغيGر كمكGي محتويات اين گيرنGد در نظGر مي مي

كنيم : دو عدد را جابجا مي

Page 13: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

12 15

temp

temp

a b

12 15

12

a b

temp

15 15

12

a b

temp

15 12

12

a b

temp

Page 14: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

Read(a,b)

temp a

a b

Write(a,b)

End

b temp

:فلوچارت مسئله باال بصورت زير خواهد بود

Page 15: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

تمرينG فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت1

كرده محيط و مساحت آنرا محاسبه و چاپ كند.

اي را از ورودي دريافت كرده، G فلوچارتي رسم نمائيد كه شعاع دايره2محيط و مساحت آنرا محاسبه و چاپ نمايد.

عدد 3 سه كGه كنيGد رسGم فلوچارتGي GGThird , second, first ،كرده دريافت ورودي از را

در را حاصل نموده، جابجGا را آنهGا محتويات خروجي چاپ كند.

Page 16: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

G فلوچارتي رسGم نمائيGد كه دو عدد از ورودي دريافت كرده، سپس 4محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.

از 5 را سانتيگراد( برحسGب حرارت )درجGه عددي كGه نمائيGد رسGم فلوچارتGي GGورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.

Page 17: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

دستورالعمل هاي شرطي در حGل بسGياري از مسGائل يGا تقريباً تمام مسGائل نياز بGه استفاده از شروط جزء،

شود. همانطور كGه مGا خودمان در زندگGي روزمره با نيازهاي اسGاسي محسGوب ميها سركار داريم. بطور مثال اگر هوا ابري باشد ممكن است چنين سخن اين شرط

بگوييم:

دارم. در غير اگر هوا باراني باشد سپس چتري برمي دارم اينصورت چتر برنمي .

Page 18: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

دهند در حالت كلي شرط را بصورت زير نمايش مي :

If شرط ياthen شروط

yes عمل يا اعمال

NOعمل يا اعمال بعدي

Page 19: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

: فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، فرد يا زوج بودن آن را مثال تشخيص دهد.

Begin

Read(a)

R a mod 2

Write(‘odd’)

End

if R=0 then

No

yesWrite(‘even’)

Page 20: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

Read(a,b)

max a

Write(max)

End

if b>max

No

yes max b

را مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عددپيدا كرده در خروجي چاپ نمايد.

Page 21: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

Read(a,b,c)

min a

Write(min)

End

if b<min then

No

yes min b

if c<min then yes min c

No

مثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته

:در خروجي چاپ نمايد

Page 22: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

باشد نمونه اجراي فلوچارت باال بصورت زير مي :

خروج a b c Min

11 12 11 17 12111111

12345

Page 23: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

تمرين- فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده، قدر مطلق1

عدد را در خروجي چاپ كند.

- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت، منفي2 يا صفر بودن عدد را تشخيص داده، در خروجي با پيغام مناسب

چاپ كند.- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، بخشپذيري3

را بررسي نمايد.5 و 3 آن بر G فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي4

هاي آن را محاسبه در خروجي چاپ كند. دريافت كرده، ريشه

Page 24: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

حلقه ها بGا عملياتGي روبرو مي شويGم ، كه در حGل بسGياري از مسGائل

نياز بGه تكرار دارنGد و عمGل تكرار آنهGا بGه تعداد مشخصي انجام عدد را محاسبه 100گيرد. فرض كنيGد، بخواهيGم ميانگيGن مي

نمي بنظGر منطقGي اينصGورت در كGه كنيGم، متغير 100رسGد مختلف را از ورودي دريافت كنيم سپس آنها را جمع كنيم.

Page 25: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

انواع حلقه ها

حلقه هاي با تکرار مشخص

حلقه هاي با تکرار نا مشخص

Page 26: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

حلقه هاي با تکرار مشخص

باشد اين حلقه از اجزاء زير ها تعداد تكرار مشخص مي در اين نوع حلقهشود تشكيل مي :

G انديس حلقه1 G مقدار اوليه براي انديس حلقه2

مقدار افزاينده براي انديس حلقه )معموال يك واحد در هر مرحله( -3G مقدار نهايي )تعداد تكرا حلقه(4

G شرطي براي كنترل تعداد تكرار حلقه5

Page 27: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

i 1

if i<=n

yes

No

مجموعه دستورات حلقه

i i+1

اتمام كار حلقه

دهند: ها را غالباً با فلوچارت بصورت زير نمايش مي اين حلقه

Page 28: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

را از ورودي دريافت كرده، مجموع nمثال : فلوچارتGي رسGم نمائيGد كGه عدد را محاسبه كند.nاعداد از يك تا

i انديس حلقه

n مقدار نهايي

Page 29: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

Read(n)

I 1 sum 0

if I<=n

yes

No Write(sum)

Endsum sum+I

I I+1

حلقه

Page 30: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

:نمونه اجراي فلوچارت باال بصورت زير است

خروجي

N I sum

15 5 1 0 2 13 34 6 5 106 15

1234567

Page 31: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

كGه كنيGد فلوچارتGي رسGم : بزرگترين nمثال كرده، دريافGت ورودي از عدد عدد را پيدا كرده در خروجي چاپ نمايد.nمقدار از بين

i انديس حلقه

مقدار نهايي n

بزرگترين Maxمقدار

Page 32: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

I 2 max a

if i<=n then

yes

Nowrite(max)

End

i i+1

حلقه Read(a)

Read(n)

if a > max max a

No

yes

Page 33: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

، دو عدد صGحيح مثبت را از ورودي n , xمثال : فلوچارتGي رسGم نمائيGد كGه را محاسبه كند.n به توان xدريافت كرده سپس

انديس حلقه i

n مقدار نهايي nعدد به توان

pow

Page 34: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

i 1 pow 1

if i<=n then

yes

Nowrite(pow)

Endpow pow*xحلقه

Read(n,x)

i i+1

Page 35: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

هايي كه تعداد تكرار آنها مشخص نيست )در حلقهC ++ به حلقهwhile مشهورند.(

حلقه ايGن مي در مشخص تكرار تعداد ورودي، بGه توجGه بGا دقيقاً هGا و شود. توان تعداد تكرار حلقGه را بدون ورودي معيGن كرد. ايGن حلقGه هGا فقGط شامل نمي

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

Page 36: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

If شرط ياشروط

محموعه دستورالعملها

و جاگزينها

yes

No

شوند ها بصورت زير نمايش داده مي در حالت كلي اين نوع حلقه :

Page 37: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

مثال: فلوچارتGي رسGم كنيGد كGه عددي را از ورودي دريافGت كرده سپس تعداد .ارقام آن را شمرده در خروجي چاپ نمايد

N عدد خوانده شده

countتعداد ارقام

Page 38: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

count 0

if N>0 then

yes

Nowrite(count)

EndN N div 10

حلقه

Read(N)

count count+1

Page 39: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

مثال : فلوچارتGي رسGم نمائيGد كGه عددي از ورودي دريافGت كرده، سGري فيبوناچي قبل از آنرا توليد نمايد.

در حالت كلي جمالت سري بصورت:fk=fk-1+fk-2

Nعدد خوانده شده

f3جمله سوم سري

f2 جمله دوم سري

f1 جمله اول سري

Page 40: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

Begin

F1 0f2 1

if f3>N then

yes

No End

حلقه

Read(N)

f1 f2f2 f3

f3 f1+f2

f3 f1+f2

write(f3)

Page 41: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

تمرين- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، كامل بودن1

هاي عليه آنرا بررسي نمايد. )عدد كامل، عددي است كه مجموع مقسوم آن با خودش برابر باشد.(

جمله سريN را از ورودي دريافت كرده، N- فلوچارتي رسم كنيد كه 2 فيبوناچي را توليد نمايد.

عدد 3 دو كه نمائيGد رسGم فلوچارتGي GGN , M از را مقسوم بزرگتريGن خوانده، دو ورودي مشترك عليه

عدد را محاسبه و چاپ كند.

Page 42: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

حلقه هاي تودرتو

در هايي كه تا حال بكار برديم، فقط شامل يك حلقه بودند. الگوريتمصورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چند حلقه

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

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

Page 43: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

هاي تودرتو به ازاي يكبار تكرار حلقه اوليه، حلقه داخلي به اندازه در حلقه

بار تكرار شود وnشود. در كل اگر حلقه اوليه مقدار نهايي خود تكرار مي

بار، در اينصورت كل حلقه : m حلقه داخلي mn

بار تكرار خواهد شد.

Page 44: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

توان بصورت زير نشان داد: هاي تودرتو را مي فلوچارت حلقهi 1

if j<=m then No

حلقه

j j+1

yes

.

.

.

if i<=n then

j 1

مجموعه دستورات و جايگزيني ها

مجموعه دستورات و جايگزيني ها

i i+1

A

A

yes

No اتمام كار حلقه هاي تو در تو

Page 45: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

I انديس حلقه اول Nورودي

factمحاسبه فاكتوريل

j انديس حلقه داخلي Sumمجموع

را از ورودي دريافGت كرده، مجموع سري Nمثال : فلوچارتGي رسGم نمائيGد كGه زير را محاسبه نمايد:

!!! .... NNS 3

3221

Page 46: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

i 2sum 1

A

if j<=i No

fact fact*jyes

if i<=N

fact 1j 2

i i+1

yes

No

Read(N)

End

sum sum+i/fact

Aj j+1

Write(sum)

Page 47: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

تمرينات آخر فصل

عدد از ورودي دريافت كرده تعداد اعداد اول N- فلوچارتي رسم نمائيد كه 1و كامل را شمرده در خروجي چاپ نمايد.

را از ورودي خوانده مقدار سري زير را N , X- فلوچارتي رسم نمائيد كه 2محاسبه كند:

!!! .... Nxxx nS 42

2 41

Page 48: دانشگاه كردستان دانشكدة فني و مهندسي گروه كامپيوتر

- فلوچارتGي رسGم نمائيGد كGه عددي را از ورودي دريافت كرده مقلوب عدد را 3محاسبه و در خروجي چاپ كند.

GG فلوچارتGي رسGم كنيGد كGه تاريGخ تولGد شخصGي را از ورودي خوانده، سGن شخص 4را با تاريخ روز، محاسبه نموده در خروجي چاپ كند.

كGه 5 نمائيGد رسGم فلوچارتGي -(m>n )N ,M سري كرده دريافGت ورودي از را را توليد كرده، در خروجي چاپ كند.N ,Mفيبوناچي بين