آموزش الگوریتم و فلوچارت

در برنامه نویسی رایانه هم دقیقا این موارد حاکم است. شما برای حل یک مسئله و یا (مشکل) باید مرحله به مرحله مثل یک کودک به کامپیوتر یاد بدهید که آن مشکل را چگونه حل کند. در واقع هربرنامه ای که می نویسید باید یک مسئله را حل کند و برنامه ی شما مراحل قدم به قدم را به کامپیوتر نشان می دهد تا آن مسئله را حل کند. به این مراحل قدم به قدم که برای حل (مسئله) به کار گرفته می شوند ، الگوریتم می گویند. برای مثال وقتی که می خواهید برنامه ای بنویسید که فاکتوریل عدد ۷ را محاسبه کند اولا باید بدانید که این یک (مسئله) است و برای هر مسئله ای باید راه حلی به نام الگوریتم به کامپیوتر معرفی نمود. کامپیوتر خود به خود نمی تواند فاکتوریل یک عدد را حساب کند مگر این که فرمول محاسبه ی فاکتوریل یک عدد را با استفاده از یک برنامه به او بدهید.

بنابراین با توجه به مطالب گفته شده یک تعریف جامع و کلی از الگوریتم ذکر می کنیم :

الگوریتم مجموعه دستورالعمل های مشخصی است که مراحل انجام یک کار و یا مسئله را با زبانی دقیق و با جزییات کافی که چگونگی ترتیب کامل عملیات و کارها را ذکر می کند.

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

هنگامی که یک الگوریتم را می نویسید دقت کنید که موارد زیر را حتما رعایت کنید :

۱ – آغاز و پایان الگوریتم به طور دقیق مشخص باشد.

۲- مراحل دارای جزییات کافی باشند.

۳- مراحل با زبانی دقیق نوشته شوند. مثلا عبارت “حدود ظهر است” برای کامپیوتر نامفهوم است باید دقیق ذکر شود که مثلا “ساعت ۱۱:۵۲ است”.

۴- مراحل به ترتیب و درست نوشته شوند.

الگوریتمی که دارای ویژگی های فوق باشد الگوریتم درستی است و برای کامپیوتر به طور کامل قابل ترجمه و تفهیم است.

لازم است بدانید که هر الگوریتم دارای سه بخش اصلی است : آغاز – دستورالعمل ها – پایان  که ترتیب این سه جزء مهم است.

انواع دستورالعمل ها :

۱- دستورالعمل های محاسباتی و انتسابی : در این نوع دستورالعمل ها می توانید مقداری را به یک متغیر نسبت دهید و یا عملیات محاسباتی را انجام دهید.

مثلا دستور (first = hello) مقدار hello را به متغیر first نسبت می دهد. و یا دستور (sec = 2*5) ابتدا عدد ۲ را در ۵ ضرب می کند و سپس آن را در متغیر sec قرار می دهد.

۲- عبارات توضیحی : برای اضافه کردن توضیح به برنامه و یا الگوریتم استفاده می شود. که برای جداکردن آن از دستورالعمل ها در داخل پرانتز قرار می گیرد.

۳- دستورالعمل های شرطی : بوسیله ی این دستورالعمل ها می توان شرطی را بررسی کرد در صورتی که آن شرط درست باشد عبارت بعد از آن اجرا می شود. برای مثال دستور “اگر ۲>3 باشد آنگاه چاپ کن درست است ” تنها در صورتی عبارت “درست است” را چاپ می کند (در برنامه نویسی معمولا منظور از چاپ کردن نمایش در صفحه ی نمایش است) که ۳ از ۲ بزرگتر باشد و چون این عبارت همیشه درست است در نتیجه همواره در هنگام اجرای برنامه عبارت “درست است” چاپ می شود.

۴- دستورالعمل های خروجی : به صورت “چاپ کن مقدار موردنظر” مورد استفاده قرار می گیرد.

——————————————————————————–

حال با استفاده از مطالب ذکر شده یک مسئله طرح می کنیم و الگوریتم و یا شبه کد آن را می نویسیم :

