الگوریتم و فلوچارت دو مبحث مهم و بنیادین در برنامهنویسی هستند که در زندگی روزمره نیز کاربرد دارند. الگوریتم به منزلهی یک نقشهی راه است که حل مسئله را به صورت مرحله به مرحله و متوالی امکانپذیر میکند. فلوچارت (Flowchart) یا روندنما درواقع تعریف گرافیکی و بصری الگوریتم است که در ادامه بیشتر دربارهی آن توضیح میدهیم و به زبان ساده بررسی میکنیم که الگوریتم و فلوچارت چیست؟
فهرست عناوین مقاله
الگوریتم (ALGORTHM) چیست؟ (به زبان ساده)
الگوریتم برگردان لاتین نام دانشمند پرآوازهی ایرانی، ابو جعفر محمد بن موسی خوارزمی (الخوارزمی) است. خوارزمی ریاضیدان، فیلسوف و منجم قرن 9 میلادی بود که به او لقب “پدر علم جبر” را نسبت میدهند. الگوریتمها دنبالهای از دستورالعملها برای حل مسئله یا انجام کار هستند که دقیقا مشخص میکنند در هر مرحله چه عملی باید انجام شود. دستورات آشپزی نوعی الگوریتم در زندگی روزمره هستند؛ به مثال زیر دربارهی الگوریتم مربوط به پخت پیتزا توجه کنید:
1- شروع
2- مشخص کردن نوع پیتزا
3- تهیهی مواد اولیه لازم، اگر مایل به پخت پیتزای سبزیجات هستید مواد لازم در مرحله 5 را تهیه کنید در غیر این صورت فقط مواد مرحله بعدی را تهیه کنید.
4- تهیهی خمیر پیتزا، پنیر پیتزا، سس گوجه فرنگی، قارچ، پپرونی، فلفل دلمهای، گوشت چرخ کرده
5- تهیهی خمیر پیتزا، پنیر پیتزا، اسفناج، بروکلی، زیتون، قارچ، گوجه گیلاسی، فلفل و سس گوجه فرنگی
6- چرب کردن قالب فر با اندکی روغن
7- پهن کردن خمیر پیتزا در قالب فر
8- آغشته کردن خمیر با سس قرمز
9- خرد کردن مواد لازم (مواد مرحله 4 یا 5)
10- ریختن مواد روی خمیر به صورتی که در همه جای خمیر به صورت یکسان پخش شود
11- ریختن پنیر پیتزا روی همهی مواد
12- روشن کردن فر و تنظیم دما
13- قرار دادن پیتزا در فر برای پخت
14- خارج کردن پیتزا پس از زمان مشخص
15- پایان
مشخصههای الگوریتم
همانطور که مشاهده کردید تمام کارهایی که برای پخت پیتزا لازم است انجام شود به صورت مرحله به مرحله در این الگوریتم نمایش دادهشد. در برنامهنویسی نیز تا حدودی به همین صورت با الگوریتمها سروکار داریم تا بدانیم چه چیزهایی به عنوان ورودی نیاز داریم، چه اعمالی و به چه ترتیبی باید روی ورودیها انجام دهیم و در نهایت خروجی ما چه خواهد بود؟ بنابراین هر الگوریتم دارای مشخصههای زیر است:
- شروع و پایان؛
- ورودیها یا مقادیر معلوم که پردازش روی آنها انجام میشود (مانند مواد اولیه در تهیهی پیتزا)؛
- خروجی یا مقادیر مجهول که در واقع هدف الگوریتم خواهند بود؛
- قطعیت: الگوریتم باید خالی از ابهام باشد و با ورودیهای مختلف خروجیهای یکسان تولید کند (در مثال بالا خروجی دو نوع پیتزا بود که مواد اولیهی متفاوتی داشتند)؛
- الگوریتمها با هر زبانی قابل اجرا هستند و در نتیجه به هر زبانی که نوشته شوند خروجی یکسانی خواهند داشت؛
- کامل بودن: الگوریتم باید پایان داشته باشد و برای بینهایت بار بدون ارائهی خروجی تکرار نشود. برای درک بهتر و آشنایی دقیق با مشخصههای الگوریتم، به الگوریتم سادهی زیر برای نمایش حاصل جمع دو عدد که از ورودی دریافت میشود توجه کنید.
انواع الگوریتم
به طور کلی الگوریتمها در سه نوع زیر وجود دارند:
- الگوریتم متوالی (Sequence): در این نوع الگوریتم تمام مراحل به صورت متوالی و پشت سر هم انجام میشود و قید و شرطی در آن وجود ندارد. مانند الگوریتم جمع دو عدد که در بالا مشاهده کردید.
- الگوریتم شعبهای (Branching): نوعی از الگوریتم دارای شرط است و در صورت برقرار بودن هر شرط عملیات مختلفی صورت میگیرد؛ مانند الگوریتم نمایش زوج یا فرد بودن عدد ورودی.
نکته: برای اینکه نشان دهیم یک عدد بر عددی بخش پذیر است یا نه باید باقیماندهی تقسیم اعداد را بررسی کنیم. اگر باقیمانده برابر 0 بود یعنی بخش پذیر است. در برنامه نویسی از عبارت mode برای بخش پذیری استفاده میکنیم. در الگوریتم بالا در مرحلهی سوم مقدار باقیماندهی تقسیم عدد N بر 2 را در متغیری به نام B ریختهایم و در مرحله چهارم بررسی میکنیم که آیا باقیماندهی آن برابر 0 است یا خیر. اگر برابر 0 باشد یعنی عدد بر 2 بخش پذیر است.
- الگوریتم حلقوی (Loop): در این الگوریتم در صورت برقرار بودن شرط ممکن است یک یا چند مرحله تکرار شوند. مانند الگوریتم نمایش اعداد فرد کمتر از 10.
مزایای استفاده از الگوریتم
- الگوریتم یک مسئله را به قطعات کوچک تقسیم میکند.
- نمایش گام به گام الگوریتم درک آن را آسانتر میکند.
- هر مرحله از الگوریتم دستورات واضح و مشخصی دارد که سبب سهولت در انجام عملیات رفع خطا میشود.
- همانطور که گفتیم الگوریتمها مستقل از زبانهای برنامهنویسی هستند که این امر درک آن را برای کسانی که دانش برنامهنویسی ندارند هم ممکن میکند.
معایب استفاده از الگوریتم
- الگوریتم نویسی در ابعاد بزرگ زمانبر است.
- ایجاد حلقه و انشعاب در الگوریتم ممکن است با مشکلاتی همراه باشد که رفع آنها به زمان زیادی نیاز دارد.
- الگوریتم نویسی در ابعاد بزرگ بسیار دشوار است و دقت، حوصله و زمان بسیاری میطلبد.
جدول تریس TRACE
برای اینکه ببینید یک الگوریتم به درستی کار میکند یا خیر باید از جدول تریس (Trace) استفاده کنید. در این جدول باید ستونهایی را به ورودیها، عملیات پردازش و خروجیها اختصاص دهید و در نهایت عملیات خواستهشده در الگوریتم را به ترتیب با ورودیهای مختلف امتحان کنید. در صورتی که به خروجی مورد نظر دست یابید یعنی الگوریتمی که نوشتهاید صحیح است و در غیر این صورت درمییابید که عیب الگوریتم مربوط به کدام مرحله است و به راحتی میتوانید آن را اصلاح کنید.
فلوچارت (FLOWCHART) چیست؟ (به زبان ساده)
به عقیدهی عدهای، اگر الگوریتم را آدرس نوشتهشدهی یک مکان در نظر بگیریم، فلوچارت نمایش مسیر آن مکان روی نقشه است. الگوریتم و فلوچارت مکمل یکدیگرند و کار یک برنامهنویس بعد از حل مسئله و الگوریتم نویسی و قبل از شروع برنامهنویسی، پیادهسازی الگوریتم روی یک فلوچارت است. شما به عنوان یک برنامهنویس بعد از نوشتن الگوریتم، باید دستورالعملهای آن را با اشکال و علائم قراردادی که در ادامه معرفی میکنیم به فلوچارت تبدیل کنید؛ اما ابتدا بهتر است لزوم استفاده از فلوچارت را بدانید.
ما در لیموناد مجموعهی کامل و ارزشمندی از آموزشهای برنامه نویسی با زبانهای برنامه نویسی مختلف برای شما عزیزان فراهم کردهایم که از طریق لینک زیر به آن دسترسی خواهید داشت.
چرا از فلوچارت استفاده میکنیم؟
همانطور که در بخش معایب الگوریتم گفتیم، الگوریتم نویسی در ابعاد بزرگ بسیار دشوار است. طراحی یک الگوریتم با فرمولهای سخت و پیچیده و حلقههای تودرتو عملی سخت و طاقتفرسا خواهد بود. اینجاست که فلوچارتها به کمک برنامهنویسها میآیند و این امر را در زمانی بسیار کمتر و به صورتی آسانتر امکانپذیر میکنند.
اشکال هندسی در فلوچارت
برای رسم فلوچارت از اشکال هندسی استفاده میکنیم؛ اشکال هندسی باعث میشوند با یک نگاه عملیات و دستورالعملهای فلوچارت را دریابیم. برای هر نوع از دستورات از اشکال هندسی به صورت زیر استفاده میکنیم:
دایره یا بیضی: برای نمایش ترمیناتور (Terminator) یا نقطهی شروع و پایان فرآیند از شکل دایره یا بیضی استفاده میکنیم. هر فلوچارت یک نقطهی شروع و یک نقطهی پایان خواهد داشت.
متوازیالاضلاع: از متوازیالاضلاع برای دریافت یا نمایش ورودی و همچنین برای نمایش خروجی نهایی استفاده میکنیم.
مستطیل: این شکل برای عملیات پردازش یا فرآیند (Process) به کار میرود. دستورات معمولی محاسباتی یا انتسابی را با شکل مستطیل نمایش میدهیم.
لوزی: اِعمال شرط در فلوچارت را با شکل لوزی نشان میدهیم. نتیجهی عبارت درون لوزی مقادیر بله و خیر، صحیح و غلط و… خواهد بود که بر اساس آن حداقل دو خروجی متفاوت خواهد داشت. در واقع شکل لوزی برای نمایش تصمیم (Decision) در فلوچارت به کار میرود.
فلش یا پیکان: با استفاده از علامت پیکان جهت روند فرآیند را در فلوچارت مشخص میکنیم؛ یعنی با خط جریان (Flow) ترتیب انجام دستورالعملها را تعیین میکنیم و مشخص میکنیم که پس از انجام یک مرحله کدام مرحله باید انجام شود یا پس از بررسی برقرار بودن یک شرط کدام مرحله باید انجام شود.
آموزش الگوریتم و فلوچارت
برای اینکه تبدیل به یک برنامهنویس موفق شوید ابتدا باید درک درستی از مسائل به دست آورید و به مهارت حل مسئله مسلط شوید. در دورهی آموزشی رایگان الگوریتم و فلوچارت در لیموناد که لینک دانلود آن را برای شما قرار دادهایم، مدرس سعی کرده است به زبان ساده شما را با این مفاهیم آشنا کند و نحوهی صحیح الگوریتم نویسی و طراحی فلوچارت را به شما آموزش دهد. همچنین چندین نمونه الگوریتم و فلوچارت برای شما ترسیم میکند که با تمرین آنها به خوبی بر این مفاهیم مسلط خواهید شد.
ابزارهای آنلاین رسم الگوریتم و فلوچارت چیست؟
برای طراحی الگوریتم و رسم فلوچارت به راحتی میتوانید از قلم و کاغذ استفاده کنید؛ اما اگر قصد ترسیم یک الگوریتم یا فلوچارت پیچیده و طولانی را دارید مثل همیشه در اینترنت ابزارهای آنلاینی وجود دارند که به شما کمک میکنند تا این کار را راحتتر و به صورت مرتبتری انجام دهید. سایتهای Drow.io، gliffy.com، creately.com، و lucidchart.com سایتهای محبوب رسم فلوچارت و الگوریتم در بین کاربران هستند. همچنین نرمافزار Visio این امکان را برای شما فراهم میکند تا به صورت آفلاین به طراحی فلوچارت یا انواع دیگر نمودار بپردازید. بعد از کار با این ابزارها میتوانید طراحیهای خود را در قالب svg، pdf، png یا jpeg نیز ذخیره کنید.
در این مقاله سعی کردیم به زبان ساده توضیح دهیم که الگوریتم و فلوچارت چیست؟ دریافتیم که الگوریتم برای تبدیل یک مسئله به قطعات کوچکتر کاربرد دارد و درک مسئله را آسان میکند. در واقع الگوریتم نویسی قدرت حل مسئلهی برنامهنویس را نمایش میدهد و کار او را برای پیادهسازی برنامه راحت میکند. همچنین به منظور فهم بهتر یک الگوریتم و نحوهی عملکرد آن (به ویژه الگوریتمهای پیچیده) میتوانیم با اشکال و نمادهای قراردادیِ فلوچارت آن الگوریتم را به تصویر بکشیم. مهمترین ویژگی فلوچارتها وجود فلشها (Flow) است که جهت حرکت فلوچارت را مشخص میکند و تاثیر زیادی در درک یک فلوچارت و هدف آن در زمان کمتر دارد.