lecture_first_alghor
lecture_first_alghor
جعفری:استاد
1399 اول:سمستر
Algorithms
آشنايي با الگوريتم
الگوريتم هاAlgorithm
هدفهاي كلي
در زندگي روزمره ،انسان با مسائل مختلفي روبروست و براي هر کدام از اين مسنائل
(حل مشکالت) راه حلي و روشي را بر ميگزيند .مسائلي از قبيل راه رفت ،غذا خوردن،
خوابيدن و غيره که بشر تقريباً هر روز آنها را پيش روي خود دارد.
همه اي مسائل نياز به روشي براي حل کردن دارند مثال راه رفت بايد با ترتيب خاصي
براي بشنر حنل شنود .اصنالالحاً روش و مراحل معيني انجام شود .تا مسئله راه رفت
انجام کار يا حل مسئله را الگوريتم آن مسئله مينامند.
تعريف الگوريتم❖
هر دستورالعملي که مراحل انجام کاري را با زباني دقيق و با جزئيات کافي بيان نمايد بالوريکه ترتيب مراحل
و شرط خاتمه عمليات در آن کامال“ مشخص شده باشد را الگوريتم گوينند .بنه عبنارتي ديگنر :الگنوريتم
مجموعهاي از دستورالعمل ها ،براي حل مسئله ميباشد که شرايط زير را بايد دارا باشد:
✓ دقيق باشد
✓ جزئيات کامل حل مسئله را داشته باشد.
✓ پايانپذير باشد.
❖ مراحل الگوريتم
براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم) .كه اصطالحاً طراحي الگوريتم برراي آن
مسئله ناميده ميشود .در طراحي الگوريتم معموالً سه مرحله زير را از هم جدا ميكنند:
✓خواندن دادهها
✓انجام محاسبات
✓خروجيها
مثال :الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع
دو عدد را محاسبه و چاپ نمايد.
0ـ شروع
1ـ b ,aرا بخوان.
2ـ مجموع b , aرا محاسبه و در sumقرار بده.
3ـ sumرا در خروجي چاپ كن
4ـ پايان
مثال :الگوريتمي بنويسيد که سه عدد از ورودي دريافت کرده مجموع و ميانگي
سه عدد را محاسبه و چاپ کند.
وروديها انجام محاسبات خروجيها
a محاسبه مجموع چاپ مجموع
b محاسبه ميانگي چاپ ميانگي
c
0ن شروع
1ن سه عدد از ورودي بخوان
2ن مجموع سه عدد را محاسبه و در sumقرار بده.
3ن sumرا بر سه تقسيم کرده،در aveقرار بده.
4ن ave , sumرا در خروجي چاپ ک .
5ن پايان.
معموال درك يک الگوريتم با شکل راحتر از نوشت آن بصورت مت
ميباشد .لذا الگوريتم را با فلوچارت( )flowchartنمايش ميدهند.
فلوچارت از شکلهاي زير تشکيل ميشود.
Begin End
جايگزين يا
محاسبات
عالمت اتصال :براي اتصال شکلهاي مختلف بهم از فلشهاي جهتدار استفاده ميکنند.
شرط
فلوچارت مجموع سه عدد
Begin
Read(a,b,c)
Sum a+b+c
Ave sum/3
Write(sum,ave)
End
مثال :فلوچارتي رسم نمائيد که دو عدد از ورودي دريافت کرده سپس محتويات دو عدد را با هم جابجا نمايد.
براي حل اي مسئله b , aرا دو متغير که در آنها دو عدد خوانده شده ،قرار ميگيرند در نظر ميگيريم .سپس با اسنتفاده
از يک متغير کمکي محتويات اي دو عدد را جابجا ميکنيم :
a temp b a b
12 15 12 15
temp
12
temp
a b a b
15 15 15 12
12 12
temp temp
:فلوچارت مسئله باال بصورت زير خواهد بود
Begin
Read(a,b)
temp a
a b
b temp
Write(a,b)
End
❖ تمرين
1ن فلوچارتي رسم نمائيد که طول و عرض مستاليل را از ورودي دريافت
کرده محيط و مساحت آنرا محاسبه و چاپ کند.
3ن فلوچارتي رسنم کنيند کنه سنه عندد Third , second, firstرا از
ورودي دريافت کنرده ،محتوينات آنهنا را جابجنا نمنوده ،حاصنل را در
خروجي چاپ کند.
4ن فلوچارتي رسم نمائيد که دو عدد از ورودي دريافت کنرده ،سنپس محتوينات دو عندد را بندون
استفاده از متغير کمکي جابجا کند.
5ن فلوچارتي رسم نمائيد که عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت کرده سنپس آننرا بنه درجنه
فارنهايت تبديل کند.
❖ دستورالعملهاي شرطي
در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء ،نيازهاي اساسي محسوب ميشود .همانالور که
ما خودمان در زندگي روزمره با اي شرطها سرکار داريم .بالور مثال اگر هوا ابري باشد ممک است چني سخ بگوييم:
اگر هوا باراني باشد سپس چتري برميدارم .در غير اينصورت چتر برنميدارم.
در حالت كلي شرط را بصورت زير نمايش ميدهند:
NO
عمل يا اعمال بعدي
مثال :فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،جفت يا طاق بودن آن را تشخيص دهد.
Begin
)Read(a
yes
if R=0 then )’Write(‘even
No
)’Write(‘odd
End
مثال :فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در خروجي چاپ نمايد.
Begin
)Read(a,b
max a
No
)Write(max
End
Begin
مثال :فلوچارتي رسم نمائيد که سه عدد از ورودي
دريافت کرده ،کوچکتري عدد را يافته`
)Read(a,b,c در خروجي چاپ نمايد:
min a
No
No
)Write(min
End
نمونه اجراي فلوچارت باال بصورت زير ميباشد:
i 1
No
if i<=n اتمام كار حلقه
yes
i i+1
مثال :فلوچارتي رسم نمائيد که عدد nرا از ورودي دريافت کرده ،مجموع اعداد از يک تا nرا محاسبه کند.
Read(n)
I 1
sum 0
if I<=n No
Write(sum)
yes
حلقه
End
sum sum+I
I I+1
نمونه اجراي فلوچارت باال بصورت زير است:
Read(n)
I 2
max a
No
if i<=n then write(max)
yes
End
حلقه Read(a)
yes
if a > max max a
No
i i+1
مثال :فلوچارتي رسم نمائيد که ، n , xدو عدد صحيح مثبت را از ورودي دريافت کرده سنپس xبنه تنوان nرا
محاسبه کند.
Read(n,x)
i 1
pow 1
if i<=n then No
write(pow)
yes
End
حلقه pow pow*x
i i+1
• حلقههايي كه تعداد تكرار آنها مشخص نيست (در C++به حلقه whileمشهورند).
در اي حلقهها با توجه به ورودي ،تعداد تکرار مشخص ميشود .و دقيقاً نميتوان تعداد تکنرار حلقنه را بندون ورودي
معي کرد .اي حلقه ها فقط شامل شرطي هستند که تا زمانيکه برقرار باشد حلقه اجرا ميشود.
در حالت كلي اين نوع حلقهها بصورت زير نمايش داده ميشوند:
No
شرط يا شروط If
yes
محموعه دستورالعملها
و جاگزينها
مثال :فلوچارتي رسم کنيد که عددي را از ورودي دريافت کرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد.
count 0
Read(N)
No
if N>0 then
write(count)
yes
End
N N div 10
حلقه
count count+1
مثال :فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده ،سري فيبوناچي قبل از آنرا توليد نمايد.
F1 0
f2 1
Read(N)
f3 f1+f2
yes
write(f3)
حلقه
f1 f2
f2 f3
f3 f1+f2
❖ تمرين
-1فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده ،کامل بودن
آنرا بررسي نمايد( .عدد کامل ،عددي است که مجموع مقسومعليههاي
آن با خودش برابر باشد).
الگوريتمهايي که تا حال بکار برديم ،فقط شامل يک حلقه بودند .در صورتي که در بسياري از مسائل ممک است
نياز به استفاده از چند حلقه در داخل هم باشيم .در اي نوع حلقهها بايد دقت بيشتري به خرج دهيم ،تا مشکلي
پيش نيايد .اگر از حلقه هاي نوع اول بصورت تودرتو استفاده کنيم در اينصورت براي هر حلقه شرط نهايي و
انديس اوليه جداگانه بايد تعريف کنيم .
در حلقههاي تودرتو به ازاي يکبار تکرار حلقه اوليه ،حلقه داخلي به اندازه
مقدار نهايي خود تکرار ميشود .در کل اگر حلقه اوليه nبار تکرار شود و
i 1
.
.
A .
yes
j 1
حلقه yes
مجموعه دستورات و جايگزيني ها i i+1
A
j j+1
مثال :فلوچارتي رسم نمائيد که Nرا از ورودي دريافت کرده ،مجموع سري زير را محاسبه نمايد:
Read(N)
A
if i<=N No Write(sum)
yes End
fact 1
j 2
sum sum+i/fact
if j<=i No
yes
i i+1
fact fact*j
A
j j+1
❖ تمرينات آخر فصل
-1فلوچارتي رسم نمائيد که Nعدد از ورودي دريافت کرده تعداد اعداد اول و کامل را شمرده در خروجي چاپ
نمايد.
-2فلوچارتي رسم نمائيد که N , Xرا از ورودي خوانده مقدار سري زير را محاسبه کند:
4ن فلوچارتي رسم کنيد که تاريخ تولد شخصي را از ورودي خوانده ،س شخص را با تناريخ روز ،محاسنبه نمنوده در
خروجي چاپ کند.
N ,Mرا توليند کنرده ،در -5فلوچارتي رسم نمائيد که (m>n) N ,Mرا از ورودي دريافت کرده سري فيبونناچي بني
خروجي چاپ کند.