0% found this document useful (0 votes)
3 views

lecture_first_alghor

Uploaded by

sajadtaheri494
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

lecture_first_alghor

Uploaded by

sajadtaheri494
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 67

Introduction to Computer

Programming Using C++


‫بخش اول‬

‫ جعفری‬:‫استاد‬

1399 ‫ اول‬:‫سمستر‬
‫‪Algorithms‬‬
‫آشنايي با الگوريتم‬
‫الگوريتم ها‪Algorithm‬‬

‫هدفهاي كلي‬

‫شناخت حل مسئله و ارائه الگوريتم‬


‫شناخت اجزاء الزم براي حل مسئله‬
‫بررسي صحت الگوريتم‬
‫هدفهاي رفتاري‬

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

‫الگوريتمي را براي حل مسئله ارائه دهد‪.‬‬ ‫◼‬

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

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


‫مقدمه‬

‫در زندگي روزمره‪ ،‬انسان با مسائل مختلفي روبروست و براي هر کدام از اين مسنائل‬
‫(حل مشکالت) راه حلي و روشي را بر ميگزيند‪ .‬مسائلي از قبيل راه رفت ‪ ،‬غذا خوردن‪،‬‬
‫خوابيدن و غيره که بشر تقريباً هر روز آنها را پيش روي خود دارد‪.‬‬

‫همه اي مسائل نياز به روشي براي حل کردن دارند مثال راه رفت بايد با ترتيب خاصي‬
‫براي بشنر حنل شنود‪ .‬اصنالالحاً روش‬ ‫و مراحل معيني انجام شود‪ .‬تا مسئله راه رفت‬
‫انجام کار يا حل مسئله را الگوريتم آن مسئله مينامند‪.‬‬
‫تعريف الگوريتم❖‬
‫هر دستورالعملي که مراحل انجام کاري را با زباني دقيق و با جزئيات کافي بيان نمايد بالوريکه ترتيب مراحل‬
‫و شرط خاتمه عمليات در آن کامال“ مشخص شده باشد را الگوريتم گوينند‪ .‬بنه عبنارتي ديگنر‪ :‬الگنوريتم‬
‫مجموعهاي از دستورالعمل ها‪ ،‬براي حل مسئله ميباشد که شرايط زير را بايد دارا باشد‪:‬‬

‫✓ دقيق باشد‬
‫✓ جزئيات کامل حل مسئله را داشته باشد‪.‬‬
‫✓ پايانپذير باشد‪.‬‬
‫❖ مراحل الگوريتم‬

‫براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم)‪ .‬كه اصطالحاً طراحي الگوريتم برراي آن‬
‫مسئله ناميده ميشود‪ .‬در طراحي الگوريتم معموالً سه مرحله زير را از هم جدا ميكنند‪:‬‬

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

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

‫‪a , b‬‬ ‫جمع دو عدد‬ ‫مجموع دو عدد‬

‫‪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‬‬

‫•عالمتهاي ورودي و خروجي‪ :‬که معموال از متوازياالضالع استفاده ميشود‪:‬‬

‫خواندن يا‬ ‫چاپ کردن‬


‫‪Read‬‬ ‫‪write‬‬
‫•عالمتهاي محاسباتي و جايگزيني‪ :‬براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده ميكنند‪:‬‬

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

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

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

‫شرط‬
‫فلوچارت مجموع سه عدد‬
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‬ن فلوچارتي رسم نمائيد که طول و عرض مستاليل را از ورودي دريافت‬
‫کرده محيط و مساحت آنرا محاسبه و چاپ کند‪.‬‬

‫‪2‬ن فلوچارتي رسم نمائيد که شعاع دايرهاي را از ورودي دريافت کرده‪،‬‬


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

‫‪3‬ن فلوچارتي رسنم کنيند کنه سنه عندد ‪ Third , second, first‬را از‬
‫ورودي دريافت کنرده‪ ،‬محتوينات آنهنا را جابجنا نمنوده‪ ،‬حاصنل را در‬
‫خروجي چاپ کند‪.‬‬
‫‪ 4‬ن فلوچارتي رسم نمائيد که دو عدد از ورودي دريافت کنرده‪ ،‬سنپس محتوينات دو عندد را بندون‬
‫استفاده از متغير کمکي جابجا کند‪.‬‬

