فهرست مطالب
در دنیای دیجیتالی امروزه، الگوریتم و فلوچارت از جمله مفاهیم حائز اهمیتی است که بدون درنظر گرفتن آنها، کاری را نمیتوان به خوبی پیش برد. به همین خاطر است که، دونالد کنوت، دانشمند برجسته علوم کامپیوتر که به پدر آنالیز الگوریتم معروف است، میگوید: علم کامپیوتر چیزی جز مطالعهی الگوریتمها نیست. علاوه بر دنیای دیجیتالی و برنامه نویسی، هیچ کاری را، از کوچکترین موارد تا بزرگترینشان، نمیتوان بدون طرح و نقشهای انجام داد و برای انجام آن نیازمند دستورالعمل و نقشه میباشیم. حال در زمینه برنامه نویسی، افراد باید در اولین گام بتوانند مفهوم مسئله مدنظر را درک کنند تا بتوانند روند حل مسئله را ارائه دهند که در اصطلاح به نقشه یا روند حل مسئلهای که ذکر شد، اصطلاحاً الگوریتم گفته میشود که بعد برنامه نویسان آن را به فلوچارت تبدیل میکنند تا بتوانند به راحتی کدنویسی نمایند. در ادامه قصد داریم تا مفهوم الگوریتم و فلوچارت به زبان ساده بررسی کنیم. با ما همراه باشید.
الگوریتم در برنامه نویسی یا قدرت حل مسئله
واژه الگوریتم از نام ریاضیدان و ستارهشناس و جغرافیدان نامی ایران، ابوجعفر محمد بن موسی خوارزمی (الخوارزمی)، گرفته شده است. الگوریتم به مجموعهای متناهی از دستورالعملها، که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند، نیز گفته میشود. در واقع به زبان سادهتر میتوان گفت، الگوریتم مجموعهای از مراحل دقیق و خط به خط برای حل یک مسئله است.
یک الگوریتم باید به طور کامل بدون ابهام و درست باشد تا به ترتیب اجرا شود و سودمند باشد. توضیح کامل مفهوم الگوریتم و طراحی الگوریتم به تنهایی نیازمند چندین مقاله و صرف مدت زمان زیادی است. برای اثبات این موضوع تنها کافیست بدانید که واحد درسی اختصاصی برای این موضوع، در رشته تحصیلی مهندسی کامپیوتر و رشتههای مشابه، در دانشگاهها تحت عنوان طراحی الگوریتم تدریس میشود. اما در این مقاله ما قصد داریم این موضوع را به زبانی آسانتر برای درک بهتر شما بیان کنیم.
خصوصیات یک الگوریتم
برای درک بهتر الگوریتم، اجازه دهید تا در ابتدا به خصوصیات آن اشاره کنیم.
- ورودی: یک الگوریتم باید هیچ یا چندین پارامتر را به عنوان ورودی داشته باشد.
- خروجی: الگوریتم باید حداقل یک کمیت به عنوان خروجی (نتیجه عملیات) تولید کند.
- قطعیت: دستورهای الگوریتم باید با زبانی دقیق، و بی ابهام بیان شوند.
- خاتمه پذیری: الگوریتم باید پس از طی مراحل شمارا و متناهی خاتمه یابد. به علاوه، زمان لازم برای خاتمه الگوریتم هم باید به گونهای معقول، کوتاه باشد.
- قابل اجرا بودن: هر دستورالعمل موجود در یک الگوریتم باید قابل اجرا باشد یعنی بتوان با استفاده از قلم و کاغذ و به صورت دستی اجرا کرد.
چرخه حیات یک الگوریتم
چرخه عمر یک الگوریتم برنامه نویسی به شرح زیر است:
- طراحی الگوریتمها: روشهای مختلفی برای طراحی الگوریتمها وجود دارد
- روش تقسیم و غلبه
- روش حریصانه
- روش برنامه نویسی پویا
- ….
- معتبرسازی یا اثبات درستی الگوریتمها
- بعد از طراحی باید اثبات شود که الگوریتم مزبور درست است.
- الگوریتمی درست است که به ازای هر ورودی مناسب، خروجی صحیحی بدهد.
- اثبات درستی الگوریتمها به اثبات قضایا در ریاضی میماند و مرحله بسیار مهمی در زمینه مطالعه الگوریتمها است.
- تحلیل الگوریتمها
- پیچیدگی زمانی: الگوریتم در زمان اجرا چه مدت از زمان cpu برای اجرای دستورالعملها نیاز دارد.
- پیچیدگی فضایی: الگوریتم چه مقدار از حافظه (چه اصلی و چه جانبی) برای ذخیره سازی برنامه و دادهها نیاز دارد.
- پیاده سازی الگوریتمها: پیاده سازی یک الگوریتم نوشتن آن به برنامه نویسی خاص است و نام برنامه به آن اطلاق می شود.
- تست برنامه
فلوچارت در برنامه نویسی
به زبان ساده، فلوچارت (flowchart) درواقع همان تصویری گرافیکی یا نمایش نموداری از الگوریتم است. فلوچارت مراحل را به صورت جعبه در انواع مختلف نشان می دهد و ترتیب آنها را با اتصال جعبه ها با فلش نشان می دهد. این نمایش نموداری، یک مدل راه حل برای یک مسئله معین را نشان می دهد. فلوچارت ها در تجزیه و تحلیل، طراحی، مستندسازی یا مدیریت یک فرآیند یا برنامه در زمینه های مختلف استفاده می شوند.
الگوریتمها پیچیدگیهای مختلفی دارند که پیاده سازی آنها به هنگام زیاد شدن تعداد دستورات، به طبع کار آسانی نخواهد بود، و حتی ممکن است باعث بی نظمی و اشتباه شوند. در چنین مواردی استفاده از فلوچارت، میتواند به عملکرد بهتر کمک کند. در این نوع، برنامه نویس به دنبال آن است که دستورات و روند یک الگوریتم را با شکل های قراردادی ترسیم کند. رسم یک فلوچارت به نوع زبان برنامه نویسی بستگی ندارد. در واقع فرآیند ساده سازی الگوریتم به واسطه فلوچارت رخ میدهد، و به همین دلیل است که میگویند الگوریتم و فلوچارت در کنار هم معنا و مفهوم دارند.
نمادهای فلوچارت
اکنون که با مفهوم فلوچارت کاملاً آشنا شدیم، حال نوبت آن رسیده است که با چگونگی رسم فلوچارت آشنا شویم. برای رسم فلوچارت لازم است که نمادها و اشکال مختلف را بشناسید. فلوچارت اشکال مختلفی دارد که این اشکال به نمادهای فلوچارت معروف هستند. در ادامه مهمترین نمادهای قرارداد گذاری شده را معرفی میکنیم:
نماد | نام | توضیح |
خطوط جریان (Flow Lines) | فلشها جهت جریان کنترل و رابطه بین نمادهای مختلف را در فلوچارت نشان میدهند. | |
ترمینال (Terminal) | شروع و پایان فرایند را مشخص کرده و به شکل بیضی نشان داده میشود. هر فلوچارت یک ترمینال برای شروع و یکی برای پایان دارد. | |
پردازش و محاسبات فرآیند (process) | به شکل مستطیل که برای نمایش دستورات معمولی مانند دستورات محاسباتی و انتسابی استفاده میشود. | |
شرط و تصمیم گیری (Decision) | تصمیمگیری برای برقراری شرط است و با لوزی نشان داده میشود. این مرحله دو خروجی متفاوت وابسته به پاسخ شرط دارد. | |
ورودی/داده (Data/Input) | ورودیها یا دادهها به شکل متوازی الاضلاع نشان داده میشوند. | |
سند (Document) | برای نمایش خروجی و گزارش نهایی از چهارضلعی منحنی استفاده میشود. |
تفاوتهای الگوریتم و فلوچارت
امروزه الگوریتم ها و فلوچارت ها کاربردهای زیادی دارند که در این مقاله درباره برخی جنبههای الگوریتم و فلوچارت در برنامه نویسی صحبت کردیم. بعد از توضیح درباره هرکدام از آنها نوبت به بیان تفاوت های بین این دو رسیده است. الگوریتم و فلوچارت دو فناوری مجزا از یکدیگر هستند، زیرا الگوریتم یک رویه یا مجموعه ای از قوانین است که نحوه اجرای یک برنامه را تعریف می کند؛ یا به عبارت دیگر می توان گفت که مجموعه ای از دستورالعمل ها برای حل یک مسئله محاسباتی کاملاً تعریف شده است. اما فلوچارت یک نمایش گرافیکی از مراحلی است که یک برنامه برای پردازش داده ها طی می کند.
همچنین از لحاظ پیچیدگی و پیاده سازی هم با یکدیگر متفاوت اند، زیرا ایجاد الگوریتم نسبتاً دشوار است و همچنین درک آن توسط یک فرد غیربرنامه نویس کمی چالش برانگیز است. در مقابل طراحی فلوچارت و درک آن آسان و بسیار کاربر پسند است. زیرا فلوچارت برخلاف الگوریتم، شامل انواع مختلفی از اشکال هندسی، نمادها و الگوها است. باتوجه به اینکه برای درک فلوچارت به دانش زبان برنامه نویسی کامپیوتر نیاز نیست، فلوچارت در مستندسازی، طراحی و تحلیل یک برنامه در رشته های مختلفی قابلیت استفاده شدن را دارد. اما یک الگوریتم نیاز به دانش یک زبان برنامه نویسی کامپیوتری دارد که به طبع باعث می شود، از الگوریتم در زمینه های ریاضی و علوم کامپیوتری استفاده شود.
از دیگر تفاوت های الگوریتم و فلوچارت، نحوه پیاده سازی آن دو است، که برای پیاده سازی الگوریتم، قوانین از پیش مشخص شده ای را باید رعایت کرد. اما در فلوچارت اینگونه نیست و از هیچ قاعده ای استفاده نمی شود. و تفاوت آخری که می توان به آن اشاره کرد، نمایش انشعاب و حلقه زدن است که روند انجام آن در فلوچارت، برخلاف الگوریتم، بسیار آسان است.