توسعهدهنده Flutter | وبسایت شخصی: misaghpour.ir
الگوریتم و فلوچارت به زبان ساده
مقدمه
میگن هیچ کاری رو نمیشه بدون داشتن یه طرح و نقشهای انجام داد. از کارای سادهای گرفته مثل پخت یه کیک تا کارایی مثل برنامهنویسی! در واقع هر کاری که ما میخوایم انجام بدیم نیاز به یه دستورالعمل و یا نقشه داریم. برای مثال همونطور که میدونید یه ساختمون زیبا فقط از روی هم چیده شدن چند تا آجر ساخته نشده، بلکه نیاز به یه نقشهای داشته و در واقع همون نقشه باعث زیبایی اون شده. در برنامهنویسی هم همینطوره. صرفا به نوشتن چند تا خط کد نمیشه گفت که ما یه برنامه مناسبی داریم. بلکه نیاز به یه طرح و نقشهای داریم. به این نقشه و طرح اصطلاحا الگوریتم گفته میشه. در این مقاله قصد داریم تا مفهوم الگوریتم و فلوچارت رو به زبان ساده بررسی کنیم. با ما همراه باشین.
الگوریتم چیست؟
الگوریتم به بیان ساده یعنی دنبالهای از مراحل که برای حل یه مساله مشخص تعریف میشه. البته این یکی از ساده ترین تعاریفی هستش که میشه براش در نظر بگیریم. ناگفته نمونه که همین الگوریتم یه واحد درسی توی رشته مهندسی کامپیوتر هستش که میشه گفت درس نسبتا سخت و مفهومیه و توی کنکور ارشد هم تستهای نسبتا آبداری ازش میاد! توی اون درس بر خلاف این مقاله شما با انبوهی از فرمولها و تعاریف قلمبه سلمبه مواجه میشید که برای درک و فهم اونا لازمه چندین بار کتاب و یا جزوه رو مرور کنید. یادم میاد زمانی که من این درس رو داشتم وقتی استاد هم درس میداد خودش هم گاهی اوقات متوجه نمیشد و فقط یه کاغذ دستش بود و فرمولا رو مینوشت و ما هم همینطور گیج و واج نگاش میکردیم، بدون اون که از درس چیزی متوجه بشیم. خب بگذریم. اینا رو گفتم تا بدونید با چه مفهومی کله گندهای روبرو هستید ? اما نگران نباشید از اونجایی که محوریت این وبسایت دانش کامپیوتر به زبان ساده هستش، سعی میکنم که توی این مقاله این مفاهیم رو به بیان روانی توضیح بدم.
برای سادگی هر چه بهتر این مقاله اجازه بدین که یه مثال رو در نظر بگیریم و تا پایان مقاله با استفاده از همین مثال مفاهیم خودمون رو پوشش بدیم.
دستورالعمل پخت کیک
جالبه نه! ما داریم درباره مفاهیم کامپیوتر و برنامهنویسی صحبت میکنیم اما یه گریزی هم به آشپزی میزنیم ?
خب همونطور که میدونید و یا قبلا تجربه پخت کیک رو داشتید، پختن کیک یه سری ابزارها و لوازمی رو نیاز داره. یه سری مواد اولیهای رو نیاز داره و در ادامه هم باید یه سری کارها و عملیاتی رو روی این مواد اولیه انجام بدیم تا در پایان یه خروجی که همون یه کیک لذیذ میشه رو داشته باشیم. خب همونطور که معلومه پختن کیک یه روال محسوب میشه. در واقع میشه گفت که برای پختن کیک میشه یه الگوریتم تعریف کرد. اما به راستی یه الگوریتم مناسب چه ویژگیهایی باید داشته باشه؟
ویژگیهای الگوریتم خوشتعریف
به طور کلی الگوریتمها دارای چهار تا مشخصه هستند:
ورودی (input)
هر الگوریتمی باید دارای یه سری ورودی باشه، البته گاهی اوقات هم لازم نیس. برای مثال در الگوریتم پختن یه کیک ورودیهای ما مواد اولیهای مثل آرد، شیر، تخم مرغ و… هستند. توی برنامهنویسی این ورودیها میتونند شامل انواع دادهها از قبیل عدد، رشته، لیست و… باشند.
خروجی (output)
از هر الگوریتمی انتظار میره که در پایان حداقل یه خروجی رو برگردونه. به هر حال هیچی که نمیشه! مثلا در الگوریتم پختن کیک، خروجی ما یه قالب کیک خوشمزه و لذیذه! در برنامهنویسی هم خروجی انواع متفاوتی داره. خروجی ما میتونه در یه متغیر یا فایل ذخیره بشه و یا در صفحه نمایش نشون داده بشه.
قطعیت (definiteness)
قطعیت یعنی شفاف و بدون ابهام بودن. به عبارتی الگوریتم ما برای هر نوع ورودی معتبری باید یه روال خاصی رو داشته باشه و مبهم و گنگ نباشه.
کاملبودن (finiteness)
کاملبودن یعنی الگوریتم ما بعد از انجام یه تعداد گامها باید تموم بشه. و اگه مثلا بیفته توی یه حلقه بینهایت که هیچ وقت هم تموم نشه، اون وقت دیگه به اون الگوریتم کامل نمیگن.
روشهای اجرای الگوریتمها
الگوریتمها به طور کلی از سه نوع برای کنترل ساختارها استفاده میکنند.
- متوالی (دنبالهای): یعنی یه سری از گامها به ترتیب و بدون هیچ قید و شرطی پشت سر هم اجرا میشن.
- شعبهای (انتخابی): در این جا در حین پشت سر گذاشتن گامهای الگوریتم به یه سری دو یا چند راهی برمیخوریم که با توجه به صحیح بودن شرطهای مربوطه یه راه رو میریم. مثل اگه فلان شرط برقرار بود مسیر آ رو برو، در غیر این صورت مسیر ب رو ادامه بده. توی برنامهنویسی میتونیم با استفاده از دستورات شرطی مثل if اونا رو پیادهسازی کنیم.
- حلقوی (تکرار): در این روال مادامی که یه شرطی برقرار باشه یه سری کارها و عملیات تکرار میشه. در زبانهای برنامهنویسی مثل پایتون میتونیم با استفاده از حلقههای for یا while این بخشها رو پیادهسازی کنیم.
چگونه یک الگوریتم بنویسیم؟
خب بعد از این که با تعریف الگوریتم و مزایای اون آشنا شدیم، بیاین با هم دیگه مراحل نوشتن یه الگوریتم در برنامهنویسی رو توضیح بدیم. تعداد مراحل رو میشه به چهار قسمت تقسیم کرد که در ادامه بیان شدهاند.
تعریف ورودی
در اولین مرحله ما باید ورودیهای خودمون رو تعیین کنیم. ورودی در واقع همون اطلاعات اولیهای هستش که ما در ابتدای برنامه به الگوریتم بدیم. در برنامهنویسی این ورودیها انواع مختلفی میتونه باشه؛ از عددی گرفته تا متنی و همچنین دادههای تکی تا لیستی. توی مثال پخت کیک هم که همون مواد اولیه ما میشن.
استفاده از متغیرها
اگه دقت کنید ما توی همین مثال پخت کیک، برای انجام این کار از ظرفهای مختلفی برای انتقال یا ترکیب مواد اولیهمون استفاده میکنیم. در دنیای برنامهنویسی این ظرفها همون متغیرها هستند. به عبارتی ما برای نگهداری دادهها از متغیرها کمک میگیریم چون گاهی اوقات بهتره که نسخههای مختلفی از دادهها رو ذخیره داشته باشیم که در این جا چگونگی استفاده از متغیرها برامون اهمیت پیدا میکنه.
پردازشها و عملگرها
همونطور که میدونید برای پختن کیک نیاز به یه سری ابزارها داریم و یه سری فعالیتهایی رو باید به ترتیب انجام بدیم. مثلا یه جا باید موادمون رو هم بزنیم. توی یه مرحله باید یه سری مواد جدیدی رو اضافه کنیم و خلاصه کارهای مرتبط دیگه. در الگوریتمهای برنامهنویسی هم ما باید روی اطلاعاتمون یه سری بلاهایی رو بیاریم! و یا به عبارتی برای اینکه یه خروجی مناسب داشته باشیم باید با استفاده از عملگرهای مناسب یه سری پردازشها و عملیاتی رو انجام بدیم. عملیاتی مثل محاسبات ریاضی، ترکیب دادهها و بررسی شرطها، تکرار حلقهها و…
نمایش خروجی
و بالاخره آخرین مرحله الگوریتم، نمایش خروجی هستش. همونطور که قبلا هم اشاره کردم خروجی میتونه مثلا توی نمایشگر چاپ بشه، میتونه یه فایل و یا یه مقدار باشه.
خب تا این مرحله ما با نحوهی طراحی الگوریتمها به زبان ساده آشنا شدیم. البته در مسایل و چالشهای واقعی دنیای کامپیوتر طراحی الگوریتم به این سادگیها هم نیست. همونطور که گفتم زمانی که من درس طراحی الگوریتم داشتم گاهی اوقات درک و فهم یه الگوریتم آماده که از قبل توسط یه بنده خدایی نوشته بود دشوار بود! دیگه دشواری طراحی اون الگوریتمها که هیچی!
در ادامه حتما سوال میپرسین که چه جوری این الگوریتمها رو بنویسیم. جواب: هر جور دوست داری! در نوشتن الگوریتمها میشه اصطلاحا اونا رو به صورت شبه کد نوشت. لازم نیس که این شبه کد توسط کامپیوتر با همون فرمت اجرا بشه. در همین سطح که ما خودمون متوجه بشیم کافیه. برای اینکه با نوشتن الگوریتم آشنا بشین کافیه که یه سری به کتابهای آشپزی بزنین. اونها پر هستند از انواع دستورالعملهای پخت غذا. بله اونها هم نوعی الگوریتم هستند! الگوریتم فقط توی رشته کامپیوتر که نیستش بلکه در دنیای واقعی هم وجود دارند!
بازنویسی گرافیکی الگوریتمها
حتما میدونید که قدرت تصاویر و نمادها به مراتب بیشتر از نوشتهها و کلماتاند. تا به اینجا ما نحوهی نوشتن الگوریتمها رو به صورت شبه کد معرفی کردیم. اما گاهی اوقات دنبال کردن این الگوریتم کمی دشواره و بهتره که از نمادهای گرافیکی استفاده کنیم. به این بازنویسی الگوریتمها اصطلاحا فلوچارت گفته میشه.
فلوچارت چست؟
فلوچارت به بیان ساده یه نمایش گرافیکی از مراحل حل یه مساله هستش. با استفاده از فلوچارت ما میتونیم الگوریتمهای خودمون رو در قالب نمادهای گرافیکی بازنویسی کنیم. تفاوت فلوچارت و الگوریتم مثل تفاوت نقشه و آدرس متنی هستش. به عبارتی الگوریتمهایی که به صورت شبه کد نوشته شدهاند رو میشه مثل یه آدرس متنی در نظر گرفت در صورتی که فلوچارت رو میشه نقشهی همون آدرس در نظر گرفت.
نمادهای فلوچارت
یه استانداردی برای نمایش نمادها در فلوچارت وجود داره که در جدول زیر این نمادها به همراه کاربرد اونا جمعآوری شدند.
تصویر بالا فقط یه طرح کلی از استفاده نمادها در فلوچارت هستش. که البته هیچ لزومی نداره که مثلا این نمادها با این ترتیب نوشته بشن. گاهی اوقات بعضی از نمادها مثل شرط رو لازم نداریم یا مثلا گاهی اوقات ترتیب استفاده از اونا در مسایل دیگه مختلفه.
چند مثال کاربردی
حالا که با مفاهیم الگوریتم و فلوچارت آشنا شدیم اجازه بدین تا چند تا مثال رو با هم دیگه بررسی کنیم تا درک بهتری از اونا داشته باشیم.
الگوریتم جمع دو عدد
میتونم بگم این یکی از سادهترین الگوریتمها هستش اما با این وجود اجازه بدین که یه الگوریتم و بعد از اون فلوچارت مرتبط با اون رو رسم کنیم.
یافتن کوچکترین مقدار دو عدد
جمعبندی
خب به پایان این مقاله رسیدیم. در این مقاله سعی شد تا به بیان ساده الگوریتم رو توضیح بدیم. و اگه دقت کرده باشین الگوریتم مفهوم جدیدی نیستش و ما روزانه دستورالعملهای زیادی رو انجام میدیم بدون اینکه نیاز باشه طرح اونا رو رسم و حتی درباره اونا فکر کنیم. اما در دنیای کامپیوتر و برنامهنویسی که حل مسایل از مهمترین چالشهای ماست طراحی الگوریتمهای مفید اهمیت پیدا میکنه.
منبع: وبسایت شخصی محمدحسین میثاقپور - الگوریتم و فلوچارت به زبان ساده
مطلبی دیگر از این انتشارات
مقدمه ای بر آموزش یادگیری ماشینی با OpenCV
مطلبی دیگر از این انتشارات
پایتون: یک زبان برنامه نویسی چند منظوره و قدرتمند
مطلبی دیگر از این انتشارات
اتو انکدر ها(بخش اول)