مثال : الگوریتمی بنویسید که دوعدد را بگیرد و آن ها را با هم جمع کند و سپس حاصل جمع آن ها را در خروجی نمایش دهد.

الگوریتم موردنظر به صورت زیر خواهد بود :

۱- شروع

۲- دو عدد a,b را بگیر

۳- S = a + b

4- S را چاپ کن

۵- پایان

توضیح : همان طور که در الگوریتم بالا می بینید مرحله به مرحله و قدم به قدم راه حل مسئله نوشته شده است. در خط ۱ برنامه شروع شده و در خط ۵ پایان یافته است. (دو مرحله ی اصلی اول و سوم) از خطوط ۲ تا ۴ دستورالعمل ها و کدها نوشته شده اند (دومین مرحله ی اصلی) . در خط ۲ الگوریتم ۲ عدد دلخواه a و b را می گیرد و در آن ها قرار می دهد. سپس در مرحله ی ۳ مجموع دو عدد a و b را به S نسبت می دهد یعنی در S قرار می دهد و در پایان مرحله ی ۴ S را که شامل مجموع دو عدد a و b است چاپ می کند و مسئله به همین راحتی حل می شود.

——————————————————————————–

اما راستی چرا می گوییم که الگوریتم در بین همه ی زبان های برنامه نویسی مشترک است ؟

به این دلیل که کافی است با دستورات زبان برنامه نویسی موردنظر خود آشنا باشید و فقط عبارات فارسی موجود در الگوریتم بالا را به زبان برنامه نویسی موردنظر ترجمه کنید، کامپیوتر برنامه ی موردنظر شما را اجرا خواهد کرد و مجموع دو عدد را برای شما چاپ خواهد کرد.

امیدوارم در این بخش از آموزش با الگوریتم آشنا شده باشید. در بخش بعدی مراحل پیشرفته تر و مثال های پیچیده تری را مطرح خواهیم کرد.

در جلسه ی قبل تعریف و مفهومی لز الگوریتم و انواع دستورالعمل ها و ویژگی های یک الگوریتم استاندارد و خوب را مطرح کردیم و در پایان مثالی را جهت تفهیم بیشتر مطرح کردیم.حال در این جلسه ضمن حل بیشتر مثال ها و الگوریتم ها سعی می کنیم تعدادی از مفاهیم و دستورالعمل های کاربردی در الگوریتم را در ضمن مثال ها بررسی کنیم.

مثال ۱: الگوریتمی بنویسید که طولی را برحسب سانتی متر از کاربر گرفته و آن را تبدیل به متر کند.

حل: ابتدا به الگوریتم آن توجه کنید:

۱-شروع

۲- a را بگیر

۳- a = a * 100

4- a را چاپ کن.

۵- پایان

توضیح: تنها موردی که ممکن است نیاز به توضیح داشته باشد خط سوم است. این یک ویژگی در الگوریتم و به تبع زبان های برنامه نویسی است.زبان های برنامه نویسی این ویژگی را به متغیرها می دهند که در طول اجرای برنامه هربار مقدار جدیدی را بپذیرند و مقادیر قبلی جای خود را به مقادیر جدید بدهند. در خط ۳ از این ویژگی استفاده کرده ایم. ابتدا عدد a را که توسط برنامه از کاربر گرفته شده است را ضرب در ۱۰۰ کرده سپس آن را مساوی a قرار می دهیم تا جای گزین مقدار قبلی a یعنی عدد گرفته شده توسط کاربر شود. البته در این الگوریتم هیچ نیازی به قرار دادن a * 100 در همان متغیر a نداشتیم و می توانستیم این مقدار را در یک متغیر دیگر مانند b قرار دهیم و سپس در خط ۴ دستور می دادیم که b را چاپ کند. اما در بعضی از الگوریتم ها استفاده از این ویژگی ضروری است و بدون استفاده از این ویژگی حل مسئله امکان پذیر نیست. در ادامه چنین مثال هایی را خواهید دید.

اما قبل از شروع مثال های دیگر باید با یک دستورالعمل بسیار مهم و پر کاربرد در الگوریتم و فلوچارت آشنا شوید:

چگونگی ایجاد حلقه ی تکرار و استفاده از آن در حل مسائل:

