الگوریتم - شبه کد 2

مثال ۱: الگوریتمی بنویسید که طولی را برحسب سانتی متر از کاربر گرفته و آن را تبدیل به متر کند.
حل: ابتدا به الگوریتم آن توجه کنید:
۱-شروع
۲- a را بگیر
۳- a = a * 100
4- a را چاپ کن.
۵- پایان
توضیح: تنها موردی که ممکن است نیاز به توضیح داشته باشد خط سوم است. این یک ویژگی در الگوریتم و به تبع زبان های برنامه نویسی است.زبان های برنامه نویسی این ویژگی را به متغیرها می دهند که در طول اجرای برنامه هربار مقدار جدیدی را بپذیرند و مقادیر قبلی جای خود را به مقادیر جدید بدهند. در خط ۳ از این ویژگی استفاده کرده ایم. ابتدا عدد a را که توسط برنامه از کاربر گرفته شده است را ضرب در ۱۰۰ کرده سپس آن را مساوی a قرار می دهیم تا جای گزین مقدار قبلی a یعنی عدد گرفته شده توسط کاربر شود. البته در این الگوریتم هیچ نیازی به قرار دادن a * 100 در همان متغیر a نداشتیم و می توانستیم این مقدار را در یک متغیر دیگر مانند b قرار دهیم و سپس در خط ۴ دستور می دادیم که b را چاپ کند. اما در بعضی از الگوریتم ها استفاده از این ویژگی ضروری است و بدون استفاده از این ویژگی حل مسئله امکان پذیر نیست. در ادامه چنین مثال هایی را خواهید دید.
اما قبل از شروع مثال های دیگر باید با یک دستورالعمل بسیار مهم و پر کاربرد در الگوریتم و فلوچارت آشنا شوید:

چگونگی ایجاد حلقه ی تکرار و استفاده از آن در حل مسائل:
در بسیاری از برنامه ها شما مجبور هستید که دستورالعملی را چندین بار به صورت محدود و یا نامحدود تکرار کنید. در این صورت برای انجام این کار الگوریتم و فلوچارت راه ساده ای را به شما پیشنهاد می کند و آن ایجاد حلقه ی تکرار است. اهمیت حلقه های تکرار در مثال های زیر بیش از پیش برای شما آشکار خواهد شد. ایجاد حلقه ی تکرار بدین صورت است به عنوان مثال شما مجموعه ای از دستورالعمل ها را از خط ۱۰۰ تا ۱۰۵ برنامه ی فرضی خود نوشته اید و در خط ۱۰۵ نیاز دارید که در صورت برقراری یک شرط خاص (یا با دستورالعمل اگر مشخص می شود) و یا تعداد دفعات تکرار دلخواه خطوط ۱۰۰ تا ۱۰۵ دوباره اجرا شوند. این خطوط تا زمانی که شما شرطی برای بیرون آمدن از حلقه ی تکرار نگذارید و یا تعداد دفعات آن را محدود نکنید ادامه خواهند یافت. برای برقراری حلقه کافی است در خط ۱۰۵ برنامه ی فرضی خود عبارت (برگرد به ۱۰۰) را بنویسید و برنامه به خط ۱۰۰ برگشته و در صورتی که دوباره به ۱۰۵ برود بازهم ارجاع به خط ۱۰۰ داده می شود و در صورتی که شرطی برای نقض این حلقه قرار ندهید، حلقه تا بی نهایت ادامه خواهد یافت (این علم موجب متوقف شدن برنامه می شود و اگر الگوریتمی شامل چنین حلقه ای باشد جزو الگوریتم های استاندارد و درست نیست!) به مثال های بعدی که از حلقه ی تکرار استفاده شده است دقت کنید.

مثال ۲: الگوریتمی بنویسید که اعداد ۱ تا ۱۰۰۰ را چاپ کند.
توضیح: دقت کنید فردی که این ذهنیت برایش پیش بیاید که به راحتی و به صورت دستی می توانیم به کامپیوتر بگوییم  (اعداد ۱،۲،۳،۰۰۰،۱۰۰۰ را چاپ کن) و یا اینکه کلیه اعداد را بنویسیم و در پایان دستور نمایش آن را صادر کنیم راه حل منطقی و درستی به نظر نمی آید. و اصولا راه حل اول اصلا امکان پذیر نیست چون گفتیم که یک الگوریتم باید کاملا مشخص باشد و سه نقطه (۰۰۰) اصلا برای رایانه مفهومی ندارد. ولی راه حل دوم با صرف وقت زیاد (نوشتن اعداد از ۱ تا ۱۰۰۰) امکان پذیر است اما تنها در صورتی که به ما نگویند که الگوریتمی بنویسید که اعداد ۱ تا ۱۰۰۰۰۰۰۰۰۰۰ را چاپ کند !!!
خوب همان طور که حدس زده اید تنها راه منطقی و استاندارد برای حل این مسئله و نوشتن الگوریتم آن استفاده از حلقه ی تکرار است. ابتدا به الگوریتم و سپس به توضیح آن دقت کنید:
۱-شروع
۲- عدد ۱ را در a قرار بده (یا اینکه a=1)
3- a را چاپ کن.
۴- a+1 را در a قرار بده. (یا اینکه a=a+1)
5- اگر a<1001 باشد آنگاه برگرد به خط ۳ در غیراین صورت برو به ۶
۶- پایان.

