ساختارهای تصمیم و حلقه های تکرار در پاسکال
ساختارهای کنترلی
برنامه نویسی ساخت یافته، از ساختارهای کنترلی، برای کنترل روند اجرای برنامه استفاده می کند.
با استفاده از ساختارهای کنترلی پاسکال، می توان دستوراتی نوشت که دارای یک نقطه ورود و یک نقطه خروج باشند.
دستورات برنامه ممکن است 3 نوع ساختار کنترلی داشته باشند، که عبارتند از:
- ترتیب (تاکنون فقط از ساختارهای ترتیب استفاده شد، یعن دستوات برنامه به ترتیبی که تایپ می شدند اجرا هم می شدند.)
- تصمیم
- تکرار
ساختارهای تصمیم
در بعضی از برنامه ها لازم است، براساس شرایطی، تصمیم شود که چه مجموعه ای از دستورات باید اجرا شوند و چه مجموعه ای از دستورات نباید اجرا شوند.
دستور if
این دستور برای تصمیم گیری در مورد مقادیر یک عبارت منطقی مورد استفاده قرارمی گیرد.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
if شرط then
دستور
else
دستور;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
Then به معنی آنگاه
Else به معنی وگرنه
***وقتی کنترل اجرای برنامه به if می رسد،شرط موجود در if بررسی می شود، اگر دارای ارزش درستی باشد، دستور بعد از then اجرا می شود و اگر شرط دارای ارزش درستی نباشد، دستور بعد از else اجرا می شود.
نکته: اگر بعد از then و یا else بیش از یک دستور وجود داشته باشد، دستورات باید با begin شروع شوند و به end ختم.
مثال:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
if شرط then
begin
دستور1;
.
.
.
nدستور ;
end
else
begin
دستور1;
.
.
.
دستورn;
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
دستور case
علاوه بر دستور if از دستور case نیز می توان برای تصمیم گیری استفاده کرد.
وقتی که بخواهیم بر اساس مقادیر مختلف یک متغیر یا یک عبارت، تصمیم گیری های مختلفی داشته باشیم، از این دستور استفاده می کنیم.
به طور کلی، هر وقت تعداد انتخاب ها بر اساس مقادیر مختلف عبارت یا متغیری، بیش از3باشد، از case استفاده کنید، زیرا استفاده از ifهای تو در تو از خوانایی برنامه می کاهد.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
case عبارت of
دستور1:مقادیر1 ;
دستور2:مقادیر2 ;
.
.
.
nمقادیر:nدستور ;
else
Aدستور
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
شیوه اجرای دستور case :
ابتدا عبارت موجود در case ارزیابی می شود، اگر مقدارش با یکی از «مقادیر 1» برابر باشد، «دستور1» اجرا می شود و case خاتمه می یابد(همین جور تا n)حال اگر مقدار عبارت، با هیچکدام از مقادیر داده شده برابر نباشد، دستور موجود در قسمت else یعنی «دستورA» اجرا می شود.
نکته: اگر بعد از هر یک از مقادیر ذکر شده، بیش از یک دستور وجود داشته باشد، باید با begin شروع شود و به end ختم شود.
نکته: نوع مقادیر باید با نوع عبارت یکسان باشد.
نکته: قسمت else اختیاری است. به عبارت دیگر، دستور case می تواند فاقد else باشد. در این صورت، اگر مقدار عبارت، با هیچکدام از مقادیر ذکر شده برابر نباشند، هیچ دستوری اجرا نمی شود و کنترل از case خارج می شود.
ساختارهای تکرار
بسیاری از کارها هستند که ماهیت آنها تکراری است. حال به ساختارهایی که موجب تکار اجرای دستورات می شوند، ساختارهای تکرار گویند.
ساختارهای تکرار در پاسکال عبارتند از:
- for
- repeat
- while
ساختار تکرار for
در این ساختار، می توانیم مشخص کنیم که اجرای دستورات مورد نظرما، چند بار تکرار شوند.
حال به شمارنده ای نیاز داریم که تعداد دفعات اجرای دستورات را شمارش کند. شمارنده باید یک مقدار اولیه و یک مقدار نهایی داشته باشد.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
for مقدار اولیه=:شمارنده to مقدار نهایی do
begin
دستورات
End
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکته: اگر دستوراتی که باید در حلقه for تکرار شوند، بیش از یکی نباشند، نیاز به begin وend نیست.
نکته: کاربرد دیگر forبه صورت زیر می باشد:
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
for مقدار اولیه=:شمارنده downto مقدار نهایی do
begin
دستورات
End
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکته: در کاربرد اول دستور for، در هر بار اجرای دستورات، یک واحد به مقدار اولیه شمارنده اضافه می شود. در این حالت، چنانچه، مقدار اولیه بیش از مقدار نهایی باشد، حلقه تکرار اجرا نمی شود.
نکته: در کاربرد دوم دستور for، در هر بار اجرای دستورات، یک واحد از مقدار اولیه کم می شود. در این حالت، چنانچه مقدار اولیه، کمتر از مقدار نهایی باشد، حلقه تکرار اجرا نمی شود.
نکته: مقدار شمارنده در طول حلقه تکرار نباید توسط برنامه نویس تغییر کند.
نکته: پس از خروج از حلقه تکرار، مقدار شمارنده، آخرین مقداری است که به خود اختصاص خواهد داد.
نکته: اگر مقدار نهایی حلقه، با متغیری مشخص شود(یعنی مقدار ثابتی نباشد) و در داخل حلقه تغییر کند، تاثیری در تعداد دفعات تکرار اجرای دستورات ندارد. چون مقدار نهایی حلقه، فقط یکبار ارزیابی می شود(آن هم هنگام ورود به حلقه)
نکته: حلقه های تکرار for ممکن است به صورت تو در تو باشند. یعنی، در داخل حلقه for می توان حلقه for دیگری استفاده کرد.
در این صورت ابتدا داخلی ترین حلقه تکرار اجرا می شود و سپس به ترتیب، حلقه های خارجی اجرا می گردند.
ساختار تکرار while
این ساختار معمولا برای مواردی به کار می رود که تعداد دفعات تکرار اجرای دستورات از قبل مشخص نباشد. (البته می توان آنرا مانند for برای حلقه های تکراری که دفعات تکرار مشخصی دارند، به کار برد. دراین موارد، شمارنده حلقه تکرار، توسط برنامه نویس تغییر می کند.)
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
while شرط do
begin
دستوراتی که باید تکرار شوند
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکته: در کاربرد while چنانچه فقط اجرای یک دستور تکرار شود، نیازی به begin و end نیست.
روش اجرای دستور while:
شرط موجود در حلقه تکرار تست می شود، چنانچه ارزش درستی داشته باشد،کنترل برنامه وارد حلقه تکرار می شود و دستورات داخل حلقه تکرار اجرا می شوند. حال اگر شرط برقرار نباشد، دستورات حلقه تکرار اجرا نمی شوند.
شرط حلقه تکرار، باید در داخل حلقه تکرار نقض شود تا شرط ارزش درستی پیدا کند و کنترل برنامه از حلقه تکرار خارج شود و گرنه حلقه تکرار بی نهایت ایجاد می شود. یعنی دستورات داخل حلقه، تا بی نهایت بار می توانند اجرا شوند.
برای خروج از حالت حلقه های تکرار این چنینی باید کلید ctrl+Break را از صفحه کلید وارد کرد.
ساختار تکرار repeat
مانند موارد پیشین، برای تکرار اجرای دستورات به کار می رود.
<-- Iran Universities Software Students [elibom.ir] -->
<-- Start Code -->
repeat
دستورات
until شرط;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
روش اجرای دستور repeat:
وقتی کنترل اجرای برنامه به repeat رسید، دستورات داخل حلقه تکرار اجرا می شوند، با رسیدن به until شرط مربوط به آن تست می شود،حال اگر شرط ارزش نادرستی داشته باشد، اجرای دستورات تکرار می شود و گرنه کنترل اجرای برنامه به خارج از حلقه تکرار می رود.
تفاوت repeat و while :
- در repeat، چه شرط حلقه درست باشد، چه نادرست، دستورات حلقه حداقل یکبار اجرا می شوند.
- در while شرط حلقه در ابتدای حلقه ولی در repeat در انتهای حلقه تست می شود.
- اگر دستورات حلقه while بیش از یکی باشد باید از begin و end استفاده کرد، ولی در repeat اینطور نیست.
نکات کلی(جمع بندی):
- از حلقه تکرار for وقتی استفاده می شود که تعداد دفعات تکرار، از قبل مشخص باشد.
- شمارنده حلقه نمی تواند از نوع real یا string باشد.
- ازحلقه تکرار while و repeat وقتی استفاده می شود که تعداد دفعات تکرار، به مقدار یک شرط (درستی یا نادرستی) بستگی دارد.
- در while دستورات حلقه تکرار وقتی اجرا می شوند که شرط حلقه درست باشد.
- در repeat دستورات حلقه تکرار آنقدر اجرا می شوند تا شرط حلقه ارزش درستی پیدا کند. چون شرط حلقه در repeat، در انتهای حلقه تکرار تست می شود و دستورات حلقه حداقل یکبار اجرا می شوند.
دستورgoto:
موجب انتقال کنترل برنامه به نقطه دلخواهی از برنامه می شود.
goto برچسب
برچسب،عددی حداکثرچهاررقمی است که مشخص می کند، کنترل اجرای برنامه باید به کجا برود.
اعدادی که به عنوان برچسب در برنامه مورد استفاده قرار می گیرند، باید توسط دستور label در بخش تعاریف برنامه، قبل از تعریف ثوابت، اعلام شوند.
Label برچسبها
نکته: با دستور goto نمی توان از خارج از حلقه تکرار به یکی از دستورات داخل حلقه تکرار ارجاع داشت.
نکته: با دستور goto می توان از حلقه تکرار خارج شد. ( این کار پیشنهاد نمی شود)
نکته: اگر بخواهید از end دستورات مرکب ارجاع دهید، دستور قبل از end باید به (;) ختم شود.
(دستورات مرکب: مجموعه ای از دستورات است که بین behin و end وجود دارند.)
نکته: هیچگاه از goto در برنامه تان استفاده نکنید، زیرا موجب کاهش میزان خوانایی برنامه می شود.
دستور break
موجب خروج از حلقه تکرار می شود.
در حلقه های تو در تو، موجب خروج از داخلی ترین حلقه تکرار می شود.
کاربرد این دستور به صورت break; است.
*********************
خوب. آنچه که خواندید قستهای مهم و کلیدی از کتاب "برنامه نویسی به زبان پاسکال" نوشته "مهندس عین الله جعفر نژاد قمی" بود که به طور خلاصه تقدیم گردید.
ما از ارائه این متن ، تنها قصدی که داریم، آموزش مطالب بود و هیچ قصد خاص دیگری نداشتیم و نخواهیم داشت.
با تشکر