1.47k likes | 3.61k Views
الگوریتم و فلوچارت. در زندگي روزمره ، انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل ( حل مشكلات) راه حلي و روشي را بر ميگزيند. مسائل ی از قبيل راه رفتن، غذ ا خوردن، خوابيدن و غيره كه بشر ت ق ريباً هر روز آنها را پيش روي خود دارد.
E N D
الگوریتم و فلوچارت • در زندگي روزمره، انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل (حل مشكلات) راه حلي و روشي را بر ميگزيند. مسائلی از قبيل راه رفتن، غذا خوردن، خوابيدن و غيره كه بشر تقريباً هر روز آنها را پيش روي خود دارد. • همه اين مسائل نياز به روشي براي حل كردن دارند مثلا راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود تا مسئله راه رفتن براي بشر حل شود. اصطلاحاً به این مراحل قدم به قدم برای حل مسئله را الگوريتم آن مسئله مينامند • کلمه الگوریتم از نام دانشمند پرآوازه ایرانی به نام الخوارزمی گرفته شده است.
تعریف الگوریتم • تعدادی دستورالعمل پشت سرهم که مراحل مختلف کاری را با زبانیدقیقو با جزئیات کافیبیان نماید بطوریکه ترتیبمراحلو خاتمه پذیر بودن عملیات در آن کاملا“ مشخص شده باشد را الگوریتم گویند.
مراحل الگوريتم براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم). كه اصطلاحاً طراحي الگوريتم براي آن مسئله ناميده ميشود. در طراحي الگوريتم معمولاً سه مرحله زير را از هم جدا ميكنند: • خواندن دادهها • انجام محاسبات • خروجيها
کاربرد الگوریتم • همه ما در طی روز برای انجام کارهای روزمره از روش الگوریتمی( و یا منطقی) استفاده می کنیم. • مانند مطالعه کتاب • تعویض چرخ پنجر شده • پختن غذا • پختن کیک و .... • در واقع برای انجام هر یک از این کارها، لازم است تعدادی دستورالعملهای ساده تر را به ترتیب مناسب اجراء کرده تا به نتیجه مطلوب برسیم.
اجزای اصلی الگوریتم • هر مساله راه حل و الگوریتم خاص خود را دارد. • می توان برای حل یک مساله روشهای گوناگونی را ارائه داد. • اما تمام الگوریتم ها دارای این اجزاء هستند: • نقطه شروع: حل مساله از کجا آغاز می گردد • فقط یک نقطه شروع در الگوریتم وجود دارد • نقطه پایان: جایی که مراحل حل مساله پایان می پذیرد. • به هر حال الگوریتم بایستی در یک نقطه خاتمه یابد. • می توان چندین نقطه پایان برای الگوریتم داشت. • دستورالعملها و یا جملات اجرایی
روشهای بیان الگوریتم • الگوریتم را می توان به صورتهای مختلفی بیان کرد: • بیان الگوریتم با جملات فارسی • بیان ریاضی الگوریتم • بیان الگوریتم توسط شکلها (فلوچارت)
مثالی از یک الگوریتم • الگوریتم محاسبه و چاپ مجموع دو عدد 10 و 20 • شروع • عدد 10 را در خانه (متغیر) A قرار بده • عدد 20 را در خانه B قرار بده • محتویات خانه های A , B را با هم جمع کن و در خانه C قرار بده • مقدار خانه C را بعنوان نتیجه چاپ کن • پایان
استفاده از بیان ریاضی • بیان الگوریتم در قالب جملات نوشتاری طولانی و فهم الگوریتم را دشوار می سازد. • الگوریتم محاسبه و چاپ مجموع دو عدد 10 و 20 • شروع • A10 • B20 • C A+B • چاپ مقدار C • پایان
انواع جملات مورد استفاده در الگوریتم ها • جملات شرطی • جملات عملیاتی ( یا محاسباتی) • جملات ورودی / خروجی • جملات توضیحی
مثال • الگوریتمی بنویسید که اعداد زوج دو رقمی را چاپ کند. (می دانیم که کوچکترین عدد زوج دو رقمی 10 و اعداد زوج به اندازه 2 واحد از هم فاصله دارند) • شروع • J 10 • J را چاپ کن • J J + 2 • اگر J <=98 است آنگاه به مرحله 3 برو • پایان
مثال : الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع دو عدد را محاسبه و چاپ نمايد. خروجيها انجام محاسباتوروديها مجموع دو عدد جمع دو عدد a , b ۱ـ شروع ۲ـ b ,a را بخوان. ۳ـ مجموع b , a را محاسبه و در sum قرار بده. ۴ـ sum را در خروجي چاپ كن ۵ـ پايان
مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع وميانگين سه عدد را محاسبه و چاپ كند. خروجيها انجام محاسباتوروديها چاپ مجموع محاسبه مجموع a چاپ ميانگين محاسبه ميانگين , c b ۱ـ شروع ۲ـ سه عدد از ورودي بخوان ۳ـ مجموع سه عدد را محاسبه و در sum قرار بده. ۴ـ sum را بر سه تقسيم كرده،در ave قرار بده. ۵ـ ave , sum را در خروجي چاپ كن. ۶ـ پايان.
مثال • الگوریتمی بنویسید که اعداد زوج از 1000 تا 2000 را تولید کرده و مجموع آنها را هم محاسبه کند. • شروع • J 1000 ، S 0 • J را چاپ کن و S S + J • J J + 2 • اگر J <= 2000 است آنگاه به مرحله 3 برو در غیر اینصورت مقدار S را چاپ کن • پایان
نکته • اگر بخواهیم مقدار حاصل جمعی را محاسبه کنیم (مانند مثال قبل که مجموع اعداد زوج از 1000 تا 2000) • ابتدا متغیری ( مانند S) در نظر می گیریم و مقدار اولیه آن را صفر می گداریم (یعنی اینکه هنوز هیچ مجموعی را حساب نکرده ایم) ، S 0 • سپس تک تکجملاتی را که قرار است با هم جمع کنیم را تولید کرده ( با کمک یک متغیر دیگر، مثلا J در مثال قبلی) و با متغیر S جمع نموده و حاصل را در S قرار می دهیم ( در واقع مقدار جدید را به حاصل قبلی می افزاییم – مانند انباره)، S S + J • در نهایت حاصل مجموع در این متغیر S قرار می گیرد. S J +
ویژگیهای یک الگوریتم خوب اگر چه یک مساله راه حلهای مختلفی دارد، مهـم یافتن بهترین راه حل است • سادگی • حتی الامکان ساده و عاری از ابهام و پیچیدگی باشد. • در نظر گرفتن تمام حالات خاص • الگوریتم بتواند در برابر حالات و شرایط مختلف پاسخ و جواب مناسبی ارائه دهد. • بطور مثال هنگام حل معادله درجه دوم حالتهای منفی زیر رادیکال را در نظر بگیرد. • روان بودن متـن الگوریتم • دستورالعملها گویا بوده و منظور آنها بسادگی درک شود. • حداقل بودن تعداد دستورات و جملات
ایجاد حلقه های تکرار(Loops) • گاهی اوقات برای حل مساله باید یک یا چند مرحله از دستورات را تکرار نمود. • به مراحلی از الگوریتم که اجرای آنها چندین بار تکرار می شود حلقه (Loop) و یا حلقه تکرار گفته می شود • بطور کلی حلقه های تکرار از اجزای زیر تشکیل شده است: • شمارنده حلقه (Counter) • یک متغیر کمکی که پیش از شروع حلقه به آن مقدار اولیه داده می شود • از طریق آن می توان تعداد دفعات تکرار حلقه را نشان داد. • گام افزایش (Step) • مقداری که پس از هر بار مراحل حلقه به شمارنده اضافه می شود. • شرط پایانی • مقدار و یا متغیری است که پس از اجرای دستورات حلقه با شمارنده حلقه مقایسه می گردد و زمان پایان اجرای دستورات حلقه را مشخص می سازد. • بدنه حلقه • دستورالعملها و جملاتی که عملیات اصلی حلقه را تشکیل می دهند.
شروع دریافت داده از ورودی پایان تصمیم گیری (شرط) چاپ داده در خروجی فلوچارت (Flowchart) یا نمودار گردشی • فلوچارت، بیان تصویری الگوریتم با کمک مجموعه ای استاندارد از اشکال ساده می باشد • فلوچارت یکی از روشهای برقراری ارتباط منطقی بین مراحل مختلف حل مساله است. • اشکال استاندارد موجود: دستورات مقدار دهی و محاسباتی خیر بله
شروع N را بگیر S 0 I 1 S S + I I I + 1 I <= N بله خیر پایان S فلوچارت مثال: با دریافت N از ورودی، مجموع زیر را حساب کند. S = 1+2+3+ …+N
شروع N را بگیر P 1 I 1 P P * I I I + 1 I <= N بله خیر پایان P مثال مثال: با دریافت N از ورودی ، فاکتوریل آنرا محاسبه و چاپ کند. N! = 1*2*3*….*(N-1)*N
شروع N I 2 R N MOD I بله R = 0 I I + 1 بله I < پایان N اول است N اول نیست مثال • عدد طبیعی N را دریافت کند و معین کند که N عددی اول است یا خیر؟ خیر خیر
شروع N I 2 S 1 R N MOD I بله R = 0 S S + I خیر I <= N/2 خیر پایان S = N N کامل است N کامل نیست مثال • عدد طبیعی N را دریافت کند و معین کند که N عددی کامل است یا خیر؟ • عدد کامل است که خودش برابر با مجموع مقسوم علیه های کوچکتر از خودش باشد. • 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 I I + 1 بله بله خیر
شروع N R N MOD 10 Q N DIV 10 بله Q = 0 خیر پایان R مثال • عدد طبیعی N را دریافت کند و مقلوب آنرا در خروجی چاپ کند. • بطور مثال : • 9527 7259 N Q
شروع N S 0 R N MOD 10 Q N DIV 10 S S+R بله Q = 0 خیر پایان S مثال • عدد طبیعی N را دریافت کند و مجموع ارقام آنرا در خروجی چاپ کند. • بطور مثال : • 90527 9+0+5+2+7 N Q
شروع N S 0 I 1 I I + 1 I<= N پایان S مثال • عدد طبیعی N را دریافت کند و مقدار سری زیر را بدست آورد. بله خیر
شروع N S 0 K +1 I 1 I I + 1 K - K I<= N پایان S مثال • عدد طبیعی N را دریافت کند و مقدار سری زیر را بدست آورد. بله خیر
مثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته و در خروجي چاپ نمايد: Begin Read(a,b,c) min a yes b<min min b No yes c<min min c No Write(min) End
نمونه اجراي فلوچارت بالا بصورت زير ميباشد:
مثال : فلوچارتي رسم كنيد كه n عدد از ورودي دريافت كرده، بزرگترين مقدار از بين n عدد را پيدا كرده در خروجي چاپ نمايد. انديس حلقه i مقدار نهاييn عدد ورودی a بزرگترين مقدارMax
Begin Read(n,a) I 2 max a Read(a) yes if a > max Max a No حلقه i i+1 yes if i<=n then No write(max) End
مثال : فلوچارتي رسم كنيد كه تعداد و مجموع مقسوم علیه های عدد N را مشخص کند انديس حلقه k مقدار نهاييn مجموع مقسوم علیه ها T تعداد مقسو م علیه ها DN
Begin T 0 DN 0 K 1 Read( N ) R N - k* int (N/k) yes R = 0 Write( k ) No T T + k DN DN + 1 حلقه k k+1 yes k <= N No Write( DN , T ) End