توضیح: الگوریتم را باید به دقت بررسی کنیم. و حتما ابهاماتی برای شما پیش آمده است. الگوریتم در خط ۱ شروع شده و در خط ۶ پایان می یابد. در خط ۲ با یک تیر دو نشان زده ایم. اول اینکه متغیر a را تعریف کرده ایم ثانیا عدد ۱ را به آن نسبت داده ایم. پس حال اگر برنامه عدد a را چاپ کند ، ۱ را نمایش خواهد داد.پس خط ۳ عدد ۱ را چاپ می کند. در مورد خط ۴ باید توجه کنید که از ویژگی که در مثال ۱ گفته شد استفاده کرده ایم یعنی یک مقدار جدید با استفاده از خود متغیر a به صورت a+1 ایجاد کرده و دوباره در a قرار داده ایم. این عمل موجب جایگزین شدن مقدار جدید به جای مقدار قبلی در متغیر a می شود.ابتدا a که اکنون شامل عدد ۱ است را با ۱ جمع کرده (۲) و سپس دوباره در a قرار می دهیم. این عمل باعث جایگزین شدن مقدار ۲ به جای ۱ در متغیر a می شود. پس بعد از پایان خط ۴ ، متغیر a شامل عدد ۲ خواهد بود. حال به سراغ  خط اصلی یعنی خط ۵ می رویم. در خط ۵ یک شرط با عبارت شرطی (اگر… آنگاه…درغیراینصورت…)چک می شود. این عبارت ، یعنی (اگر a<1001 باشد آنگاه برگرد به ۳) یک حلقه ی تکرار بین خطوط ۳ تا ۵ ایجاد می کند. یعنی تا زمانی که a (که در هر بار اجرای حلقه یک واحد به آن اضافه می شود) کوچکتر از ۱۰۰۱ باشد حلقه اجرا خواهد شد و زمانی که a برابر ۱۰۰۱ باشد ، ۱۰۰۱ چاپ نشده و برنامه شرط در غیر اینصورت را اجرا خواهد کرد. دقت کنید که نیازی به ذکر قسمت (درغیراینصورت) نداشتیم. چون در صورت درست نبودن شرط برنامه خود به خود به خط بعدی منتقل می شد و برنامه در خط ۶ پایان می پذیرفت. اما در مورد اینکه چرا عدد ۱۰۰۱ را نوشته ایم باید یک بار برنامه را همانند رایانه اجرا کنیم. فرض کنید عدد a به ۹۹۹ رسیده است و خط ۳ را اجرا کرده و عدد ۹۹۹ را نمایش داده است. حال در خط چهارم مقدار a به ۱۰۰۰ می رسد. ما خط ۵ را به صورت می توانستیم بنویسیم تا عدد ۱۰۰۰ را نیز چاپ کند ، یکی a<1001 و دیگری a<=1000 به معنای a کوچکتر یا مساوی ۱۰۰۰ است.

حال سعمی می کنیم یک مثال نسبتا سخت تر از مثال ۲ را بررسی کنیم. امیدوارم استقبال کنید.

