الگوریتم و فلوچارت چیست؟
آکادمی کدیاد
تاریخ انتشار : چهارشنبه 26 خرداد 1400
الگوریتمها قلب علم کامپیوتر;آینده در چنگ الگوریتمها
دونالد کنوت، دانشمند برجسته علوم کامپیوتر میگوید: علم کامپیوتر چیزی جز مطالعهی الگوریتم ها نیست. در واقع در دنیای مدرن، الگوریتم به تنهایی از هر مفهوم دیگری مهمتر است. اگر میخواهیم در قرن 21 مسائل را بهتر درک کنیم به نفع ماست که با مفهوم الگوریتم آشنا شویم. این مفهوم در دنیای برنامه نویسی و کامپیوتر پرکاربرد و اساسی است. یادگیری الگوریتم و فلوچارت نه تنها میتواند شما را در یادگیری برنامه نویسی یاری کند ، میتواند با افزایش مهارت حل مسئله در زندگی روزمره هم کمک شما باشد. در ادامه مفهوم الگوریتم و فلوچارت را با زبانی ساده با هم مرور میکنیم.
آینده از آن الگوریتمهاست
عمر الگوریتمها بیشتر از سالهایی است که با کامپیوتر گذراندهایم. در واقع الگوریتم ها قبل از اختراع کامپیوتر وجود داشتهاند اما پس از آن نقش پررنگتری در محاسبات پیدا کردند. در ابتدا الگوریتمها برای حل مسائل و مرتبسازی گسترش پیدا کردند. اما در طی سالیان دستخوش تغییر و تحول شده و در همه حوزه ها اعم از الکترونیک، هوش مصنوعی، پروژه ژنوم انسان و حتی وبسایت هایی که هر روزه با حجم زیادی از دادهها رو به رو هستند، استفاده شدند.
با توجه به حجم عظیم کاربرد الگوریتم در قرن 21 دور از ذهن نیست اگر بگوییم آینده از آن الگوریتمهاست. از آنجا که الگوریتمها پشت پرده پروژههای عظیم هوش مصنوعی، یادگیری ماشین و اتومبیلهای خودران هستند پس باید انتظار داشت آینده را الگوریتمها تعیین کنند و این جمله قطعا مبالغه نیست. توجه به این نقش حساس و پر اهمیت، نقش و جایگاه الگوریتم و فلوچارت را به ما یادآور میکند.
الگوریتم یا قدرت حل مسئله
یادگیری الگوریتم به عنوان مجموعهای از اقدامات در محاسبات که به حل مسئلهای خاص ختم میشود، اولین و مهمترین گام برای تبدیل شدن به یک برنامه نویس است. زمانی که شما خود را یک متخصص معرفی میکنید، دانستن ابزاری مانند زبان برنامه نویسی قطعاً کافی نیست و لازم و ضروری است که توان ساخت الگوریتمهای تخصصی را داشته باشید.
زیرا حرفه اصلی یک برنامه نویس حل مسئله و تحلیل آن است و نه صرفاً پیاده سازی با یک زبان برنامه نویسی. بنابراین به عنوان یک برنامه نویس تقویت مهارتهای حل مسئله و آموزش صحیح و اصولی طراحی الگوریتم و فلوچارت را در اولویت قرار دهید.
در این فرآیند باید مراحل کار دقیق و با جزییات بیان شوند به گونه ای که ترتیب مراحل و شرط خاتمه عملیات به طور دقیق و کامل مشخص شده باشند. در واقع خود الگوریتم محاسبه مشخصی نیست بلکه روشی است که در محاسبه دنبال میشود. مثلاً اگر بخواهید میانگین دو عدد را حساب کنید میتوانید از یک الگوریتم ساده استفاده کنید. این الگوریتم به این صورت است:
"گام اول: دو عدد را با هم جمع کنید. گام دوم: مجموع آنها را بر دو تقسیم کنید." وقتی دو عدد 4 و 8 را وارد این الگو کنید، به عدد 6 میرسید. وقتی 117 و 231 را وارد کنید، به 174 میرسید. داستان اما در زبان برنامهنویسی بسیار پیچیدهتر از این حرفهاست؛ زیرا این الگوریتم میتواند با هزاران مرحله، جزییات و شروط مختلف اجرا شود و برای مسائل بزرگتر الگوریتم مفصلتری باید نوشت.
ساختار منطقی الگوریتم
بر اساس یک طبقه بندی الگوریتمها در 3 گروه دنبالهای، شاخهای و حلقهای قرار میگیرند. الگوریتم دنبالهای (Sequence) ساختاری مرحله به مرحله دارد و ترتیب گامها برای رسیدن به پاسخی معتبر در آن مشخص شده است. در این نوع از الگوریتم، عناصر ورودی بطور پیوسته پردازش شده و عنصر به عنصر متن را تولید میکنند.
الگوریتم شاخهای(Branching) دسته دیگری از انواع الگوریتمها است که بر اساس قانون در ریاضیات کار میکند. در واقع بعد از اینکه شرطی مشخص شد، خروجی با توجه به نتیجه شرط تعیین میشود. در دسته آخر که الگوریتم حلقه ای یا تکراری (Loop) نام دارد، به تعدادی معین شرطی را در الگوریتم اعمال میکنند و پس از اتمام شدن فرایند، برنامه را پایان میدهند.
یک الگوریتم کاربردی چه ویژگیهایی دارد؟
-
زبان ساده، دقیق و قابل فهم
وقتی از یک جمله برداشتهای متفاوت و مبهمی صورت گیرند، یعنی دقیق و یا واضح نبوده است. تمام تلاش یک الگوریتم و فلوچارت اجرای یک الگوی یکسان است و در صورتی که زبان آن ساده، دقیق و قابل فهم باشد میتوان انتظار داشت که از آن برداشتهای یکسانی صورت گیرند. اگر این ویژگی لحاظ نشود، برداشتهای متفاوت به دستورالعملهای متفاوت ختم خواهند شد. این یعنی الگوریتم اصلاً به هدف خود نزدیک هم نشده است. لازم به ذکر است که زبان الگوریتم میتواند نوعی زبان گفتاری یا نوشتاری اعم از فارسی، انگلیسی و... باشد.
-
جزئیات کافی
در صورتی که جزییات جامع و کامل لحاظ شوند، دستورالعملها به طور کامل اجرا میشوند. از سوی دیگر وجود موارد نامشخص یا مبهم، سبب مخدوش شدن نتایج و در نهایت خروجی میشوند.
-
شروع و پایان الگوریتم
نقطه شروع الگوریتم به عنوان اولین دستورالعمل باید مشخص باشد. زیرا هر الگوریتم یک شروع و پایانی دارد. الگوریتم باید در زمان و تحت شرایط تعیینشده خاتمه یابد. توجه به این نکته نیز حائز اهمیت است که یک الگوریتم میتواند بیش از یک نقطه پایان داشته باشد.
-
ترتیب انجام دستورالعملها
ترتیب انجام دستورالعملها از ویژگیهای بنیادی و مهم یک الگوریتم است. زیرا چنانچه دستورالعملها به ترتیب و درست انجام نشوند، احتمال بروز خطا بالا میرود و خروجی نامعتبر و نادرست تولید میشود. با استفاده از شمارهگذاری دستورالعملها از بالا به پایین، ترتیب انجام عملیات تعیین میشود. این امکان نیز وجود دارد که در صورت لزوم ترتیب اجرای دستورالعملها تغییر یابد.
مراحل تهیه الگوریتم
اگر برنامه نویسان درک درست و کاملی از مراحل حل مسئله به زبان ساده داشته باشند، میتوانند این مراحل را به راحتی یکی پس از دیگری اجرایی کنند. زمانی که میخواهید یک الگوریتم و فلوچارت مناسب و قوی بنویسید، ابتدا باید سه عامل اصلی را در صورت مسئله شناسایی کنید:
- مقادیر معلوم
- خواستههای مسئله
- عملیات محاسباتی
مقادیر معلوم عبارتند از دادههای مسئله. اطلاعاتی که در اختیار داریم و بایستی به کمک آنها مسئله را حل کنیم. اجزای یک مسئله و ارتباط بین اجزا باید در ابتدای کار برایتان روشن و واضح باشند. عامل بعدی خواسته های مسئله است که مقادیر مجهول را در بر میگیرند. همان نتایجی که در اثر انجام محاسبات بر روی دادههای مسئله بدست میآیند.
در نهایت عملیات محاسباتی به معنای دستورات و روابط منطقی هستند که بر روی دادهها و مجهولات انجام میشوند تا ما را به خواسته های مسئله و یک پاسخ منطقی و مورد انتظار برسانند. با دانستن این جزییات این پروسه خیلی راحت به سرانجام میرسد. بدین صورت که افراد برای مسئله خود ابزار و نیازمندیهای لازم را مینویسند، ساختارها داده های مورد نیاز برای حل مسئله را تعیین میکنند و در آخرین گام آن را به کد برنامه نویسی تبدیل میکند.
روشهای بیان الگوریتم کدامند؟
-
بیان الگوریتم با جملات فارسی
در این حالت، الگوریتمها را با جملات فارسی و بدون استفاده از نمادها به صورت یک نوشته عادی مینویسیم. یکی از اساسیترین مشکل این روش الگوریتم و فلوچارت این است که الگوریتمها طولانی شده و احتمال اینکه از دستورات تعبیر و تفسیرهای گوناگون صورت گیرند، بالاست.
مثال: الگوریتم مجموع دو عدد را محاسبه کند.
- دو عدد را بگیر
- آنها را با هم جمع کن
- پایان
-
بیان الگوریتم به زبان ریاضی
این روش نسبت به دستورات به زبان فارسی دقیقتر است و این مسئله احتمال خطا را کاهش میدهد. در بيان رياضي الگوريتم، مراحل الگوريتم به صورت دستورالعملهای متوالي تنظيم می شوند و با دستورالعملهای ریاضیاتی نوشته میشوند.
مثال: الگوریتمی که سه مقدار عددی را از ورودی خوانده و میانگین آن را به عنوان خروجی ارائه دهد.
- A, B, C را بخوان.
- A+B+C-> SUM
- SUM/3->AVE
- AVE را چاپ کن
- پایان
-
بیان الگوریتم توسط شکلها
همانطور در مثال قبل ملاحظه شد، خروجی الگوریتم به دنبال محاسبه میانگین بود که محاسبه سادهای است. اما حالتی را تصور کنید که قرار است صدها فرمول پیچیده ریاضی به صورت الگوریتم نوشته شوند. قطعاً پروسه طولانی و پیچیدهای خواهد شد که دنبال کردن مراحل آن دشوار است و احتمال خروجی نامعتبر افزایش مییابد. در این شرایط، بیان الگوریتم به وسیله اشکال که با نام فلوچارت میشناسیم، امکان پذیر است. با توجه به کاربرد و اهمیت الگوریتم و فلوچارت به این روش مفصلتر میپردازیم.
فلوچارت یا نمایش گرافیکی
تا اینجای مقاله با مفهوم الگوریتم آشنا شدیم و تا حدودی در مورد مراحل و جزییات کار اطلاعات کسب کردیم اما در اکثر مواقع میبینیم که واژههای الگوریتم و فلوچارت کنار هم میآیند. زیرا این دو فرآیند کاملاً مرتبط هستند. در واقع پس از شناخت الگوریتم، مسئله ساده سازی آن اهمیت بسیاری پیدا میکند. توانایی ترسیم گام به گام مراحل به گونه ای باید باشد که بتوان آنها را برای دیگران به راحتی توضیح داد.
این همان کاری است که فلوچارت (FlowChart) برای ما انجام میدهد. در حقیقت برای فهم بهتر یک الگوریتم و نحوه عملکرد آن به فلوچارت نیاز داریم. جریان کار به این صورت است که مسئلهای برای حل داریم، ابتدا باید آن را به شکل الگوریتم که روش حل است بنویسیم و سپس به فلوچارت تبدیل کرده و در نهایت فلوچارت را به زبان برنامه نویسی مورد نظر خود تبدیل کنیم.
فلوچارت نوعی نمایشی گرافیکی از فرایند یک برنامه است. در این نمایش، برنامه نویس به دنبال آن است که مجموعه شکلهای قراردادی را ترسیم کرده و به کمک آنها دستورات و روند یک الگوریتم را سادهسازی کند.
رسم یک فلوچارت به قبل از قبل از شروع برنامه نویسی مربوط میشود و به نوع زبان برنامهنویسی بستگی ندارد. فلوچارتها در تعیین روند اجرای دستورات و تعیین ورودی و خروجی برنامه نقش مهمی دارند. پس میتوانیم اینطور بیان کنیم که الگوریتم و فلوچارت در کنار هم معنا پیدا میکنند
بررسی نمادها در رسم فلوچارت
در رسم فلوچارت از شکلهای قرارداد خاصی استفاده میشود که هر کدام با کاربرد خاص خود، در نمایش دستورات مختلف یک برنامه سهم به سزایی دارند و مفهوم خاصی را میرسانند. در ادامه چند مثال از مهمترین نمادهای فلوچارت را با هم مورد بررسی قرار میدهیم.
-
خط جریان
با یک پیکان نشان داده میشود، نمادی را به نماد دیگر وصل میکند و کنترل جریان فرآیند را در جهت پیکان نشان میدهد. این خط ممکن است پیوسته یا خطچین باشد و معنای آن به شرح فلوچارت وابسته است.
-
ترمیناتور (Terminator)
به عنوان نمادی جهت شروع و پایان فرایند در نظر میگیرند. این نماد که به شکل دایره، بیضی یا مستطیل انحنادار نشان داده میشود، معمولاً عبارات "شروع" یا "پایان" را در بر میگیرد. هر فلوچارت یک ترمیناتور برای شروع و یکی برای پایان دارد.
-
فرایند (Process)
جهت نمایش دستورات معمولی از جمله دستورات محاسباتی، انتسابی و اجرای آنها استفاده میشود. به عنوان مثال "x را معادل ورودی دریافت شده قرار بده". فرآیند با نماد مستطیل مشخص میشود.
-
تصمیم (Decision)
جهت برقرار نمودن یک شرط است و با توجه به پاسخ شرط این مرحله میتواند دو خروجی مختلف داشته باشد. این شرطها معمولاً سوالات بله/خیر یا صحیح/غلط هستند. برای مثال "آیا x از 12 بزرگتر است؟". تصمیم با نماد لوزی نمایش داده میشود.
-
ورودی و خروجی
برای دریافت و نمایش ورودی و خروجی از شکل متوازی الاضلاع استفاده میشود. مثلا "x را نمایش بده".
-
سند (Document)
چهارضلعی منحنی جهت نمایش خروجی و گزارش نهایی به کار میرود.
-
ارجاع به درون برنامه (On-Page Reference)
شکل دایره که حرفی درون آن قرار گرفته نشاندهنده ارجاع به درون برنامه است. این بدین معناست که این مرحله در این فلوچارت پایان یافته و لازم است که در فلوچارت دیگری ادامه یابد.
-
تاخیر یا انتظار (Delay or wait)
شکل یک نیمه بیضی که یعنی انتظار و وقفه در انجام فرآیند.
تبدیل الگوریتم به فلوچارت
زمانی که میخواهید یک الگوریتم را به فلوچارت تبدیل کنید، به جای اینکه از جملات استفاده کنید، لازم است علائم قراردادی را به کار ببرید. همچنین به جای درج دستورالعملها، شکل و علامت وضع شده برای آن دستور را استفاده کنید. در نهایت با در نظر گرفتن ترتیب اجرای دستورالعملها، اشکال رسم شده را با خطوط فلشدار به هم وصل کنید. پس یاد گرفتن الگوریتم و فلوچارت در کنار یکدیگر اهمیت دارند.
جمع بندی
در دنیای امروز الگوریتم و فلوچارت کاربرد زیاد و گستردهای دارند. در این مقاله سعی شد به برخی از جنبه های این موضوع اساسی در برنامه نویسی و کامپیوتر بپردازیم. تسلط بر الگوریتمها و همچنین ترسیم آنها به صورت فلوچارت اهمیت زیادی برای برنامه نویسان دارد؛ زیرا میتواند افراد متخصص و حرفهای را از افرادی که صرفاً یک زبان برنامه نویسی را بلدند، تفکیک کند. در واقع الگوریتم و فلوچارت از پیشنیازهای مهم و اساسی یادگیری برنامه نویسی هستند.