1 / 24

مبانی کامپیوتر و برنامه سازی

مبانی کامپیوتر و برنامه سازی. فصل سوم :الگوریتم مدرس : نگین معروفی. 3 الگوریتم. الگوریتم مجموعه محدودی از دستورالعملها است که اگر به ترتیب دنبال شوند موجب انجام کار خاصی می گردند. هر الگوریتم باید دارای شرایط زیر باشد

Download Presentation

مبانی کامپیوتر و برنامه سازی

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. مبانی کامپیوتر و برنامه سازی فصل سوم :الگوریتم مدرس : نگین معروفی

  2. 3 الگوریتم • الگوریتم • مجموعه محدودی از دستورالعملها است که اگر به ترتیب دنبال شوند موجب انجام کار خاصی می گردند. • هر الگوریتم باید دارای شرایط زیر باشد • ورودی : یک الگوریتم می تواند صفر یا چند ورودی داشته باشد که از محیط خارج تامین می گردد. • خروجی : الگوریتم باید یک یا چند کمیت خروجی داشته باشد. • قطعیت : هر دستورالعمل باید واضح و بدون ابهام باشد. • کارایی : هر دستورالعمل باید قابل اجرا باشد. • محدودیت : در تمام حالات، الگوریتم باید پس از طی مراحل محدودی خاتمه یابد.

  3. 3 الگوریتم • در علم کامپیوتر، ما معمولا با یک مسئله مواجهیم که باید آن را حل کنیم. این مسئله می تواند در زمینه های مختلفی همچون علمی، اقتصادی، ریاضی، فنی و ... باشد. • معمولا برای حل یک مسئله، مراحل زیر طی می گردد • تعریف مسئله بصورت جامع و دقیق (شامل تعریف ورودیها و خروجیها) • بررسی راه حلهای مختلف برای حل مسئله • انتخاب مناسبترین راه حل و تهیه یک الگوریتم برای آن • آزمایش الگوریتم با داده های ورودی و اشکالزدایی آن • تبدیل الگوریتم به یک زبان برنامه نویسی کامپیوتری (مانند C یا Pascal) • وارد کردن برنامه به کامپیوتر و تست و اشکالزدایی آن • استفاده از برنامه

  4. 1-3 نحوه بیان الگوریتمها • چگونه می توانیم الگوریتمها را بیان کنیم؟ • الگوریتمها باید برای انسانها قابل فهم و درک باشند و همه بتوانند به راحتی منظور نویسنده الگوریتم را درک کنند • معمولا الگوریتمها به یک زبان طبیعی مانند فارسی یا انگلیسی نوشته می شود. • این مسئله باعث می شود که بعضی ابهامات در درک الگوریتمها پیش آید. • معمولا یکسری از توافقات و تعریفها از قبل بین طراح و خواننده الگوریتم برقرار می گردد. • از آنجا که زبانهای برنامه نویسی مانند C به زبان انگلیسی خیلی نزدیک هستند، بعض از طراحان از ترکیب زبان C و انگلیسی (که به آن کد شبه C می گویند) برای بیان الگوریتم استفاده می کنند • لازم بذکر است که در گذشته از نمودار گردشی (Flowchart) نیز برای بیان الگوریتمها با استفاده از شکلهای استاندارد استفاده می شد، که تنها برای الگوریتمهای کوچک مناسب بود.

  5. 2-3 شروع به کار با الگوریتمها • الگوریتمی بنویسید که ضرایب یک معادله درجه دوم بصورت زیر را دریافت و ریشه های آن را محاسبه و چاپ کند. ax2 + bx + c = 0 • برای حل این مسئله ابتدا باید ضرائب a ، b و c از کاربر دریافت و در خانه های حافظه ذخیره گردند. • برای اینکه بتوانیم بعدا به این خانه های حافظه مراجعه کنیم، به هریک از آنها یک نام نسبت می دهیم. به هریک از این نامها یک متغیر گفته می شود. • دلیل این نامگذاری آنستکه مقادیر ذخیره شده در هریک از این خانه های حافظه می تواند تغییر کند. • گرچه انتخاب نام بعهده خودشماست و می تواند هر چیزی باشد، ولی توصیه می گردد از اسامی بامعنی و متناسب استفاده گردد. این کار سبب می شود که خواندن و درک الگوریتم شما برای سایر افراد نیز ساده گردد. • اکنون به قراردادهای زیر توجه کنید : • برای دریافت اطلاعات از کاربر از دستور بخوان استفاده می گردد. • برای نوشتن اطلاعات در خروجی از دستور چاپ کن استفاده می گردد. • برای انتساب یک مقدار به یک متغیر از علامت ← استفاده می شود.

  6. 2-3 شروع به کار با الگوریتمها • a و b و c را بخوان • delta ← b2 – 4ac • و x1و x2 را چاپ کن توقف کن

  7. 3-3 مکانیزم شرط • مکانیزم شرط هنگامی استفاده می شود که قصد داریم درستی یا نادرستی یک عبارت رابررسی کرده و متناسب با نتیجه بررسی شرط، عملیات خاصی را انجام دهیم و یا از انجام بعضی عملیات صرفنظر کنیم. • شکل کلی این دستور به شکل زیر است اگر (عبارت شرطی) آنگاهدستورات • این دستور به شکل زیر نیز استفاده می شود: اگر (عبارت شرطی) آنگاهدستورات1 درغیر اینصورتدستورات 2

  8. 3-3 مکانیزم شرط a و b و c را بخوان اگر ( a = 0 ) آنگاه چاپ کن ”معادله درجه 2 نیست“ و توقف کن delta ← b2 – 4ac اگر ( delta < 0 ) آنگاه چاپ کن ”معادله جواب ندارد“ درغیراینصورت و و x1 و x2 را چاپ کن توقف کن

  9. 4-3 مکانیزم حلقه تکرار • در بعضی الگوریتمها لازم است که عملیات مشخصی چندین بار تکرار شوند. بعنوان مثال فرض کنید قصد داریم میانگین معدلهای 100 دانشجو را محاسبه کنیم. قطعا 100 بار دستور خواندن و جمع کردن راه حل چندان مناسبی نیست. • راه حل بهتر آنستکه بگونه ای به مجری الگوریتم بگوییم بنحوی عمل خواندن معدل و جمع زدن آنها را 100 بار تکرار کند. • حلقه تکرار مکانیزمی است که مجموعه ای از دستوزات را تا زمانیکه شرط خاصی برقرار باشد تکرار می کند. • حلقه تکرار به دو شکل مورد استفاده قرار می گیرد

  10. 4-3 مکانیزم حلقه تکرار • شرط در ابتدای حلقه که مکانیزم کلی آن به شکل زیر است : تا زمانیکه (شرط مورد نظر) دستوراتa تا bرا تکرارکن … (a . . . … (b • در این حالت ابتدا شرط موردنظر بررسی می گردد؛ درصورتیکه شرط برقرار نباشد به اولین دستور پس از b می رود. اما در صورتیکه شرط درست ارزیابی شود، دستورات شماره a تا b انجام می شوند و سپس مجددا به ابتدای حلقه بازگشته و عملیات فوق را مجددا تکرار می کند.

  11. 4-3 مکانیزم حلقه تکرار • شرط در انتهای حلقه که مکانیزم کلی آن به شکل زیر است : تکرار کن …(a . . . … (b تا زمانیکه (شرط مورد نظر) • در این روش ابتدا دستورات حلقه یکبار انجام می شوند و در پایان حلقه شرط بررسی می گردد. چنانچه شرط برقرار نبود به دستور بعدی می رود و در صورت برقرار بودن شرط، مجددا به ابتدای حلقه باز می گردد.

  12. 4-3 مکانیزم حلقه تکرار • الگوریتمی بنویسید که یک عدد را دریافت و فاکتوریال آن را محاسبه و چاپ کند. N! = 1 × 2 × 3 × … × (N-1) × N • الگوریتم • n را بخوان • 1← i و 1← fact • تا زمانیکهn) ( i ≤ دستورات 5-4 را تکرار کن • fact × i ← fact • i + 1 ← i • fact را چاپ کن • توقف کن

  13. 5-3 آزمایش الگوریتم • n را بخوان • 1← i و 1← fact • تا زمانیکه( i ≤ n) دستورات 5-4 را تکرار کن • fact × i ← fact • i + 1 ← i • fact را چاپ کن • توقف کن n = i = fact = خروجی = 4 4 1 2 3 5 ←اجرای الگوریتم 1 2 6 24 24

  14. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که n عدد را دریافت و حداکثر و حداقل آنها را چاپ کند. • n را بخوان • adad را بخوان • min ← adad و max ← adad • i ← 2 • تا زمانیکه ( i ≤ n ) دستورات 6 تا 8 را تکرار کن • adad را بخوان • اگر ( adad > max) آنگاه max ← adad در غیر اینصورت اگر ( adad < min ) آنگاه min ← adad • i ← i + 1 • max و min را چاپ کن • توقف کن

  15. 6-3 چند الگوریتم نمونه • nرا بخوان • adad را بخوان • min ← adad و max ← adad • i ← 2 • تا زمانیکه ( i ≤ n ) دستورات 6 تا 8را تکرار کن • adad را بخوان • اگر ( adad > max) آنگاه max ← adad در غیر اینصورت اگر ( adad < min ) آنگاه min ← adad • i ← i + 1 • max و min را چاپ کن • توقف کن n = i = adad = max = min = خروجی = 5 6 2 4 3 5 18 39 27 21 6 18 27 39 ←اجرای الگوریتم 18 6 39 6

  16. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که مقدار x و تعداد جملات را دریافت و سپس sin(x) را با استفاده از فرمول زیر تخمین بزند: x و n را بخوان sin ← x و fact ← 1 و xPower ← x وsign ← 1 i ← 1 تازمانیکه ( i < n ) دستورات 5 تا 9 را تکرار کن fact ← fact × 2i × (2i+1) xPower ← xPower × x2 sign ← -1 × sign sin ← sin + sign × (xPower / fact) i ← i + 1 sin را چاپ کن توقف کن

  17. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که برای تعدادی مشترک این اطلاعات را بخواند : شماره حساب، موجودی اولیه، تعداد برداشت یا واریز و سپس برای هر برداشت یا واریز این اطلاعات را دریافت کند: کد عمل (1 = برداشت، 2 = واریز) و مبلغ. در نهایت برای هرمشترک ، شماره حساب و موجودی نهایی را چاپ کند. • n را بخوان • i ← 1 • تا زمانیکه ( i ≤ n) دستورات 4 تا 11 را تکرار کن • shomare و mojodi و tedad را بخوان • j ← 1 • تا زمانیکه ( j ≤ tedad) دستورات 7 تا 9 را تکرار کن • code و mablagh را بخوان • اگر ( code = 1) آنگاه mojodi ← mojodi – mablagh درغیراینصورت اگر ( code = 2 ) آنگاه mojodi ← mojodi + mablagh درغیراینصورت چاپ کن "کد اشتباه است" • j ← j + 1 • shomare و mojodi را چاپ کن • i ← i + 1 • توقف کن

  18. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که معدل و کد جنسیت دانشجویان (پسران=m و دختران= f) یک کلاس را دریافت و در پایان میانگین معدل پسران و میانگین معدل دختران و میانگین معدل کل کلاس را چاپ کند. • n را بخوان • mSum ← 0 و mCount ← 0 و fSum ← 0 و fCount ← 0 • i ← 1 • تا زمانیکه ( i ≤ n ) دستورات 5 تا 7 را تکرار کن • code و average را بخوان • اگر ( code = m ) آنگاه fSum ← fSum + average و fCount ← fCount + 1 در غیراینصورت اگر ( code = m ) آنگاه mSum ← mSum + average و mCount ← mCount + 1 در غیراینصورت چاپ کن "کد اشتباه است" و i ← i – 1 • i ← i + 1 • اگر ( fCount > 0 ) آنگاه fAve ← fSum / fCount • اگر ( mCount > 0 ) آنگاه mAve ← mSum / mCount • totalAverage ← (mSum + fSum) / n • mAve و fAve و totalAverage را چاپ کن • توقف کن

  19. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که برای تعدادی دانشجو، نام و شماره دانشجویی و تعداد دروس را دریافت کند و سپس برای هر دانشجو نمره و تعداد واحد هر درس وی را دریافت و معدل وی را محاسبه نماید. در پایان شماره دانشجویی، نام و معدل دو دانشجوی برتر کلاس را چاپ کند. • n را بخوان • maxAve1 ← -1 و maxAve2 ← -1 • i ← 1 • تازمانیکه ( i ≤ n) دستورات 5 تا 15 را تکرار کن • name و id و tedad را بخوان • sum ← 0 و sumVahed ← 0 • j ← 1 • تازمانیکه ( j ≤ tedad) دستورات 9 تا 12 را تکرار کن • nomre و vahed را بخوان • sum ← sum + nomre × vahed • sumVahed ← sumVahed + vahed • j ← j + 1 • average ← sum / sumVahed • اگر ( average > maxAve1 ) آنگاه maxName2 ← maxName1 و maxId2 ← maxId1 maxAve2 ← maxAve1و maxName1 ← name maxId1 ← id و maxAve1 ← average درغیراینصورت اگر ( average > maxAve2) آنگاه maxName2 ← name و maxId2 ← id و maxAve2 ← average • i ← i + 1 • maxId1 و maxName1 و maxAve1 و maxId2 و maxName2 و maxAve را چاپ کن • توقف کن

  20. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که برای تعدادی شهر ابتدا نام شهر را دریافت و سپس دمای هوا در 24 ساعت گذشته دریافت نماید و میانگین دما را برای هر شهر محاسبه و چاپ نماید. درپایان موارد زیر را چاپ نماید : شهری که از همه گرمتر بوده است شهری که از همه سردتر بوده است تعداد شهرهای سرد (کمتر از 10) ، معتدل (بین 10 تا 30) و گرم (بیشتر از 30) به تفکیک درضمن تعداد شهرها مشخص نیست و در پایان هر شهر سوال می شود که آیا ادامه بدهیم یا خیر؟ • warmDegree ← -100 و coldDegree ← 100 • coldCount ← 0 و warmCount ← 0 و mediumCount ← 0 • تکرار کن • city را بخوان • sum ← 0 و hour ← 1 • تازمانیکه ( hour ≤ 24 ) دستورات 7 تا 9 را تکرار کن • degree را بخوان • sum ← sum + degree • hour ← hour + 1 • sum ← sum / 24 • اگر ( sum > warmDegree) آنگاه warmDegree ← sum و warmCity ← city درغیراینصورت اگر ( sum < coldDegree ) آنگاه coldDegree ← sum و coldCity ← city • اگر ( sum < 10 ) آنگاه coldCount ← coldCount +1 در غیر اینصورت اگر ( sum < 30 ) آنگاه mediumCount ← mediumCount + 1 درغیراینصورت warmCount ← warmCount + 1 • چاپ کن "آیا مایل به ادامه هستید ؟" • answer را بخوان • تا زمانیکه ( answer = ‘yes’ ) • اطلاعات لازم را چاپ کن • توقف کن

  21. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که یک عدد را دریافت و وارون آن را محاسبه و بهمراه خود عدد چاپ کند. مثلا وارون عدد 3872 برابر 2783 می باشد. • adad را بخوان • اگر ( adad < 0 ) آنگاه a ← -adad در غیر اینصورت a ← adad • varoon ← 0 • تازمانیکه ( a > 0 ) آنگاه دستورات 5 تا 7 را تکرار کن • remain ← a mod 10 • a ← a / 10 • varoon ← varoon × 10 + remain • اگر ( adad < 0 ) آنگاه varoon ← -varoon • adad و varoon را چاپ کن • توقف کن

  22. 6-3 چند الگوریتم نمونه • adadرا بخوان • اگر ( adad < 0 ) آنگاه a ← -adad در غیر اینصورت a ← adad • varoon ← 0 • تازمانیکه ( a > 0 ) آنگاه دستورات 5 تا 7 را تکرار کن • remain ← a mod 10 • a ← a / 10 • varoon ← varoon × 10 + remain • اگر ( adad < 0 ) آنگاه varoon ← -varoon • adad و varoon را چاپ کن • توقف کن adad = a = varoon = remain = خروجی = -275 2 27 275 0 ←اجرای الگوریتم 0 -572 57 572 5 2 5 7 -275 -572

  23. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که یک عدد را دریافت و تعیین کند که آیا اول است یا خیر؟ • adad رابخوان • i ← 2 و primeSw ← 1 • تازمانیکه ( i ≤ root and primeSw=1 ) دستورات 5 تا 6 را تکرار کن • اگر ( adad mod i = 0 ) آنگاه primeSw ← 0 • i ← i + 1 • اگر ( primeSw = 1) آنگاه چاپ کن "عدد اول است“ درغیراینصورت چاپ کن "عدد اول نیست" • توقف کن

  24. 6-3 چند الگوریتم نمونه • الگوریتمی بنویسید که یک عدد صحیح مثبت در مبنای 10 را دریافت و سپس آن را به مبنای b ببرد. مبنای b نیز از کاربر دریافت می گردد. • adadو b را بخوان • hasel ← 0 و i ← 0 • تازمانیکه ( adad > 0 ) دستورات 4 تا 7 را تکرار کن • remain ← adad mod b • hasel ← hasel + remain × 10 i • adad ← adad / b (تقسیم صحیح بر صحیح) • i ← i + 1 • hasel را چاپ کن • توقف کن

More Related