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

26 خرداد ۱۴۰۰

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

الگوریتم­ها قلب علم کامپیوتر;آینده در چنگ الگوریتم­ها

دونالد کنوت، دانشمند برجسته علوم کامپیوتر می‌گوید: علم کامپیوتر چیزی جز مطالعه‌ی الگوریتم ها  نیست. در واقع در دنیای مدرن، الگوریتم به تنهایی از هر مفهوم دیگری مهم­تر است. اگر می­خواهیم در قرن 21 مسائل را بهتر درک کنیم به نفع ماست که با مفهوم الگوریتم آشنا شویم. این مفهوم در دنیای برنامه ­نویسی و کامپیوتر پرکاربرد و اساسی است. یادگیری الگوریتم و فلوچارت نه تنها میتواند شما را در یادگیری برنامه نویسی یاری کند ، میتواند با افزایش مهارت حل مسئله در زندگی روزمره هم کمک شما باشد. در ادامه مفهوم الگوریتم و فلوچارت را با زبانی ساده با هم مرور می­کنیم.

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

 

آینده از آن الگوریتم‌هاست

عمر الگوریتم­ها بیشتر از سال­هایی است که با کامپیوتر گذرانده­ایم. در واقع الگوریتم ها قبل از اختراع کامپیوتر وجود داشته­اند اما پس از آن نقش پررنگ­تری در محاسبات پیدا کردند. در ابتدا الگوریتم­ها برای حل مسائل و مرتب­سازی گسترش پیدا کردند. اما در طی سالیان دستخوش تغییر و تحول شده و در همه حوزه ­ها اعم از الکترونیک، هوش مصنوعی، پروژه ژنوم انسان و حتی وبسایت هایی که هر روزه با حجم زیادی از داده‌ها رو به رو هستند، استفاده شدند.

با توجه به حجم عظیم کاربرد الگوریتم در قرن 21 دور از ذهن نیست اگر بگوییم آینده از آن الگوریتم­هاست. از آنجا که الگوریتم­ها پشت پرده پروژه­های عظیم هوش مصنوعی، یادگیری ماشین و اتومبیل­های خودران هستند پس باید انتظار داشت آینده را الگوریتم­ها تعیین کنند  و این جمله قطعا مبالغه نیست. توجه به این نقش حساس و پر اهمیت، نقش و جایگاه الگوریتم­ و فلوچارت را به ما یادآور می‌کند.

کاربرد فراوان الگوریتم¬ها در حوزه¬های مختلف

الگوریتم یا قدرت حل مسئله

یادگیری الگوریتم به عنوان مجموعه­ای از اقدامات در محاسبات که به حل مسئله­ای خاص ختم می­شود، اولین و مهم­ترین گام برای تبدیل شدن به یک برنامه نویس است. زمانی که شما خود را یک متخصص معرفی می­کنید، دانستن ابزاری مانند زبان برنامه ­نویسی قطعاً کافی نیست و لازم و ضروری است که توان ساخت الگوریتم­های تخصصی را داشته باشید.

زیرا حرفه اصلی یک برنامه ­نویس حل مسئله و تحلیل آن است و نه صرفاً پیاده ­سازی با یک زبان برنامه ­نویسی. بنابراین به عنوان یک برنامه ­نویس تقویت مهارت­های حل مسئله و آموزش صحیح و اصولی طراحی الگوریتم و فلوچارت را در اولویت قرار دهید.

 در این فرآیند باید مراحل کار دقیق و با جزییات بیان شوند به گونه­ ای که ترتیب مراحل و شرط خاتمه عملیات به طور دقیق و کامل مشخص شده باشند. در واقع خود الگوریتم محاسبه مشخصی نیست بلکه روشی است که در محاسبه دنبال می­شود. مثلاً اگر بخواهید میانگین دو عدد را حساب کنید می­توانید از یک الگوریتم ساده استفاده کنید. این الگوریتم به این صورت است:

"گام اول: دو عدد را با هم جمع کنید. گام دوم: مجموع آن‌ها را بر دو تقسیم کنید." وقتی دو عدد 4 و 8 را وارد این الگو کنید، به عدد 6 می­رسید. وقتی 117 و 231 را وارد کنید، به 174 می­رسید. داستان اما در زبان برنامه­نویسی بسیار پیچیده­تر از این حرف­هاست؛ زیرا این الگوریتم می­تواند با هزاران مرحله، جزییات و شروط مختلف اجرا شود  و برای مسائل بزرگ‌تر الگوریتم مفصل­تری باید نوشت.

