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

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


در واقع الگوریتم مسیر حل مسئله و فلوچارت نحوه‌ی اجرای هر مرحله رو نشون میده.

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

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

ممکنه خیلی چیزها به ذهنتون رسیده باشه. اما قطعا سوال پیش میاد که تو برنامه نویسی به چه کارمون میاد؟

برنامه‌ ای رو تصور کنید که از بخش مختلفی ساخته شده.مثلا بازی سنگ کاغذ قیچی !

تمامی برنامه نویس ها از مبتدی تا حرفه ای قبل از نوشتن سورس کد ، به صورت خود آگاه و یا ناخود آگاه مسیری که قراره کد ها طی بکنن رو ذهنشون مرور میکنن ، حتما خود شما هم بار ها این کارو بدون اینکه بدونید انجام دادید اما هیچوقت به اهمیت این کار فکر کردین؟

بیاید باهم الگوریتم بازی سنگ کاغذ قیچی رو بنویسیم :

۱. اول از همه باید دو کاربر تعریف کنیم که بازی کنن.

۲. بعد باید برای هرکدوم از بازیکن ها یک شمارنده یا counter تعریف کنیم که امتیاز هارو برای ما بشمره.

۳.تو مرحله سوم باید برای کامپیوتر بگیم که بازیکنها چند دور قراره بازی کنن مثلا ۳ یا ۵ دور.

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

۵. حالا میایم به تعداد دور هایی که تعریف کردیم ، از بازیکن ها وروری میگیریم و به کامپیوتر میگیم بره به مرحله چهارم و بررسی کنه تو هر دور امتیاز برای کدوم بازیکن محاسبه میشه.

۶ . بعد از پایان همه ی دور ها برنامه ما باید شمارنده هارو بررسی کنه ، باهم مقایسه کنه و شمارنده بزرگتر رو پیدا کنه.

۷. امتیاز هر بازیکنی بیشتر بود برای ما چاپ کنه که اون بازیکن برنده شده.

۸ . اگر در پایان دور ها امتیاز هر دو مساوی بود، چاپ میکنیم مساوی شدید و بعد میریم مرحله سوم تا دوباره بازی کنن که بتونیم برنده مشخص کنیم.

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

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

مزایای الگوریتم نویسی برای برنامه ها همینه که اولا مراحل مرتب و منظم جلو میرن و در نهایت ما یک برنامه و کد تمیز خواهیم داشت. ممکنه پروژه ای بهمون پیشنهاد بشه که ما تا حالا مشابهش رو انجام ندادیم اما مطمئنا بخش های کوچیکی از کد رو تو تمرینهامون انجام دادیم ،‌اگر الگوریتم پروژه رو بنویسیم پیدا میکنیم که دقیقا کدوم بخش ها کد نویسی برامون ساده تر و تو کدوم بخش ها ممکنه به مشکل بخوریم.

با این راه حل در عین اینکه کد تمیزی خواهیم داشت ، سرعت کارمون هم بالا میره و این برای پروژه های فوری و مهم خیلی عالیه!

بریم سراغ فلوچارت یا روند نما یا نمودار جریا کار !

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

همونطور که مشخصه شروع و پایان برنامه با شکل دایره نمایش داده میشه ، دایره‌‌ی start شروع برنامه ی ماست.

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

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

الگوریتم ها و فلوچارت ها یک مسئله آکادمیک و ساده ست. باید بگم بیشتر کاربردشون برمیگرده به زمان ارائه نهایی پروژه . حتما میدونید که میگن کامنت مناسب نوشتن در کد ها یک نشونه ی کد خوب محسوب میشه.

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

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

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

امیدوارم از حرفامون استفاده خوبی کرده باشید.

روزتون خوش.