BY: Ghasem Mohammadi
_دانشگاه كردستاندانشكدة فني و
مهندسيگروه كامپيوتر
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
Session 3Algorithms
آشنايي با الگوريتم
Algorithm الگوريتم ها
هدفهاي كلي
اجزاء الزم براي حل مسئلهشناخت شناخت حل مسئله و ارائه الگوريتم
بررسي صحت الگوريتم
هدفهاي رفتاري
.الگوريتمي را براي حل مسئله ارائه دهد
.الگوريتم هاي مختلف براي يک مسئله را مقايسه کند
. شرط ها و حلقه ها را در الگوريتم بکار ببرد
:دانشجو پس از مطالعه اين فصل بايد بتواند
انس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ا كار انجام روش
نامند. مي
تعريف الگوريتمه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ئله مي مجموعهرا بايد دارا باشد:
دقيق باشد .جزئيات كامل حل مسئله را داشته باشد پذير باشد.پايان
مراحل الگوريتم
كه بيابي�م(. )ي�ا كني�م را مشخ�ص آ�ن مس�ئله الگوريت�م باي�د ي�ك مس�ئله ح�ل براي ناميده مي آ�ن مس�ئله براي الگوريت�م الگوريتم اص�طالحاً طراح�ي شود. در طراح�ي
كنند: معموالً سه مرحله زير را از هم جدا مي
هاخواندن دادهانجام محاسباتهاخروجي
: الگوريتمGي بنويسGيد كGه دو عدد از ورودي دريافت مثال كرده مجموع
دو عدد را محاسبه و چاپ نمايد. انجام محاسبات خروجي ها
وروديها
مجموع دو عدد جمع دو عدد a , b
G شروع 0 1 Gb ,a.را بخوان قرار بده.sum را محاسبه و در Gb , a مجموع 23 Gsum را در خروجي چاپ كن G پايان4
انجام محاسبات ها خروجي وروديها
چاپ مجموع محاسبه مجموع a
چاپ ميانگين محاسبه ميانگين b
مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين سه عدد را محاسبه و چاپ كند.
G شروع0G سه عدد از ورودي بخوان1 قرار بده.Gsum مجموع سه عدد را محاسبه و در 23 Gsum را بر سه تقسيم كرده،در ave.قرار بده 4 Gave , sum.را در خروجي چاپ كن G پايان.5
c
معموال درك يك الگوريتم با شكل راحتGر از نوشتن آن بصورت متن
با مي را الگوريتGGGGGGم لذا باشد. دهند. (نمايش ميflowchartفلوچارت)
شود. هاي زير تشكيل مي فلوچارت از شكل
Begin End
خواندن يا Read
چاپ کردن write
كنند: هاي شروع و پايان: كه معموال از يك بيضي استفاده مي عالمت
شود: االضالع استفاده مي عالمتهاي ورودي و خروجي: كه معموال از متوازي
عالمتهاي محاسباتي و جايگزيني: براي نمايش دستورات جايگزيني و محاسباتياز مستطيل استفاده مي كنند:
جايگزين يا محاسبات
.شود عالمت شرط: براي نمايش شرط از لوزي استفاده مي
دار هاي جهت هاي مختلف بهم از فلش عالمت اتصال: براي اتصال شكلكنند. استفاده مي
شرط
Begin
cin<<a<<b<<c;
Sum a+b+c
Ave sum/3
cout>>sum>>ave;
End
فلوچارت مجموع سه عدد
نمايد. مثال: فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا
را دو متغيGر كGه در آنها دو عدد خوانده شده، قرار b , aبراي حGل ايGن مسGئله گيريم. سGپس بGا اسGتفاده از يGك متغيGر كمكGي محتويات اين گيرنGد در نظGر مي مي
كنيم : دو عدد را جابجا مي
12 15
temp
temp
a b
12 15
12
a b
temp
15 15
12
a b
temp
15 12
12
a b
temp
Begin
Read(a,b)
temp a
a b
Write(a,b)
End
b temp
:فلوچارت مسئله باال بصورت زير خواهد بود
تمرينG فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت1
كرده محيط و مساحت آنرا محاسبه و چاپ كند.
اي را از ورودي دريافت كرده، G فلوچارتي رسم نمائيد كه شعاع دايره2محيط و مساحت آنرا محاسبه و چاپ نمايد.
عدد 3 سه كGه كنيGد رسGم فلوچارتGي GGThird , second, first ،كرده دريافت ورودي از را
در را حاصل نموده، جابجGا را آنهGا محتويات خروجي چاپ كند.
G فلوچارتي رسGم نمائيGد كه دو عدد از ورودي دريافت كرده، سپس 4محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.
از 5 را سانتيگراد( برحسGب حرارت )درجGه عددي كGه نمائيGد رسGم فلوچارتGي GGورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.
دستورالعمل هاي شرطي در حGل بسGياري از مسGائل يGا تقريباً تمام مسGائل نياز بGه استفاده از شروط جزء،
شود. همانطور كGه مGا خودمان در زندگGي روزمره با نيازهاي اسGاسي محسGوب ميها سركار داريم. بطور مثال اگر هوا ابري باشد ممكن است چنين سخن اين شرط
بگوييم:
دارم. در غير اگر هوا باراني باشد سپس چتري برمي دارم اينصورت چتر برنمي .
دهند در حالت كلي شرط را بصورت زير نمايش مي :
If شرط ياthen شروط
yes عمل يا اعمال
NOعمل يا اعمال بعدي
: فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، فرد يا زوج بودن آن را مثال تشخيص دهد.
Begin
Read(a)
R a mod 2
Write(‘odd’)
End
if R=0 then
No
yesWrite(‘even’)
Begin
Read(a,b)
max a
Write(max)
End
if b>max
No
yes max b
را مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عددپيدا كرده در خروجي چاپ نمايد.
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
مثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته
:در خروجي چاپ نمايد
باشد نمونه اجراي فلوچارت باال بصورت زير مي :
خروج a b c Min
11 12 11 17 12111111
12345
تمرين- فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده، قدر مطلق1
عدد را در خروجي چاپ كند.
- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت، منفي2 يا صفر بودن عدد را تشخيص داده، در خروجي با پيغام مناسب
چاپ كند.- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، بخشپذيري3
را بررسي نمايد.5 و 3 آن بر G فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي4
هاي آن را محاسبه در خروجي چاپ كند. دريافت كرده، ريشه
حلقه ها بGا عملياتGي روبرو مي شويGم ، كه در حGل بسGياري از مسGائل
نياز بGه تكرار دارنGد و عمGل تكرار آنهGا بGه تعداد مشخصي انجام عدد را محاسبه 100گيرد. فرض كنيGد، بخواهيGم ميانگيGن مي
نمي بنظGر منطقGي اينصGورت در كGه كنيGم، متغير 100رسGد مختلف را از ورودي دريافت كنيم سپس آنها را جمع كنيم.
انواع حلقه ها
حلقه هاي با تکرار مشخص
حلقه هاي با تکرار نا مشخص
حلقه هاي با تکرار مشخص
باشد اين حلقه از اجزاء زير ها تعداد تكرار مشخص مي در اين نوع حلقهشود تشكيل مي :
G انديس حلقه1 G مقدار اوليه براي انديس حلقه2
مقدار افزاينده براي انديس حلقه )معموال يك واحد در هر مرحله( -3G مقدار نهايي )تعداد تكرا حلقه(4
G شرطي براي كنترل تعداد تكرار حلقه5
i 1
if i<=n
yes
No
مجموعه دستورات حلقه
i i+1
اتمام كار حلقه
دهند: ها را غالباً با فلوچارت بصورت زير نمايش مي اين حلقه
را از ورودي دريافت كرده، مجموع nمثال : فلوچارتGي رسGم نمائيGد كGه عدد را محاسبه كند.nاعداد از يك تا
i انديس حلقه
n مقدار نهايي
Begin
Read(n)
I 1 sum 0
if I<=n
yes
No Write(sum)
Endsum sum+I
I I+1
حلقه
:نمونه اجراي فلوچارت باال بصورت زير است
خروجي
N I sum
15 5 1 0 2 13 34 6 5 106 15
1234567
كGه كنيGد فلوچارتGي رسGم : بزرگترين nمثال كرده، دريافGت ورودي از عدد عدد را پيدا كرده در خروجي چاپ نمايد.nمقدار از بين
i انديس حلقه
مقدار نهايي n
بزرگترين Maxمقدار
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
، دو عدد صGحيح مثبت را از ورودي n , xمثال : فلوچارتGي رسGم نمائيGد كGه را محاسبه كند.n به توان xدريافت كرده سپس
انديس حلقه i
n مقدار نهايي nعدد به توان
pow
Begin
i 1 pow 1
if i<=n then
yes
Nowrite(pow)
Endpow pow*xحلقه
Read(n,x)
i i+1
هايي كه تعداد تكرار آنها مشخص نيست )در حلقهC ++ به حلقهwhile مشهورند.(
حلقه ايGن مي در مشخص تكرار تعداد ورودي، بGه توجGه بGا دقيقاً هGا و شود. توان تعداد تكرار حلقGه را بدون ورودي معيGن كرد. ايGن حلقGه هGا فقGط شامل نمي
شود. شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا مي
If شرط ياشروط
محموعه دستورالعملها
و جاگزينها
yes
No
شوند ها بصورت زير نمايش داده مي در حالت كلي اين نوع حلقه :
مثال: فلوچارتGي رسGم كنيGد كGه عددي را از ورودي دريافGت كرده سپس تعداد .ارقام آن را شمرده در خروجي چاپ نمايد
N عدد خوانده شده
countتعداد ارقام
Begin
count 0
if N>0 then
yes
Nowrite(count)
EndN N div 10
حلقه
Read(N)
count count+1
مثال : فلوچارتGي رسGم نمائيGد كGه عددي از ورودي دريافGت كرده، سGري فيبوناچي قبل از آنرا توليد نمايد.
در حالت كلي جمالت سري بصورت:fk=fk-1+fk-2
Nعدد خوانده شده
f3جمله سوم سري
f2 جمله دوم سري
f1 جمله اول سري
Begin
F1 0f2 1
if f3>N then
yes
No End
حلقه
Read(N)
f1 f2f2 f3
f3 f1+f2
f3 f1+f2
write(f3)
تمرين- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، كامل بودن1
هاي عليه آنرا بررسي نمايد. )عدد كامل، عددي است كه مجموع مقسوم آن با خودش برابر باشد.(
جمله سريN را از ورودي دريافت كرده، N- فلوچارتي رسم كنيد كه 2 فيبوناچي را توليد نمايد.
عدد 3 دو كه نمائيGد رسGم فلوچارتGي GGN , M از را مقسوم بزرگتريGن خوانده، دو ورودي مشترك عليه
عدد را محاسبه و چاپ كند.
حلقه هاي تودرتو
در هايي كه تا حال بكار برديم، فقط شامل يك حلقه بودند. الگوريتمصورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چند حلقه
ها بايد دقت بيشتري به خرج دهيم، تا در داخل هم باشيم. در اين نوع حلقههاي نوع اول بصورت تودرتو استفاده كنيم مشكلي پيش نيايد. اگر از حلقه
در اينصورت براي هر حلقه شرط نهايي و انديس اوليه جداگانه بايد تعريف كنيم .
هاي تودرتو به ازاي يكبار تكرار حلقه اوليه، حلقه داخلي به اندازه در حلقه
بار تكرار شود وnشود. در كل اگر حلقه اوليه مقدار نهايي خود تكرار مي
بار، در اينصورت كل حلقه : m حلقه داخلي mn
بار تكرار خواهد شد.
توان بصورت زير نشان داد: هاي تودرتو را مي فلوچارت حلقهi 1
if j<=m then No
حلقه
j j+1
yes
.
.
.
if i<=n then
j 1
مجموعه دستورات و جايگزيني ها
مجموعه دستورات و جايگزيني ها
i i+1
A
A
yes
No اتمام كار حلقه هاي تو در تو
I انديس حلقه اول Nورودي
factمحاسبه فاكتوريل
j انديس حلقه داخلي Sumمجموع
را از ورودي دريافGت كرده، مجموع سري Nمثال : فلوچارتGي رسGم نمائيGد كGه زير را محاسبه نمايد:
!!! .... NNS 3
3221
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)
تمرينات آخر فصل
عدد از ورودي دريافت كرده تعداد اعداد اول N- فلوچارتي رسم نمائيد كه 1و كامل را شمرده در خروجي چاپ نمايد.
را از ورودي خوانده مقدار سري زير را N , X- فلوچارتي رسم نمائيد كه 2محاسبه كند:
!!! .... Nxxx nS 42
2 41
- فلوچارت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فيبوناچي بين
Top Related