برنامه نویسی مقدماتی - جلسه شماره چهار - فلوچارت
برنامه نویسی مقدماتی - جلسه شماره چهار - فلوچارت
--------------------------------------------------------
در ادامه میخوام کمی در مورد فلوچارت به شما توضیح بدم. من همیشه طرفدار و علاقه مند به برنامه نویسایی بودم و هستم که قبل از نشستن پشت کامپیوتر و شروع کردن به برنامه نوشتن، اول یه کاغذ و قلم بر میدارن و در مورد مسئله ای که قراره براش برنامه بنویسن فکر میکنن و بعد سعی میکنن یک طرح کلی از کاری که قراره انجام بشه رو روی کاغذ پیاده میکنن. در واقع این دسته از افراد اول مسئله شون رو روی کاغذ حل میکنن. البته که ما تا اینجا با مسائل خیلی ساده و کوچکی درگیر بودیم. ولی برای اینکه به اهمیت کاغذ و قلم پی ببرید ، ازتون میخوام به مسئله های شماره سیزده و چهارده توجه کنید.
مسئله شماره سیزده :
الگوریتمی بنویسید که جوابهای حقیقی معادله درجه دوم و یک مجهولی زیر را به دست
آورد.
مسئله شماره چهارده : الگوریتمی برای سیستم بانکی ارائه دهید تا تضمین کند که بانک همه منابع خود را از دست نمیدهد. چون بانک همواره پول را به نحوی تخصیص میدهد که بتواند نیازهای بقیه مشتریان را برطرف کند، این الگوریتم باید تضمین کند که زمانی که مشتریان پول درخواست میکنند صندوق بانک در حالت امن قرار دارد (حالتی که اگر یک مشتری جدید درخواست پول کرد بانک پول کافی برای پرداخت داشته باشد). اگر درخواست مشتری باعث نشود که بانک حالت امن را ترک کند، مبلغ اختصاص میابد در غیر اینصورت مشتری باید صبر کند تا زمانی که مشتری های دیگر سپرده کافی قرار دهند.
اگه با کمی دقت به این دو تا مسئله نگاه کنیم متوجه میشیم که در هر دو مسئله باید شرایط مختلفی رو بررسی کنیم که همین تعدد شرایط باعث میشه تا راه حل مورد نظر مثل یک درخت شاخ و برگ های جدید پیدا کنه. و به قولی اندازه مسئله به قدری رشد کنه که اگر همه جوانب رو با دقت در نظر نگیریم، پاسخ نهایی با خطاهای محاسباتی همراه بشه. مثلا در مسئله سیزده، باید ابتدا مقدار دلتا ( (b*b)-4ac ) رو محاسبه کنیم و با توجه به مقداری که به دست میاد در مورد چگونه ادامه دادن راه حل تصمیم بگیریم. همینطور در مسئله چهارده، خطای الگوریتم میتونه بانک رو ورشکسته کنه.
تذکر : منظور از اندازه مسئله تعداد خطهای صورت مسئله نیست! پاسخ یک مسئله یک خطی می تواند هزاران برابر یک مسئله چند خطی باشد. در واقع با کسب دانش و تجربه می توان درباره حل یک مسئله به درستی اظهار نظر کرد.
تذکر : مسئله شماره سیزده را در ادامه بررسی میکنیم و حل مسئله شماره چهارده را هم در ترمهای بالاتر و در درس "مفاهیم سیستم عامل" خواهید دید.
برای درک بهتر الگوریتم و سادگی در دنبال کردن دستورات آن، از یک سری شکل استفاده می کنیم که به آن فلوچارت می گویند. در واقع با استفاده از فلوچارت درک مسئله برای ما ساده تر می شود. اگر بتوانیم برای یک مسئله فلوچارت صحیحی رسم کنیم ، برنامه نویسی برای آن مسئله بسیار ساده تر خواهد شد. در ادامه به معرفی این شکل ها می پردازیم. و فلوچارتی برای مسئله شماره سیزده رسم خواهیم کرد.
* برای نمایش عملیات محاسباتی و انتصاب از مستطیل استفاده می کنیم، مانند :
* از متوازی الاضلاع برای دریافت اطلاعات و مقادیر از ورودی استفاده می کنیم، مانند :
* برای نشان دادن دستورات شرطی، از لوزی استفاده می شود ، مانند :
معادل است با IF i > o THEN GOTO #Yes ELSE GOTO #No
همان طور که در شکل بالا مشاهده میشود، یک فلش ورودی این دستور شرطی است و بنابر نتیجه ی شرط، دو راه برای خروج وجود دارد. مقدار i یا بزرگتر از 0 است (فلش سمت راست) و یا کوچکتر مساوی 0 است (فلش سمت پایین) .
تذکر : تمامی این شکل ها ، شکل های استاندارد هستند و در همه جای دنیا همین معانی را دارند. در اینجا این شکل های اساسی و پرکاربرد به صورت کاملا مختصر معرفی شدند، و به یک سری شکل های دیگر اشاره نکردیم. در صورت تمایل می توانید در این مورد تحقیق کنید. البته کتابی تقریبا قدیمی هم در ایران چاپ شده، به نام "الگوریتم و فلوچارت" انتشارات مجتمع فنی تهران.
تذکر : به صورت کلی فلوچارت در علوم مهندسی و حتی در مدیریت کاربرد دارد و تنها محدود به برنامه نویسی نمی باشد. اگر به نام اون هم توجه کنیم به معنای "روند نما" هست. در واقع هر کجا که ما با یک روند عملیاتی مواجه بودیم از فلوچارت استفاده می کنیم (درست مثل یک نقشه ی گنج). البته ممکن است کمی در بیان شکل ها اختلاف وجود داشته باشد. اما باز هم تاکید میکنم توجه تون رو متمرکز خاصیت و کاربرد فلوچارت کنید. و از جزییات پرهیز کنید. برای آشنایی بیشتر می تونید سری هم به آدرس زیر بزنید :
http://en.wikipedia.org/wiki/Flowchart
نکته : میتونید از نرم افزار Microsoft Visio برای رسم فلوچارت استفاده کنید.
برای جمع بندی این موضوع و پایان دادن به این جلسه یک مسئله ساده را مطرح می کنیم و در انتها فلوچارت مسئله سیزده را رسم می کنیم.
مسئله شماره پانزده : فلوچارتی رسم نمایید که با دریافت یک عدد از ورودی، در صورتی که آن عدد زوج بود در خروجی عبارت even و در صورتی که عدد فرد بود در خروجی عبارت odd را نمایش دهد. (زمان لازم برای این تمرین 3 دقیقه)
یادآوری : عملگر mod که آن را با علامت % نیز نمایش می دهند، باقیمانده تقسیم یک عدد بر عددی دیگر را محاسبه می کند.
و در انتها فلوچارت مسئله شماره سیزده را نمایش می دهیم :
جلسه شماره چهار هم به پایان
رسید. خوب تمرین کنید. و از زندگیتون لذت ببرید. در جلسه بعد مطالب جدیدی را با هم
یاد می گیریم.