در بسیاری از برنامه ها شما مجبور هستید که دستورالعملی را چندین بار به صورت محدود و یا نامحدود تکرار کنید. در این صورت برای انجام این کار الگوریتم و فلوچارت راه ساده ای را به شما پیشنهاد می کند و آن ایجاد حلقه ی تکرار است. اهمیت حلقه های تکرار در مثال های زیر بیش از پیش برای شما آشکار خواهد شد. ایجاد حلقه ی تکرار بدین صورت است به عنوان مثال شما مجموعه ای از دستورالعمل ها را از خط ۱۰۰ تا ۱۰۵ برنامه ی فرضی خود نوشته اید و در خط ۱۰۵ نیاز دارید که در صورت برقراری یک شرط خاص (یا با دستورالعمل اگر مشخص می شود) و یا تعداد دفعات تکرار دلخواه خطوط ۱۰۰ تا ۱۰۵ دوباره اجرا شوند. این خطوط تا زمانی که شما شرطی برای بیرون آمدن از حلقه ی تکرار نگذارید و یا تعداد دفعات آن را محدود نکنید ادامه خواهند یافت. برای برقراری حلقه کافی است در خط ۱۰۵ برنامه ی فرضی خود عبارت (برگرد به ۱۰۰) را بنویسید و برنامه به خط ۱۰۰ برگشته و در صورتی که دوباره به ۱۰۵ برود بازهم ارجاع به خط ۱۰۰ داده می شود و در صورتی که شرطی برای نقض این حلقه قرار ندهید، حلقه تا بی نهایت ادامه خواهد یافت (این علم موجب متوقف شدن برنامه می شود و اگر الگوریتمی شامل چنین حلقه ای باشد جزو الگوریتم های استاندارد و درست نیست!) به مثال های بعدی که از حلقه ی تکرار استفاده شده است دقت کنید.

مثال ۲: الگوریتمی بنویسید که اعداد ۱ تا ۱۰۰۰ را چاپ کند.

توضیح: دقت کنید فردی که این ذهنیت برایش پیش بیاید که به راحتی و به صورت دستی می توانیم به کامپیوتر بگوییم  (اعداد ۱،۲،۳،۰۰۰،۱۰۰۰ را چاپ کن) و یا اینکه کلیه اعداد را بنویسیم و در پایان دستور نمایش آن را صادر کنیم راه حل منطقی و درستی به نظر نمی آید. و اصولا راه حل اول اصلا امکان پذیر نیست چون گفتیم که یک الگوریتم باید کاملا مشخص باشد و سه نقطه (۰۰۰) اصلا برای رایانه مفهومی ندارد. ولی راه حل دوم با صرف وقت زیاد (نوشتن اعداد از ۱ تا ۱۰۰۰) امکان پذیر است اما تنها در صورتی که به ما نگویند که الگوریتمی بنویسید که اعداد ۱ تا ۱۰۰۰۰۰۰۰۰۰۰ را چاپ کند !!!

خوب همان طور که حدس زده اید تنها راه منطقی و استاندارد برای حل این مسئله و نوشتن الگوریتم آن استفاده از حلقه ی تکرار است. ابتدا به الگوریتم و سپس به توضیح آن دقت کنید:

۱-شروع

۲- عدد ۱ را در a قرار بده (یا اینکه a=1)

3- a را چاپ کن.

۴- a+1 را در a قرار بده. (یا اینکه a=a+1)

5- اگر a<1001 باشد آنگاه برگرد به خط ۳ در غیراین صورت برو به ۶

۶- پایان.

