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‬‬
‫‪A10‬‬
‫‪B20‬‬
‫‪C A+B‬‬
‫چاپ مقدار ‪C‬‬
‫پانان‬
‫‪9‬‬
‫انواع مالت مورد استفاده در الگوریتم ها‬
‫•‬
‫•‬
‫•‬
‫•‬
‫مالت شر ی‬
‫مالت عملیاتی ( نا محاسباتی)‬
‫مالت ورودی ‪ /‬خروجی‬
‫مالت توضیحی‬
‫‪10‬‬
‫متال‬
‫• الگوریتمی بنویسید که اعداد زوج دو رقمی را چاپ کند‪.‬‬
‫(می دانیم که کوچکترنن عدد زوج دو رقمی ‪ 10‬و اعداد زوج به اندازه ‪ 2‬واحد از هم فاصله دارند)‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫شروع‬
‫‪J  10‬‬
‫‪ J‬را چاپ کن‬
‫‪JJ+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‬‬
‫‪JJ+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‬را بگير‬
‫‪S0‬‬
‫‪S = 1+2+3+ …+N‬‬
‫‪I1‬‬
‫‪S S + I‬‬
‫‪II+1‬‬
‫بله‬
‫‪I <= N‬‬
‫خير‬
‫‪S‬‬
‫پانان‬
‫‪19‬‬
‫مثال‬
‫شروع‬
‫متال‪ :‬با دریافت ‪ N‬از ورودی ‪،‬‬
‫فاکتوریل آنرا محاسبه و چاپ‬
‫کند‪.‬‬
‫‪I1‬‬
‫‪N! = 1*2*3*….*(N-1)*N‬‬
‫‪PP*I‬‬
‫‪ N‬را بگير‬
‫‪P1‬‬
‫‪II+1‬‬
‫بله‬
‫‪I <= N‬‬
‫خير‬
‫‪P‬‬
‫پانان‬
‫‪20‬‬
‫مثال‬
‫•‬
‫شروع‬
‫عدد بیعی ‪ N‬را دریافت کند‬
‫و معين کند که ‪ N‬عددی اول‬
‫است نا خير؟‬
‫‪N‬‬
‫‪I2‬‬
‫‪R  N MOD I‬‬
‫بله‬
‫‪R=0‬‬
‫خير‬
‫‪ N‬اول نیست‬
‫‪II+1‬‬
‫‪I< N‬‬
‫بله‬
‫خير‬
‫‪ N‬اول است‬
‫پانان‬
‫‪21‬‬
‫شروع‬
‫مثال‬
‫•‬
‫‪N‬‬
‫عدد بیعی ‪ N‬را دریافت کند و‬
‫معين کند که ‪ N‬عددی کامل‬
‫است نا خير؟‬
‫‪I2‬‬
‫‪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‬‬
‫خير‬
‫‪II+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‬‬
‫‪S0‬‬
‫‪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‬‬
‫‪S0‬‬
‫‪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‬‬
‫‪S0‬‬
‫‪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