یادگیری الگوریتم لازمه تبدیل شدن به یک برنامه¬نویس حرفه¬ای

ساختار منطقی الگوریتم

بر اساس یک طبقه ­بندی الگوریتم­ها در 3 گروه دنباله­ای، شاخه­ای و حلقه­ای قرار می­گیرند. الگوریتم دنباله­ای (Sequence) ساختاری مرحله به مرحله دارد و ترتیب گام­ها برای رسیدن به پاسخی معتبر در آن مشخص شده است. در این نوع از الگوریتم، عناصر ورودی بطور پیوسته پردازش شده و عنصر به عنصر متن را تولید می­کنند.

الگوریتم شاخه­ای(Branching)  دسته دیگری از انواع الگوریتم­ها است که بر اساس قانون در ریاضیات کار می‌کند. در واقع بعد از اینکه شرطی مشخص شد، خروجی با توجه به نتیجه شرط تعیین می­شود. در دسته آخر که الگوریتم حلقه ای یا تکراری (Loop)  نام دارد، به تعدادی معین شرطی را در الگوریتم اعمال می‌کنند و پس از اتمام شدن فرایند، برنامه را پایان می­دهند.

الگوریتم¬ها دارای ساختار منطقی هستند

یک الگوریتم کاربردی چه ویژگی­هایی دارد؟

  • زبان ساده، دقیق و قابل فهم

وقتی از یک جمله برداشت­های متفاوت و مبهمی صورت گیرند، یعنی دقیق و یا واضح نبوده است. تمام تلاش یک الگوریتم و فلوچارت اجرای یک الگوی یکسان است و در صورتی که زبان آن ساده، دقیق و قابل فهم باشد می­توان انتظار داشت که از آن برداشت­های یکسانی صورت گیرند. اگر این ویژگی لحاظ نشود، برداشت­های متفاوت به دستورالعمل­های متفاوت ختم خواهند شد. این یعنی الگوریتم اصلاً به هدف خود نزدیک هم نشده است. لازم به ذکر است که زبان الگوریتم می­تواند نوعی زبان گفتاری یا نوشتاری اعم از فارسی، انگلیسی و... باشد.

  • جزئیات کافی

در صورتی که جزییات جامع و کامل لحاظ شوند، دستورالعمل­ها به طور کامل اجرا می­شوند.  از سوی دیگر وجود موارد نامشخص یا مبهم، سبب مخدوش شدن نتایج و در نهایت خروجی می­شوند.

  • شروع و پایان الگوریتم

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

  • ترتیب انجام دستورالعمل­ها

 ترتیب انجام دستورالعمل­ها از ویژگی­های بنیادی و مهم یک الگوریتم است. زیرا چنانچه دستورالعمل­ها به ترتیب و درست انجام نشوند، احتمال بروز خطا بالا می­رود و خروجی نامعتبر و نادرست تولید می­شود. با استفاده از شماره­گذاری دستورالعمل­ها از بالا به پایین، ترتیب انجام عملیات تعیین می­شود. این امکان نیز وجود دارد که در صورت لزوم ترتیب اجرای دستورالعمل­ها تغییر یابد.

ترتیب انجام دستورالعمل¬ها از ویژگی¬های اساسی یک در الگوریتم

مراحل تهیه الگوریتم

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

  1. مقادیر معلوم
  2. خواسته‌های مسئله
  3. عملیات محاسباتی

 مقادیر معلوم عبارتند از داده­های مسئله. اطلاعاتی که در اختیار داریم و بایستی به کمک آن‌ها مسئله را حل کنیم. اجزای یک مسئله و ارتباط بین اجزا باید در ابتدای کار برایتان روشن و واضح باشند. عامل بعدی خواسته ­های مسئله است که مقادیر مجهول را در بر می­گیرند. همان نتایجی که در اثر انجام محاسبات بر روی داده‌های مسئله بدست می­آیند.

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

کدنویسی آخرین گام است

روش­های بیان الگوریتم کدامند؟

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