توضیح: الگوریتم را باید به دقت بررسی کنیم. و حتما ابهاماتی برای شما پیش آمده است. الگوریتم در خط ۱ شروع شده و در خط ۶ پایان می یابد. در خط ۲ با یک تیر دو نشان زده ایم. اول اینکه متغیر a را تعریف کرده ایم ثانیا عدد ۱ را به آن نسبت داده ایم. پس حال اگر برنامه عدد a را چاپ کند ، ۱ را نمایش خواهد داد.پس خط ۳ عدد ۱ را چاپ می کند. در مورد خط ۴ باید توجه کنید که از ویژگی که در مثال ۱ گفته شد استفاده کرده ایم یعنی یک مقدار جدید با استفاده از خود متغیر a به صورت a+1 ایجاد کرده و دوباره در a قرار داده ایم. این عمل موجب جایگزین شدن مقدار جدید به جای مقدار قبلی در متغیر a می شود.ابتدا a که اکنون شامل عدد ۱ است را با ۱ جمع کرده (۲) و سپس دوباره در a قرار می دهیم. این عمل باعث جایگزین شدن مقدار ۲ به جای ۱ در متغیر a می شود. پس بعد از پایان خط ۴ ، متغیر a شامل عدد ۲ خواهد بود. حال به سراغ  خط اصلی یعنی خط ۵ می رویم. در خط ۵ یک شرط با عبارت شرطی (اگر… آنگاه…درغیراینصورت…)چک می شود. این عبارت ، یعنی (اگر a<1001 باشد آنگاه برگرد به ۳) یک حلقه ی تکرار بین خطوط ۳ تا ۵ ایجاد می کند. یعنی تا زمانی که a (که در هر بار اجرای حلقه یک واحد به آن اضافه می شود) کوچکتر از ۱۰۰۱ باشد حلقه اجرا خواهد شد و زمانی که a برابر ۱۰۰۱ باشد ، ۱۰۰۱ چاپ نشده و برنامه شرط در غیر اینصورت را اجرا خواهد کرد. دقت کنید که نیازی به ذکر قسمت (درغیراینصورت) نداشتیم. چون در صورت درست نبودن شرط برنامه خود به خود به خط بعدی منتقل می شد و برنامه در خط ۶ پایان می پذیرفت. اما در مورد اینکه چرا عدد ۱۰۰۱ را نوشته ایم باید یک بار برنامه را همانند رایانه اجرا کنیم. فرض کنید عدد a به ۹۹۹ رسیده است و خط ۳ را اجرا کرده و عدد ۹۹۹ را نمایش داده است. حال در خط چهارم مقدار a به ۱۰۰۰ می رسد. ما خط ۵ را به صورت می توانستیم بنویسیم تا عدد ۱۰۰۰ را نیز چاپ کند ، یکی a<1001 و دیگری a<=1000 به معنای a کوچکتر یا مساوی ۱۰۰۰ است.

حال سعمی می کنیم یک مثال نسبتا سخت تر از مثال ۲ را بررسی کنیم. امیدوارم استقبال کنید.

مثال ۳: الگوریتمی بنویسید که یک عدد را از کاربر گرفته و فاکتوریل آن را محاسبه و نمایش دهد.

بدون هیچ توضیحی حلقه ی تکرار مربوطه و الگوریتم را نوشته و سپس در مورد آن بحث می کنیم:

۱- شروع

۲- عدد a را بگیر.

۳- قرار بده n=1

4- اگر a-n>=1 و n=1 آنگاه قرار بده b=(a-n)*a

5- اگر a-n>=1 و n>1 آنگاه قرار بده b=(a-n)*b

6- قرار بده n=n+1

7-اگر a-n>=1 آنگاه برگرد به خط ۴

۸- عدد b را چاپ کن.

۹- پایان

توضیح: واضح است که برنامه در خط ۱ شروع و در خط ۹ پایان می یابد. همان طور که دقت می کنید خطوط ۴ تا ۷ برنامه تشکیل یک حلقه را می دهند و تا زمانی که شرط خط ۷ نقض نشود برنامه ادامه خواهد یافت. در خط ۲ برنامه عددی دلخواه را از کاربر می گیرد و در خط ۳ متغیر عددی n را تعریف می کند و به آن مقدار ۱ را نسبت می دهد. خط های بعدی باید به دقت بررسی شوند. در خط ۴ و ۵ دو شرط مشابه تعریف می شوند و تنها تفاوت آن ها در ۱ بودن یا نبودن متغیر n است که در شرط ۴ اگر n=1 باشد (که همواره برای اولین بار این شرط بررسی می شود و سپس در برگشت های بعدی حلقه شرط ۵ بررسی می شود) متغیر دیگری به نام b تعریف می کند و یک عدد کمتر از a را در a ضرب کرده و در b قرار می دهد. و در خط ۷ هم حلقه کامل می شود.