مثال ۳: الگوریتمی بنویسید که یک عدد را از کاربر گرفته و فاکتوریل آن را محاسبه و نمایش دهد.
بدون هیچ توضیحی حلقه ی تکرار مربوطه و الگوریتم را نوشته و سپس در مورد آن بحث می کنیم:
۱- شروع
۲- عدد a را بگیر.
۳- قرار بده n=1
4- اگر a-n>=1 و n=1 آنگاه قرار بده b=(a-n)*a
5- اگر a-n>=1 و n>1 آنگاه قرار بده b=(a-n)*b
6- قرار بده n=n+1
7-اگر a-n>=1 آنگاه برگرد به خط ۴
۸- عدد b را چاپ کن.
۹- پایان
توضیح: واضح است که برنامه در خط ۱ شروع و در خط ۹ پایان می یابد. همان طور که دقت می کنید خطوط ۴ تا ۷ برنامه تشکیل یک حلقه را می دهند و تا زمانی که شرط خط ۷ نقض نشود برنامه ادامه خواهد یافت. در خط ۲ برنامه عددی دلخواه را از کاربر می گیرد و در خط ۳ متغیر عددی n را تعریف می کند و به آن مقدار ۱ را نسبت می دهد. خط های بعدی باید به دقت بررسی شوند. در خط ۴ و ۵ دو شرط مشابه تعریف می شوند و تنها تفاوت آن ها در ۱ بودن یا نبودن متغیر n است که در شرط ۴ اگر n=1 باشد (که همواره برای اولین بار این شرط بررسی می شود و سپس در برگشت های بعدی حلقه شرط ۵ بررسی می شود) متغیر دیگری به نام b تعریف می کند و یک عدد کمتر از a را در a ضرب کرده و در b قرار می دهد. و در خط ۷ هم حلقه کامل می شود.
برای بررسی بهتر الگوریتم یک عدد فرضی را در نظر می گیریم و تمام مراحل الگوریتم را مانند رایانه بر روی آن انجام می دهیم.به عنوان مثال کاربر عدد ۵ را وارد می کند و برنامه هم طبق دستورالعمل ما در خط ۲ این عدد را به متغیر a نسبت می دهد. در خط ۳ متغیر n تعریف شده و مقدار ۱ را می گیرد. مسلما در این مرحله شرط خط ۴ درست است چرا که a-n (که چون n=1 و a=5 است) برابر ۴ بوده و بزگتر از ۱ است پس حاصل a-n که برابر ۴ است در a یعنی ۵ ضرب می شود و در متغیر b قرار داده می شود تا مقدار اولیه ی متغیر a که در مراحل بعدی مورد نیاز است دچار تغییر نشود. در این مرحله چون n=1 است واضح است که خط ۵ اجرا نمی شود و در خط ۶ یک عدد به مقدار n اضافه می شود و تبدیل به ۲ می شود و چون a-n که در اینجا ۲-۵=۳ است .و بزرگتر از ۱ پس خط ۷ نیز دزست بوده و برنامه به خط ۴ بر می گردد (البته می توانید به خط ۵ ارجاع بدهید چون مطمئن هستیم عددی که بعد از ۱ در n قرار می گیرد چون طبیعی است بزگتر از ۱ خواهد بود) حال a-n برابر ۳ و n>1 است پس خط ۵ اجرا می شود یعنی مقدار a-n که حالا ۳ است در عدد قبلی b که ۵*۴=۲۰ است ضرب می شود و در b قرار می گیرد. پس b اکنون شامل عدد ۶۰ است. و سپس n=3 می شود و حلقه به همین منوال اط خط ۴ تکرار خواهد شد تا جایی که n=5 شود. در این صورت a-n برابر صفر خواهد شد (چون عدد گرفته شده ۵ بود) و شرط های ۴ و ۵ و تبع ۷ نقض می شوند و برنامه از حلقه خارج می شود و خط ۸ اجرا شده و عدد نهایی که در b قرار گرفته است نمایش داده می شود و برنامه توسط خط ۹ به پایان می رسد و خروجی تحویل کاربر داده می شود.

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


مطالب مشابه :


الگوریتم - شبه کد 2

و در خط ۷ هم حلقه کامل می شود. برای بررسی بهتر الگوریتم یک عدد فرضی را در نظر می گیریم و تمام




جواب سوالات تمرینات شماره یک سری دوم

عدد طبیعی n را تام یا کامل گویند هرگاه زیر بدست آورید.الگوریتم را تا سه جمله




آموزش الگوریتم و فلوچارت

در خط ۲ الگوریتم ۲ عدد دلخواه a و b را می گیرد و در آن ها قرار می و در خط ۷ هم حلقه کامل می شود.




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

سوالات الگوریتم که آنقدر عدد از ورودی بگیرد را گرفته تعیین کند که آیا کامل




آموزش الگوریتم و برنامه نویسی

رفتن به محل کار.مثلا روش مصرف دارو تا از بین رفتن کامل عدد بزرگترین الگوریتم های که




الگوریتم

عدد بعدی را به هر حال، چون چارلز بابیج هرگز موتور تحلیلی خود را کامل نکرد، این الگوریتم بر




Algorithm

چاپ عدد ورودي به شرط اول بودن عدد ( به کمک مجموع مقسوم عليه ) Cls. Let S =0. Input N. آموزش کامل




توانایی حل مسائل و الگوریتم و فلوچارت

:: تکنولوژی آموزشی :: - توانایی حل مسائل و الگوریتم و فلوچارت - وبلاگ سعید لطیفی - :: تکنولوژی




برچسب :