در این حالت، الگوریتم­ها را با جملات فارسی و بدون استفاده از نمادها به صورت یک نوشته عادی می­نویسیم. یکی از اساسی­ترین مشکل این روش الگوریتم و فلوچارت این است که الگوریتم­ها طولانی شده و احتمال اینکه از دستورات تعبیر و تفسیرهای گوناگون صورت گیرند، بالاست.

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

  1. دو عدد را بگیر
  2. آن‌ها را با هم جمع کن
  3. پایان
  • بیان الگوریتم به زبان ریاضی

این روش نسبت به دستورات به زبان فارسی دقیق­تر است و این مسئله احتمال خطا را کاهش می­­دهد. در بيان رياضي الگوريتم، مراحل الگوريتم به صورت دستورالعمل­های متوالي تنظيم می­ شوند و با دستورالعمل‌های ریاضیاتی نوشته می­شوند.

مثال: الگوریتمی که سه مقدار عددی را از ورودی خوانده و میانگین آن را به عنوان خروجی ارائه دهد.

  1. A, B, C را بخوان.
  2. A+B+C-> SUM
  3. SUM/3->AVE
  4. AVE را چاپ کن
  5. پایان
  • بیان الگوریتم توسط شکل­ها

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

فلوچارت یا نمایش گرافیکی

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

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

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

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

کار فلوچارت، ساده¬سازی الگوریتم¬هاست

 

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

در رسم فلوچارت از شکل­های قرارداد خاصی استفاده می­شود که هر کدام با کاربرد خاص خود، در نمایش دستورات مختلف یک برنامه سهم به سزایی دارند و مفهوم خاصی را می­رسانند. در ادامه چند مثال از مهم­ترین نمادهای فلوچارت را با هم مورد بررسی قرار می­دهیم.

  • خط جریان

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

  • ترمیناتور (Terminator)

به عنوان نمادی جهت شروع و پایان فرایند در نظر می­گیرند. این نماد که به شکل دایره، بیضی یا مستطیل انحنادار نشان داده می­شود، معمولاً عبارات "شروع" یا "پایان" را در بر می­گیرد. هر فلوچارت یک ترمیناتور برای شروع و یکی برای پایان دارد.

  • فرایند  (Process)

جهت نمایش دستورات معمولی از جمله دستورات محاسباتی، انتسابی و اجرای آن‌ها استفاده می­شود. به عنوان مثال "x را معادل ورودی دریافت شده قرار بده". فرآیند با نماد مستطیل مشخص می­شود.

  • تصمیم (Decision)

جهت برقرار نمودن یک شرط است و با توجه به پاسخ شرط این مرحله می­تواند دو خروجی مختلف داشته باشد. این شرط­ها معمولاً سوالات بله/خیر یا صحیح/غلط هستند. برای مثال "آیا x  از 12 بزرگ­تر است؟". تصمیم با نماد لوزی نمایش داده می­شود.

  • ورودی و خروجی

برای دریافت و نمایش ورودی و خروجی از شکل متوازی ­الاضلاع استفاده می­شود. مثلا "x  را نمایش بده".

  • سند (Document)

چهارضلعی منحنی جهت نمایش خروجی و گزارش نهایی به کار می­رود.

  • ارجاع به درون برنامه (On-Page Reference)

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

  • تاخیر یا انتظار (Delay or wait)

شکل یک نیمه بیضی که یعنی انتظار و وقفه در انجام فرآیند.

شکل¬های قراردادی خاص در رسم فلوچارت

 

 

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

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

 

جمع ­بندی

در دنیای امروز الگوریتم‌ و فلوچارت  کاربرد زیاد و گسترده­ای دارند. در این مقاله سعی شد به برخی از جنبه ­های این موضوع اساسی در برنامه ­نویسی و کامپیوتر بپردازیم. تسلط بر الگوریتم­ها و همچنین ترسیم آن­ها به صورت فلوچارت  اهمیت زیادی برای برنامه نویسان دارد؛ زیرا می‌تواند افراد متخصص و حرفه­ای را از افرادی که صرفاً یک زبان برنامه ­نویسی را بلدند، تفکیک کند. در واقع الگوریتم‌ و فلوچارت از پیش‌نیازهای  مهم و اساسی یادگیری برنامه ­نویسی هستند. 

 

محبوب ترین مقالات