‫‪ 5‬ن فلوچارتي رسم نمائيد که عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت کرده سنپس آننرا بنه درجنه‬
‫فارنهايت تبديل کند‪.‬‬
‫❖ دستورالعملهاي شرطي‬
‫در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء‪ ،‬نيازهاي اساسي محسوب ميشود‪ .‬همانالور که‬
‫ما خودمان در زندگي روزمره با اي شرطها سرکار داريم‪ .‬بالور مثال اگر هوا ابري باشد ممک است چني سخ بگوييم‪:‬‬

‫اگر هوا باراني باشد سپس چتري برميدارم‪ .‬در غير اينصورت چتر برنميدارم‪.‬‬
‫در حالت كلي شرط را بصورت زير نمايش ميدهند‪:‬‬

‫‪then‬شرط يا شروط ‪If‬‬ ‫‪yes‬عمل يا اعمال‬

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

‫‪Begin‬‬

‫)‪Read(a‬‬

‫‪R‬‬ ‫‪a mod 2‬‬

‫‪yes‬‬
‫‪if R=0 then‬‬ ‫)’‪Write(‘even‬‬

‫‪No‬‬

‫)’‪Write(‘odd‬‬

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

‫‪Begin‬‬

‫)‪Read(a,b‬‬

‫‪max‬‬ ‫‪a‬‬

‫‪if b>max‬‬ ‫‪yes‬‬ ‫‪max‬‬ ‫‪b‬‬

‫‪No‬‬

‫)‪Write(max‬‬

‫‪End‬‬
‫‪Begin‬‬
‫مثال ‪ :‬فلوچارتي رسم نمائيد که سه عدد از ورودي‬
‫دريافت کرده‪ ،‬کوچکتري عدد را يافته`‬
‫)‪Read(a,b,c‬‬ ‫در خروجي چاپ نمايد‪:‬‬
‫‪min‬‬ ‫‪a‬‬

‫‪if b<min then‬‬ ‫‪yes‬‬ ‫‪min‬‬ ‫‪b‬‬

‫‪No‬‬

‫‪if c<min then‬‬ ‫‪yes‬‬ ‫‪min‬‬ ‫‪c‬‬

‫‪No‬‬

‫)‪Write(min‬‬

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

‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‪Min‬‬ ‫خروج‬

‫‪1‬‬ ‫‪12‬‬ ‫‪11‬‬ ‫‪17‬‬ ‫‪11‬‬


‫‪2‬‬ ‫‪12‬‬
‫‪3‬‬ ‫‪11‬‬
‫‪4‬‬ ‫‪11‬‬
‫‪5‬‬ ‫‪11‬‬
‫مثال‪ :‬الگوریتمی بنویسید که اعداد جفت بین ‪ 10‬و ‪ 20‬را یکی یکی تولید و چاپ نماید‪.‬‬
‫در ضمن مجموع آنها را محاسبه و چاپ نماید‪.‬‬
‫مثال‪ :‬الگوریتمی بنویسید که عدد طبیعی ‪ N‬را دریافت و مجموع زیر را محاسبه و چاپ‬
‫نماید‪.‬‬
‫مثال‪:‬‬
‫❖ تمرين‬
‫‪ -1‬فلوچارتي رسم کنيد که عددي را از ورودي دريافت کرده‪ ،‬قدر ماللق‬
‫عدد را در خروجي چاپ کند‪.‬‬

‫‪ -2‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده مثبت‪ ،‬منفي‬


‫يا صفر بودن عدد را تشخيص داده‪ ،‬در خروجي با پيغام مناسب‬
‫چاپ کند‪.‬‬
‫‪ -3‬فلوچارتي رسم نمائيد که عددي را از ورودي دريافت کرده‪ ،‬بخشپذيري‬
‫آن بر ‪ 3‬و ‪ 5‬را بررسي نمايد‪.‬‬
‫‪4‬ن فلوچارتي رسم نمائيد که ضرايب يک معادله درجه دوم را از ورودي‬
‫دريافت کرده‪ ،‬ريشههاي آن را محاسبه در خروجي چاپ کند‪.‬‬
‫❖ حلقهها‬
‫در حل بسياري از مسائل با عملياتي روبرو ميشويم ‪ ،‬که نياز به تکرار دارند و عمنل تکنرار‬
‫آنها به تعداد مشخصي انجام ميگيرد‪ .‬فرض کنيد‪ ،‬بخواهيم اوسط ‪ 100‬عدد را محاسبه کننيم‪،‬‬
‫در اينصورت منالقي بنظر نميرسد که ‪ 100‬متغير مختلف را از ورودي دريافت کننيم سنپس‬
‫آنها را جمع کنيم‪.‬‬
‫انواع حلقه ها‬

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

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


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

‫‪1‬ن انديس حلقه‬


‫‪ 2‬ن مقدار اوليه براي انديس حلقه‬
‫‪ -3‬مقدار افزاينده براي انديس حلقه (معموال يک واحد در هر مرحله)‬
‫‪4‬ن مقدار نهايي (تعداد تکرا حلقه)‬
‫‪ 5‬ن شرطي براي کنترل تعداد تکرار حلقه‬
‫اين حلقهها را غالبا ً با فلوچارت بصورت زير نمايش ميدهند‪:‬‬

‫‪i‬‬ ‫‪1‬‬

‫‪No‬‬
‫‪if i<=n‬‬ ‫اتمام كار حلقه‬

‫‪yes‬‬

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

‫‪i‬‬ ‫‪i+1‬‬
‫مثال ‪ :‬فلوچارتي رسم نمائيد که عدد ‪ n‬را از ورودي دريافت کرده‪ ،‬مجموع اعداد از يک تا ‪ n‬را محاسبه کند‪.‬‬

‫مقدار نهایی ‪n‬‬

‫اندیس حلقه ‪i‬‬


Begin

Read(n)

I 1
sum 0

if I<=n No
Write(sum)

yes
‫حلقه‬
End
sum sum+I

I I+1
‫نمونه اجراي فلوچارت باال بصورت زير است‪:‬‬

‫‪N‬‬ ‫‪I‬‬ ‫‪sum‬‬ ‫خروجي‬

‫‪1‬‬ ‫‪5‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪15‬‬


‫‪2‬‬ ‫‪2‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪6‬‬
‫‪5‬‬ ‫‪5‬‬ ‫‪10‬‬
‫‪6‬‬ ‫‪6‬‬ ‫‪15‬‬
‫‪7‬‬
‫مثال ‪ :‬فلوچارتي رسم کنيد که ‪ n‬عدد از ورودي دريافت کرده‪ ،‬بزرگتري مقندار از بني ‪ n‬عندد را پيندا کنرده در‬
‫خروجي چاپ نمايد‪.‬‬

‫انديس حلقه‬ ‫‪i‬‬

‫مقدار نهايي‬ ‫‪n‬‬

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


Begin

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‬را‬
‫محاسبه کند‪.‬‬

‫‪i‬‬ ‫انديس حلقه‬


‫‪n‬‬ ‫مقدار نهايي‬
‫‪pow‬‬ ‫عدد به توان ‪n‬‬
Begin

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‬‬

‫محموعه دستورالعملها‬
‫و جاگزينها‬
‫مثال‪ :‬فلوچارتي رسم کنيد که عددي را از ورودي دريافت کرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد‪.‬‬

‫‪N‬‬ ‫عدد خوانده شده‬

‫‪count‬‬ ‫تعداد ارقام‬


Begin

count 0

Read(N)

No
if N>0 then
write(count)

yes

End
N N div 10

‫حلقه‬

count count+1
‫مثال ‪ :‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده‪ ،‬سري فيبوناچي قبل از آنرا توليد نمايد‪.‬‬

‫در حالت کلي جمالت سري بصورت‪:‬‬


‫‪fk=fk-1+fk-2‬‬

‫‪N‬‬ ‫عدد خوانده شده‬


‫‪f1‬‬ ‫جمله اول سري‬
‫‪f2‬‬ ‫جمله دوم سري‬

‫‪f3‬‬ ‫جمله سوم سري‬


Begin

F1 0
f2 1

Read(N)

f3 f1+f2

if f3>N then No End

yes

write(f3)
‫حلقه‬

f1 f2
f2 f3
f3 f1+f2
‫❖ تمرين‬
‫‪ -1‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده‪ ،‬کامل بودن‬
‫آنرا بررسي نمايد‪( .‬عدد کامل‪ ،‬عددي است که مجموع مقسومعليههاي‬
‫آن با خودش برابر باشد‪).‬‬

‫‪ -2‬فلوچارتي رسم کنيد که ‪ N‬را از ورودي دريافت کرده‪ N ،‬جمله سري‬


‫فيبوناچي را توليد نمايد‪.‬‬

‫‪3‬ن فلوچارتي رسم نمائيد که دو عدد ‪ N , M‬را از ورودي خوانده‪ ،‬بزرگتنري‬


‫مقسومعليه مشترك دو عدد را محاسبه و چاپ کند‪.‬‬
‫❖ حلقههاي تودرتو‬

‫الگوريتمهايي که تا حال بکار برديم‪ ،‬فقط شامل يک حلقه بودند‪ .‬در صورتي که در بسياري از مسائل ممک است‬
‫نياز به استفاده از چند حلقه در داخل هم باشيم‪ .‬در اي نوع حلقهها بايد دقت بيشتري به خرج دهيم‪ ،‬تا مشکلي‬
‫پيش نيايد‪ .‬اگر از حلقه هاي نوع اول بصورت تودرتو استفاده کنيم در اينصورت براي هر حلقه شرط نهايي و‬
‫انديس اوليه جداگانه بايد تعريف کنيم ‪.‬‬
‫در حلقههاي تودرتو به ازاي يکبار تکرار حلقه اوليه‪ ،‬حلقه داخلي به اندازه‬

‫مقدار نهايي خود تکرار ميشود‪ .‬در کل اگر حلقه اوليه ‪ n‬بار تکرار شود و‬

‫حلقه داخلي ‪ m‬بار‪ ،‬در اينصورت کل حلقه ‪:‬‬


‫‪nm‬‬
‫بار تکرار خواهد شد‪.‬‬
‫فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد‪:‬‬

‫‪i‬‬ ‫‪1‬‬

‫‪.‬‬
‫‪.‬‬
‫‪A‬‬ ‫‪.‬‬

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


‫‪if i<=n then‬‬

‫‪yes‬‬
‫‪j‬‬ ‫‪1‬‬

‫‪if j<=m then‬‬ ‫‪No‬‬ ‫جموعه دستورات و جايگزيني ها‬

‫حلقه‬ ‫‪yes‬‬
‫مجموعه دستورات و جايگزيني ها‬ ‫‪i‬‬ ‫‪i+1‬‬

‫‪A‬‬
‫‪j‬‬ ‫‪j+1‬‬
‫مثال ‪ :‬فلوچارتي رسم نمائيد که ‪ N‬را از ورودي دريافت کرده‪ ،‬مجموع سري زير را محاسبه نمايد‪:‬‬

‫‪S = 1+‬‬ ‫‪2‬‬


‫!‪2‬‬ ‫‪+‬‬ ‫‪3‬‬
‫!‪3‬‬ ‫‪+ .... +‬‬ ‫‪N‬‬
‫!‪N‬‬

‫‪I‬‬ ‫انديس حلقه اول‬


‫‪N‬‬ ‫ورودي‬
‫‪fact‬‬ ‫محاسبه فاكتوريل‬
‫‪j‬‬ ‫انديس حلقه داخلي‬
‫‪Sum‬‬ ‫مجموع‬
i 2
sum 1

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‬را از ورودي خوانده مقدار سري زير را محاسبه کند‪:‬‬

‫‪S = 1+‬‬ ‫‪+‬‬ ‫‪+ .... +‬‬


‫‪x 2‬‬ ‫‪x4‬‬ ‫‪xn‬‬
‫!‪2‬‬ ‫!‪4‬‬ ‫!‪N‬‬
‫‪ -3‬فلوچارتي رسم نمائيد که عددي را از ورودي دريافت کرده مقلوب عدد را محاسبه و در خروجي چاپ کند‪.‬‬

‫‪ 4‬ن فلوچارتي رسم کنيد که تاريخ تولد شخصي را از ورودي خوانده‪ ،‬س شخص را با تناريخ روز‪ ،‬محاسنبه نمنوده در‬
‫خروجي چاپ کند‪.‬‬

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

You might also like