Transcript مثال
الگوریتم و فلوچارت
• در زندگي روزمره ،انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل (حل
مشكالت) راه حلي و روش ي را بر ميگزيند .مسائلی از قبيل راه رفتن ،غذا خوردن ،خوابيدن و
غيره كه بشر تقريبا هر روز آنها را پيش روي خود دارد.
• همههه ايههن مسههائل نيههاز بههه روشه ي بهراي حههل كههردن دارنههد مههتال راه رفههتن بايههد بهها ترتيه خاصه ي و
مراحل معيني انجام شود تها مسههله راه رفهتن بهراي بشهر حهل شهود .اصهالالحا بهه انهن مراحهل
قدم به قدم برای حل مسهله را الگوريتم آن مسهله مينامند
• کلمه الگوریتم از نام دانشمند پرآوازه انرانی به نام الخوارزمی گرفته شده است.
1
تعریف الگوریتم
• تعدادی دستورالعمل پشت سرهم که مراحل مختلف کاری را با زبانی
دقیق و با جزئیات کافی بیان نماند بالوریکه ترتیب مراحل و خاتمه
پذیر بودن عملیات در آن کامال“ مشخص شده باشد را الگوریتم
گویند.
2
مراحل الگوريتم
به هراي ح ههل ي ههگ مس هههله باي ههد الگ ههوريتم آن مس هههله را مش ههخص كن ههيم (يه ها
بي ه ههابيم) .ك ه ههه اص ه ههالالحا راا ه ههي الگ ه ههوريتم به ه هراي آن مس ه هههله نامي ه ههده
ميش ههود .در راا ههي الگ ههوريتم معم ههو س ههه مرحل ههه زي ههر را از ه ههم ههدا
ميكنند:
– خواندن دادهها
– انجام محاسبات
– خروجيها
3
کاربرد الگوریتم
• همه ما در ی روز برای انجام کارهای روزمره از روش الگوریتمی( و نا
منالقی) استفاده می کنیم.
– مانند مالالعه کتاب
– تعویض چرخ پنجر شده
– پختن غذا
– پختن کیک و ....
• در واقع برای انجام هر نک از انن کارها ،زم است تعدادی
دستورالعملهای ساده تر را به ترتی مناس ا راء کرده تا به نتیجه
ماللوب برسیم.
4
ا زای اصلی الگوریتم
•
•
•
هر مساله راه حل و الگوریتم خاص خود را دارد.
می توان برای حل نک مساله روشهای گوناگونی را ارائه داد.
اما تمام الگوریتم ها دارای انن ا زاء هستند:
.1نقاله شروع :حل مساله از کجا آغاز می گردد
•
فقط نک نقاله شروع در الگوریتم و ود دارد
.2نقاله پانان :ایی که مراحل حل مساله پانان می پذنرد.
•
•
به هر حال الگوریتم بایستی در نک نقاله خاتمه نابد.
می توان چندنن نقاله پانان برای الگوریتم داشت.
.3دستورالعملها و نا مالت ا رایی
5
روشهای بیان الگوریتم
• الگوریتم را می توان به صورتهای مختلفی بیان کرد:
.1بیان الگوریتم با مالت فارس ی
.2بیان ریاض ی الگوریتم
.3بیان الگوریتم توسط شکلها (فلوچارت)
6
متغير)(Variable
•
•
به خانه ای از حافظه که داده ها و ا العات ورودی نا خروجی و نا ا العات موقت را
در خود نگه می دارد متغير گفته می شود.
مقدار متغير می تواند در ول ا رای الگوریتم تغیير داشته باشد.
0
A
11 1 00 0 01
1
2
1 1 0 1 0 0 0 1
i
N
7
متالی از نک الگوریتم
•
الگوریتم محاسبه و چاپ مجموع دو عدد 10و 20
.1
.2
.3
.4
.5
.6
شروع
عدد 10را در خانه (متغير) Aقرار بده
عدد 20را در خانه Bقرار بده
محتویات خانه های A , Bرا با هم مع کن و در خانه Cقرار بده
مقدار خانه Cرا بعنوان نتیجه چاپ کن
پانان
8
استفاده از بیان ریاض ی
مالت نوشتاری و نی و فهم الگوریتم را
• بیان الگوریتم در قال
دشوار می سازد.
• الگوریتم محاسبه و چاپ مجموع دو عدد 10و 20
.1شروع
.2
.3
.4
.5
.6
A10
B20
C A+B
چاپ مقدار C
پانان
9
انواع مالت مورد استفاده در الگوریتم ها
•
•
•
•
مالت شر ی
مالت عملیاتی ( نا محاسباتی)
مالت ورودی /خروجی
مالت توضیحی
10
متال
• الگوریتمی بنویسید که اعداد زوج دو رقمی را چاپ کند.
(می دانیم که کوچکترنن عدد زوج دو رقمی 10و اعداد زوج به اندازه 2واحد از هم فاصله دارند)
.1
.2
.3
.4
.5
.6
شروع
J 10
Jرا چاپ کن
JJ+2
اگر J <=98است آنگاه به مرحله 3برو
پانان
11
مثال :الگووريتم بووسيو د وه دو عودد از ورودي درياروه ورده مجموو دو عودد را محاسوبه
و چاپ نمايد.
خروجيها
مجمو دو عدد
انجام محاسبات
جمع دو عدد
وروديها
a , b
۱و شرو
۲و b ,aرا بخوان.
۳و مجمو b , aرا محاسبه و در sumقرار بده.
۴و sumرا در خروجي چاپ ن
۵و پايان
12
مثال :الگوريتم بووسي د ه سه عدد از ورودي درياره رده مجمو وم انگين سه
عدد را محاسبه و چاپ ود.
خروجيها
چاپ مجمو
چاپ م انگين
انجام محاسبات
محاسبه مجمو
محاسبه م انگين
وروديها
a
b ,c
۱و شرو
۲و سه عدد از ورودي بخوان
۳و مجمو سه عدد را محاسبه و در sumقرار بده.
۴و sumرا بر سه تقي م رده،در aveقرار بده.
۵و ave , sumرا در خروجي چاپ ن.
۶و پايان.
13
متال
•
الگوریتمی بنویسید که اعداد زوج از 1000تا 2000را تولید کرده و
مجموع آنها را هم محاسبه کند.
.1
شروع
.2
.3
.4
.5
.6
S 0 ، J 1000
Jرا چاپ کن و S S + J
JJ+2
اگر J <= 2000است آنگاه به مرحله 3برو در غير اننصورت مقدار Sرا چاپ کن
پانان
14
نکته
•
اگر بخواهیم مقدار حاصل معی را محاسبه کنیم (مانند متال قبل
که مجموع اعداد زوج از 1000تا )2000
–
–
–
ابتدا متغيری ( مانند )Sدر نظر می گيرنم و مقدار اولیه آن را صفر می گداریم (یعنی اننکه هنوز هیچ
مجموعی را حساب نکرده انم) S 0 ،
سپس تک تک مالتی را که قرار است با هم مع کنیم را تولید کرده ( با کمک نک متغير دنگر ،متال J
در متال قبلی) و با متغير Sمع نموده و حاصل را در Sقرار می دهیم ( در واقع مقدار دند را به حاصل
قبلی می افزانیم – مانند انباره) S S + J ،
در نهانت حاصل مجموع در انن متغير Sقرار می گيرد.
S
J
+
15
ویژگیهای نک الگوریتم خوب
اگر چه نک مساله راه حلهای مختلفی دارد ،مههم نافتن بهترنن راه حل است
• سادگی
–
•
در نظر گررتن تمام حاالت خاص
–
–
•
الگوریتم بتواند در برابر حا ت و شرانط مختلف پاسخ و واب مناسبی ارائه دهد.
بالور متال هنگام حل معادله در ه دوم حالتهای منفی زیر رادنکال را در نظر بگيرد.
روان بودن متون الگوریتم
–
•
حتی ا مکان ساده و عاری از ابهام و پیچیدگی باشد.
دستورالعملها گویا بوده و منظور آنها بسادگی درک شود.
حداقل بودن تعداد دستورات و جمالت
16
انجاد حلقه های تکرار)(Loops
•
•
•
گاهی اوقات برای حل مساله باند نک نا چند مرحله از دستورات را تکرار نمود.
به مراحلی از الگوریتم که ا رای آنها چندنن بار تکرار می شود حلقه ) (Loopو نا حلقه تکرار گفته می شود
بالور کلی حلقه های تکرار از ا زای زیر تشکیل شده است:
–
شمارنده حلقه )(Counter
•
•
–
گام افزایش )(Step
•
–
مقداری که پس از هر بار مراحل حلقه به شمارنده اضافه می شود.
شرط پانانی
•
–
نک متغير کمکی که پیش از شروع حلقه به آن مقدار اولیه داده می شود
از ریق آن می توان تعداد دفعات تکرار حلقه را نشان داد.
مقدار و نا متغيری است که پس از ا رای دستورات حلقه با شمارنده حلقه مقایسه می گردد و
زمان پانان ا رای دستورات حلقه را مشخص می سازد.
بدنه حلقه
•
دستورالعملها و مالتی که عملیات اصلی حلقه را تشکیل می دهند.
17
فلوچارت) (Flowchartنا نمودار گردش ی
•
•
•
فلوچارت ،بیان تصویری الگوریتم با کمک مجموعه ای استاندارد از اشکال
ساده می باشد
فلوچارت نکی از روشهای برقراری ارتباط منالقی بين مراحل مختلف حل
مساله است.
اشکال استاندارد مو ود:
دستورات مقدار دهی و
محاسباتی
خير
تصمیم گيری
دریافت داده
از ورودی
چاپ داده در
خروجی
شروع
پانان
(شرط)
بله
18
فلوچارت
شروع
متال :با دریافت Nاز ورودی،
مجموع زیر را حساب کند.
Nرا بگير
S0
S = 1+2+3+ …+N
I1
S S + I
II+1
بله
I <= N
خير
S
پانان
19
مثال
شروع
متال :با دریافت Nاز ورودی ،
فاکتوریل آنرا محاسبه و چاپ
کند.
I1
N! = 1*2*3*….*(N-1)*N
PP*I
Nرا بگير
P1
II+1
بله
I <= N
خير
P
پانان
20
مثال
•
شروع
عدد بیعی Nرا دریافت کند
و معين کند که Nعددی اول
است نا خير؟
N
I2
R N MOD I
بله
R=0
خير
Nاول نیست
II+1
I< N
بله
خير
Nاول است
پانان
21
شروع
مثال
•
N
عدد بیعی Nرا دریافت کند و
معين کند که Nعددی کامل
است نا خير؟
I2
S 1
R N MOD I
•
عدد کامل است که خودش
برابر با مجموع مقسوم علیه
های کوچکتر از خودش
باشد.
6 1,2,3
6 = 1+2+3
28 1,2,4,7,14
28 = 1+2+4+7+14
18 1,2,3,6,9
18 <> 1+2+3+6+9
بله
S S + I
R=0
خير
II+1
I <= N/2
بله
خير
بله
S=N
خير
Nکامل است
Nکامل نیست
پانان
22
مثال
•
شروع
عدد بیعی Nرا دریافت
کند و مقلوب آنرا در خروجی
چاپ کند.
N
R N MOD 10
Q N DIV 10
•
بالور متال :
R
9527 7259
بله
Q=0
خير
پانان
N Q
23
مثال
•
شروع
عدد بیعی Nرا دریافت
کند و مجموع ارقام آنرا در
خروجی چاپ کند.
N
S0
R N MOD 10
Q N DIV 10
•
بالور متال :
S S+R
90527 9+0+5+2+7
بله
Q=0
خير
S
پانان
N Q
24
مثال
•
شروع
عدد بیعی Nرا دریافت کند و مقدار
سری زیر را بدست آورد.
N
S0
I 1
1
1
1
1
.......
1* 2 2 * 3 3 * 4
)N ( N 1
S
1
)I ( I 1
S S
I I + 1
I<= N
بله
خير
S
پانان
25
مثال
•
شروع
عدد بیعی Nرا دریافت کند و مقدار
سری زیر را بدست آورد.
N
S0
K +1
3
4
5
6
N 2
.......
1* 2 2 * 3 3 * 4 4 * 5
)N ( N 1
I 1
S
I 2
)I ( I 1
*S S K
I I + 1
K-K
I<= N
بله
خير
S
پانان
26
متال :فلوچارتي رسم نمائيد كه سه عدد از ورودي
دريافت كرده ،كوچكترين عدد را يافته و در خروجي چاپ
نمايد:
Begin
)Read(a,b,c
min
a
yes
b
b<min
min
No
yes
c
min
c<min
No
)Write(min
End
نمونه اجراي رلوچارت باال بصورت زير م باشد:
خروج
Min
11
12
11
11
11
c
b
a
17
11
12
1
2
3
4
5
مثال :رلوچارت رسم و د ه nعدد از ورودي درياره رده ،بزرگترين مقدار از بين nعدد را پ دا رده در خروجي چاپ نمايد.
انديس حلقه
i
n
a
Max
مقدار نهاس
عدد ورودی
بزرگترين مقدار
Begin
Read(n,a)
I
max
2
a
Read(a)
yes
if a > max
Max
No
حلقه
i
i+1
yes
if i<=n then
No
write(max)
End
a
مثال :رلوچارت رسم و د ه تعداد و مجمو مقيوم علیه های عدد Nرا مشخص کود
انديس حلقه
k
n
T
DN
مقدار نهاس
مجمو مقيوم علیه ها
تعداد مقيو م علیه ها
Begin
T
DN
K
0
0
1
Read( N )
R
N - k* int (N/k)
yes
R=0
Write( k )
No
T
DN
حلقه
k
k+1
yes
k <= N
No
Write( DN , T )
End
T+k
DN + 1