زیرالگوریتم
این مقاله نیازمند تمیزکاری است. لطفاً تا جای امکان آنرا از نظر املا، انشا، چیدمان و درستی بهتر کنید، سپس این برچسب را بردارید. محتویات این مقاله ممکن است غیر قابل اعتماد و نادرست یا جانبدارانه باشد یا قوانین حقوق پدیدآورندگان را نقض کرده باشد. |
در الگوریتمهایی که نوشته شدهاند،[۱] ملاحظه میکنیم که الگوریتم ممکن است از بخشهای تکرار شونده تشکیل شده باشد. محاسبه فاکتوریل اعداد، محاسبه قدر مطلق، بخش خواندن عناصر آرایه، بخش چاپ عناصر آرایه، و… از بخشهایی بودند که در الگوریتمها به وفور مورد استفاده قرار گرفتهاند. میتوان برای هر بخش از مسئله یک الگوریتم نوشت و سپس آنها را در الگوریتم کلی با هم ترکیب کرد. الگوریتمی که برای حل بخشی از مسئله نوشته میشود، زیراَلگوریتم نام دارد.
امتیازات زیر الگوریتمها
[ویرایش]نوشتن زیر الگوریتمها برای حل مسئله، امتیازاتی دارند که بعضی از انها را برمیشماریم:
۱. همکاری افراد را امکانپذیر میسازد، به طوری که یک مسئله را میتوان به چند بخش تقسیم کرد و نوشتن الگوریتم هر بخش را به عهده افراد مختلفی گذاشت و سپس ان الگوریتمها را با هم ترکیب کرد.
۲. از تکرار نوشتن دستور العملها جلوگیری میکند.
۳. عیبیابی و اشکالزدایی الگوریتمها سادهتر میشود.
۴. زیرالگوریتمهایی را که در یک الگوریتم نوشته شدند، به همان صورت یا با تغییر اندک میتوان آنها را در الگوریتمهای دیگر به کار برد.
جنبههای زیر الگوریتم
[ویرایش]هر زیر الگوریتم دارای دو جنبهاست:
۱. جنبه تعریف[۲]
۲. جنبه فراخوانی[۳]
جنبه تعریف زیر الگوریتم، مجموعه دستورهایی است که عملکرد زیر الگوریتم را مشخص میکند.
جنبه فراخوانی زیر الگوریتم، دستوری است که زیر الگوریتم را فراخوانی میکند. فراخوانی زیر الگوریتم با نام آن انجام میشود.
هر زیر الگوریتم دارای نامی است که توسط ان فراخوانی میشود. نامگذاری برای زیر الگوریتمها از قانون نام گذاری برای متغیرها[۴] تبعبت میکند.
هر الگوریتم برای ارتباط با زیر الگوریتم یا تبادل اطلاعات با آن، میتواند تعدادی از متغیرهای خودش را به زیر الگوریتم بفرستد یا اطلاعاتی را از الگوریتم دریافت کند. این اطلاعات را که بین زیر الگوریتم و الگوریتم تبادل میشود، پارامتر میگویند؛ بنابراین پارامترها میتوانند ورودی یا خروجی باشند. پارامترهای ورودی آنهایی هستند که از الگوریتم به زیر الگوریتم فرستاده میشوند و پارامترهای خروجی آنهایی هستند که از زیر الگوریتم به الگوریتم فرستاده میشوند. زیر الگوریتم ممکن است هم دارای پارامتر ورودی و هم خروجی باشد، ممکن است فقط پارامتر ورودی داشته باشد، ممکن است فقط پارامتر خروجی داشته باشد، یا اصلاً پارامتر نداشته باشد. اگر زیر الگوریتم دارای پارامتر باشد، اسامی پارامترها در جلوی نام زیر الگوریتم و در داخل پرانتز قرار میگیرند و با کاما(,) از هم جدا میشوند. به عنوان مثال، زیر الگوریتم زیرا در نظر بگیرید:
نام این زیر الگوریتم MAX است و دارای سه پارامتر X,Y،Z میباشد.
انواع زیرالگوریتمها
[ویرایش]الگوریتمی که زیر الگوریتمی را فراخوانیمیکند، انتظار دارد که زیر الگوریتم مقادیری را به الگوریتم فراخوان برگرداند. زیر الگوریتمها را میتوان به دو دسته تقسیم کرد:[۵]
۱. زیر الگوریتمهای تابع(FUNCTION)
۲. زیر الگوریتمهای زیر روال(SUBROUTINE)
زیر الگوریتمهای تابع، فقط میتواند یک مقدار را به الگوریتم فراخوان برگردانند. این مقدار، در نامشان قرار میگیرد؛ لذا در بدنهٔ الگوریتم، نام تابع، حداقل یکبار باید مقدار گیرد.
زیر الگوریتمهای زیر روالمیتوانند هیچ مقداری را برنگردانند، یک مقدار یا چند مقدار را برگردانند؛ ولی باید دقت داشت که زیر الگوریتمهایی که یک مقدار را برمیگردانند، بهتر است به صورت تابع نوشته شوند.
خصوصیات زیرالگوریتمهای تابع
[ویرایش]۱. تمام دستورها الگوریتم را میتوان در آن نوشت.
۲. فقط یک مقدار را به الگوریتم اصلی منتقل میکند.
۳. تغییرات بروی پارامترها را به الگوریتم اصلی منتقل نمیکند.
۴. نام زیر الگوریتم، مقدار را به الگوریتم فراخوان منتقل میکند. پس باید نام زیر الگوریتم حتماً در سمت چپ قرار گیرد.
خصوصیات زیر الگوریتمهای زیر روال
[ویرایش]۱. تمام دستورها الگوریتم را میتوان در آن نوشت.
۲. صفر یا بیش از یک خروجی را به الگوریتم اصلی منتقل میکند.
۳. تغییرات بر روی پارامترها به الگوریتم اصلی منتقل خواهد شد.
۴. به نام زیر الگوریتم رویه هیچ وقت مقداری نسبت داده نمیشود.
همانطور که مشاهده کردید میتوان یک زیر الگوریتم تابع را به فرم زیر الگوریتم رویه نوشت ولی هیچ وقت نمیتوان وقتی بیش از یک خروجی داریم از زیر الگوریتم تابع استفاده کنیم.
نمادهای زیر الگوریتم در فلوچارت
[ویرایش]برای فراخوانی زیر الگوریتم، و برگشت از زیر الگوریتم، از نمادهای زیر در فلوچارت استفاده میشود.
۱. از مستطیل برای فراخوانی زیر الگوریتم (داخل آن نام زیر الگوریتم (مثلاً: (MAX(X,Y,Z))
۲. از بیضی برای برگشت به الگوریتم
پانویس
[ویرایش]- ↑ ز جمله: الگوریتمی که تعداد N عدد صحیح را میخواند و در آرایهای قرار میدهد و در آخر مجموع انحراف از میانگین این اعداد را محاسبه کرده و به خروجی میبرد،.... و مثالهایی از این قرار.
- ↑ Definition aspects
- ↑ call aspects
- ↑ «نسخه آرشیو شده» (PDF). بایگانیشده از اصلی (PDF) در ۴ فوریه ۲۰۱۴. دریافتشده در ۱ ژوئیه ۲۰۱۲.
- ↑ «نسخه آرشیو شده» (PDF). بایگانیشده از اصلی (PDF) در ۶ اوت ۲۰۱۱. دریافتشده در ۱ ژوئیه ۲۰۱۲.
منابع
[ویرایش]- http://www.ida.liu.se/~mohto/OO_Modelica_course/Lecture06%20-%20Algorithms%20and%20Functions.pdf
- https://web.archive.org/web/20140204023511/https://cleo.whi.org/data/Supplemental%20Documentation/menoage.pdf
- http://www.cse.iitd.ernet.in/~ssen/csl356/notes/root.pdf
این نوشتار نیازمند پیوند میانزبانی است. در صورت وجود، با توجه به خودآموز ترجمه، میانویکی مناسب را به نوشتار بیفزایید. |