1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش پاسکال بخش سوم : آموزش دستورات کنترلی و حلقه ها در پاسکال

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن Pascal

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]

    دستورات کنترلی:
    دستور IF :
    در پاسکال یک ساختار انتخابی ابتدایی شامل دستور IF است که در دستور همراه یک عبارت منطقی قرار می گیرد .دستور IF مشخص می کند که در یک حالت خاص ، کدام مجموعه از دستورات باید اجرا شوند.

    دستور if یک انتخابی:
    If condition then
    Statement -


    دستور if دو انتخابی:
    If condition then
    Statement1
    Else Statement2
    مثال: برنامه ای بنویسید که تعداد فرزندان و حقوق پایه و رتبه یک کارگر را از ورودی دریافت کرده و حقوق کلی او را بر اساس فرمول زیر حساب کند؟

    کسریها - مزایا + بیمه = حقوق کل
    5*رتبه+1000* تعداد فرزندان =مزایا
    مالیات+بیمه=کسریها

    بیشتر
    کمتر یا مساوی 2
    تعداد فرزند

    تعداد فرزندان
    1000
    بیمه

    هر چیزی دیگر
    0 تا 20
    رتبه

    حقوق پایه
    حقوق پایه*100/10
    مالیات
    Program salary_kol ;
    uses wincrt ;
    Var
    Salary:longint ;
    kasry,bimeh,mazaya,kol,net:real ;
    Num,grade:integer ;
    Begin
    Writeln('Enter salary and grade and number of child' );
    Readln(salary,grade,num );
    If num <=2 then
    Bimeh:=100
    Else
    Bimeh:=num*500 ;
    If (grade >0) and (grade <=20) then
    begin
    Net:=20/100*salary ;
    Mazaya:=num*1000+grade*50 ;
    Kasry:=bimeh+net ;
    Kol:= salary+mazaya-kasry ;
    End
    Else
    If (grade >20)then
    begin
    Net:=20/100*salary ;
    Mazaya:=num*1000+grade*50 ;
    Kasry:=bimeh+net ;
    Kol:= salary+mazaya-kasry ;
    End ;
    Writeln('salary kol is:',kol);
    Readln ;
    End .

    دستور case :
    برای انتخاب یک حالت از چندین گزینه ، در پاسکال علاوه بر دستور if ،دستور دیگری به نام case وجود دارد. Case میتواند تعدادی شرط را بگیرد و انتخاب کند.

    مقادیری را که دستور case می پذیردORDINAL است .مقادیری که دارای ORDINAL هستند دارای ترکیب نیستند و همچنین قابل شمارش هستند مثل :integer,character,byte,boolean,longint ,…پسstring,real ,… نمی توانند ORDINAL باشند.دستور case دارای begin نمی باشد.
    Case selector of
    Label : statement ;
    Label : statement ;
    .
    .
    .
    .
    .
    label : statement
    end [case]
    مثال:
    case N of
    1,2 : begin
    write (‘1,2,’) ;
    writeln( ‘buckle my shoe’)
    end ; {1,2}
    3 , 4 :Writeln (‘ 3,4 , shut the door ‘ );
    5 , 6 :writeln (‘ 5 , 6 , oick up sticks’);
    end {case}
    عبارت otherwise یا else برای دستور case :

    چنانچه انتخاب کننده case یک مقدار غیر قابل انتظار داشته باشد می توان از این عبارت برای نمایش پیغام خطا یا عمل تصحیح استفاده نمود.در دستور case بعد، در صورتی که مقدار غیر منتظره ای در DayNumber ذخیره شود، عبارت otherwise پیغام خطای invalid day number را نمایش می دهد.
    {compute gross pay for a particular day }
    case DayNumber of
    1, 7 : Gross := Hours * 1.5 * dailyRate ;
    2, 3 , 4 , 5 , 6 : Gross := Hours * DailyRate ;
    otherwise
    writeln (‘ invalid day number. ‘)
    end {case}
    مثال:برنامه ای بنویسید که دو عدد را از ورودی دریافت کرده وچنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ کند اگر 68 بود ضرب آن دو عدد را نمایش دهد در غیر اینصورت مقادیر مجاز را چاپ کند؟
    Program case_of ;
    Uses wincrt ;
    Var a,b:integer ;
    Begin
    Writeln('enter tow number’);
    Readln(a,b);
    Case a of
    0..5:Writeln('sqrt(b):',b*b);
    68:writeln('a*b:',a*b)
    Else
    writeln('Enter 0..5 or 68 ' );
    End;{case}
    Readln ;
    End .
    حلقه ها:
    حلقه FOR :
    حلقه for برای تعداد تکرار 0 یا بیشتر و در ضمن برای تعداد تکرار معین به کار می رود .

    شکل کلی دستور for به صورت زیر است:
    Do مقدار نهایی To } مقدار شروع =: متغیرfor

    Downto

    To زمانی به کار میرود که مقدار اولیه از مقدار نهایی کمتر باشد.
    downTo زمانی به کار میرود که مقدار اولیه از مقدار نهایی بیشتر باشد.

    مثال:برنامه ای بنویسید که مجموع مضارب 5 بین 0 تا 100 را حساب کند؟
    Program zarb ;
    Uses wincrt ;
    Var I,sum:integer ;
    Begin
    Sum:=0 ;
    For i:=1 to 20 do
    Begin
    Sum:=sum+i*5 ;
    End ;
    Writeln('sum is:',sum) ;
    End .
    مثال:برنامه ای بنویسید که تعداد مضارب 5و7 را در بازه [231,846] چاپ کند؟
    Program number ;
    Uses wincrt ;
    Var I,s,k:integer ;
    Begin
    S:=0 ;
    K:=0 ;
    For i:=846 downto 231 do
    Begin
    If I mod 7=0 then
    S:=s+1 ;
    If I mod 5=0 then
    K:=k+1 ;
    End ;
    Writeln('7=',s) ;
    Writeln('5=',k) ;
    End .
    حلقه های for می توانند علاوه بر نوع integer ، از انواع دیگر ترتیبی نیز استفاده کنند . در مثال زیر ، از متغییر char استفاده شده است.

    مثال :
    For nextch := ‘ A’ to ‘Z’ do Write (nextch) ;
    حلقه while :
    ساده ترین دستور کنترل حلقه دستور While می باشند. دستوراتی که تکرار می شوند بدنه حلقه نام دارند و بعد از کلمهdo قرار می گیرند. بدنه حلقه یک دستور مرکب است که بین begin و end محصور شده است.

    حلقه While یک حلقه با تکرار 0 یا بیشتر و تعداد تکرار در آن نامعین است.

    شکل آن بصورت زیر است:
    Do شرط While
    begin

    دستورات
    End ;

    مثال:برنامه ای بنویسید که تعدادی از اسامی را از ورودی دریافت کند و سپس بگوید اسم 'ali ' چند بار تکرار شده است؟(آخرین اسم end باشد)
    Program repeat_ali ;
    Uses wincrt ;
    Var s:integer ;
    Name:string ;
    Begin
    S:=0 ;
    Writeln('Enter names ' ) ;
    Readln(name) ;
    While name <>'end' do
    Begin
    Readln(name) ;
    If name='ali' then
    S:=s+1 ;
    End ;
    Writeln('ali repeat:',s) ;
    End .
    حلقه Repeat :
    دستور repeat یک حلقه شرطی را مشخص می کند که تا وقتی که شرط آن درست بشود ، حلقه تکرار می گردد (یعنی این حلقه تا زمانی اجرا می شود که شرط آن نا درست باشد و به محض درست بودن شرط حلقه دیگر اجرا نمی شود ).
    Repeat
    loop-body
    Until termination-condition
    حلقه شرطی دستور repeat ، یک حلقه repeat – until نامیده می شود. توجه داشته باشید که چون کلمات repeat و until بدنه حلقه را محصور می کنند نیازی به کلمات begin و end نیست . این نوع حلقه حداقل یکبار تکرار می شود.

    مثال:
    Repeat
    write (‘Enter a digit > 5 ’ ) ;
    read (ch)
    Until (‘0 ’ <= ch) and (ch <= ‘9’)
    حلقه های لانه ای:
    همانند دستور if حلقه ها را می توان درون یک دیگر قرار داد .حلقه های لانه ای شامل یک حلقه خارجی یا بیرونی و یک یا چند حلقه درونی است . هر بار که حلقه بیرونی تکرار می شود حلقه های درونی نیزاجرا می شوند و عبارت کنترل حلقه در آنها مجدد ارزیابی می شود وتمام تکرارهای الزامی انجام می شوند .

    مثال:
    Program m_n ;
    Uses wincrt ;
    Var
    I , j : integer ;
    Begin
    Writeln (‘I’ :12 , ‘j’ :5) ;
    For I:=1 to 3 do
    Begin
    Writeln (‘outer’ :5,I :7 ) ;
    For j:= 1 to I do
    Writeln (‘inner’ :7 , I :5 , j:5)
    End ;
    End .
    دستورات break و continue :
    Break : این دستور در داخل حلقه ها بکار رفته و باعث خروج از داخلی ترین حلقه شده و دستور بعد از آن حلقه اجرا شود.
    Continue : این دستور نیز مانند break در درون حلقه ها بکار رفته و باعث می شود کنترل برنامه به ابتدای حلقه باز گردد.

    دستورات halt و exit :
    Halt پرس و جویی است که باعث خروج کامل از برنامه و بازگشت به سیستم عامل می گردد.
    Exit پرس و جویی است که باعث خروج از زیر برنامه می شود و چنانچه در قسمت اصلی برنامه به کار رود مانند halt عمل می کند.

    دستور goto :

    این دستور کنترل را به خط دلخواه می برد نحوه استفاده آن با اینصورت است که از یک برچسب در جلوی آن استفاده می شود کنترل برنامه زمانی که به آن رسید به برچسب مورد نظر پرش می کند.

    برچسبها نیز می بایست در ابتدای برنامه تعریف شوند .تعریف آن به صورت زیر است.
    ; نام برچسبLABEL