برای بررسی بهتر الگوریتم یک عدد فرضی را در نظر می گیریم و تمام مراحل الگوریتم را مانند رایانه بر روی آن انجام می دهیم.به عنوان مثال کاربر عدد ۵ را وارد می کند و برنامه هم طبق دستورالعمل ما در خط ۲ این عدد را به متغیر a نسبت می دهد. در خط ۳ متغیر n تعریف شده و مقدار ۱ را می گیرد. مسلما در این مرحله شرط خط ۴ درست است چرا که a-n (که چون n=1 و a=5 است) برابر ۴ بوده و بزگتر از ۱ است پس حاصل a-n که برابر ۴ است در a یعنی ۵ ضرب می شود و در متغیر b قرار داده می شود تا مقدار اولیه ی متغیر a که در مراحل بعدی مورد نیاز است دچار تغییر نشود. در این مرحله چون n=1 است واضح است که خط ۵ اجرا نمی شود و در خط ۶ یک عدد به مقدار n اضافه می شود و تبدیل به ۲ می شود و چون a-n که در اینجا ۲-۵=۳ است .و بزرگتر از ۱ پس خط ۷ نیز دزست بوده و برنامه به خط ۴ بر می گردد (البته می توانید به خط ۵ ارجاع بدهید چون مطمئن هستیم عددی که بعد از ۱ در n قرار می گیرد چون طبیعی است بزگتر از ۱ خواهد بود) حال a-n برابر ۳ و n>1 است پس خط ۵ اجرا می شود یعنی مقدار a-n که حالا ۳ است در عدد قبلی b که ۵*۴=۲۰ است ضرب می شود و در b قرار می گیرد. پس b اکنون شامل عدد ۶۰ است. و سپس n=3 می شود و حلقه به همین منوال اط خط ۴ تکرار خواهد شد تا جایی که n=5 شود. در این صورت a-n برابر صفر خواهد شد (چون عدد گرفته شده ۵ بود) و شرط های ۴ و ۵ و تبع ۷ نقض می شوند و برنامه از حلقه خارج می شود و خط ۸ اجرا شده و عدد نهایی که در b قرار گرفته است نمایش داده می شود و برنامه توسط خط ۹ به پایان می رسد و خروجی تحویل کاربر داده می شود.

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


مطالب مشابه :


نمونه سوالات الگوريتم و فلوچارت

نمونه سوالات الگوريتم و الف)فلوچارت ب)جملات شرطي




نمونه سوالات الگوریتم با جواب

نمونه سوالات الگوریتم و فلوچارت. نمونه سوالات الگوریتم. الگوریتمی بنویسید که یک عدد به




نمونه سوالات الگوریتم و فلوچارت

نمونه سوالات الگوریتم و فلوچارت نمونه سوالات الگوریتم و فلوچارت | سوالات الگوریتم و




نمونه سوالات الگوریتم و فلوچارت

به nkp خوش آمدید - نمونه سوالات الگوریتم و فلوچارت - تمرین و تکرار-برای تازه شدن دیر نیست




دریافت نمونه سوالات الگوریتم فلوچارت

دریافت نمونه سوالات الگوریتم فلوچارت. دریافت نمونه سوال الگوریتم بیست و نهم بهمن




نمونه سوال الگوریتم با جواب

نمونه سوالات الگوریتم و فلوچارت. نمونه سوال الگوریتم توانند سوالات مشکلات و نظرات




الگوریتم و فلوچارت

دانلود کتاب الکترونیکی الگوریتم و فلوچارت. دانلود سوالات رشته کامپیوتر




آموزش الگوریتم و فلوچارت

در این صورت برای انجام این کار الگوریتم و فلوچارت راه ساده ای را به شما نمونه سوالات و




دانلود نمونه سوالات الگوریتم با جواب

نمونه سوالات الگوریتم و فلوچارت. دانلود نمونه سوالات الگوریتم با




برچسب :