معدل 10 دانشجو را دریافت شاگرد اول تا سوم همراه با مکان آ نها در آرایه نمایش دهد.

معدل 10 دانشجو را دریافت شاگرد اول تا سوم همراه با مکان آ نها در آرایه نمایش دهد.

پاسخ :

ابتدا سه آرایه تعریف می کنیم .آرایه 10 خانه ای a معدل دانشجو یان را در بر دارد .

آرایه 3 خانه ای b مکان شاگرد اول تا سوم را در خود ذخیره می کند.

آرایه 3 خانه ای c شاگرد اول تا سوم را در خود نگهداری می کند.

Program tamrin;

Var

a:array [1..10] of real;

b: array [1..3] of byte;

c:array [1..3] of real;

i,n:integer;

Max:real;

S:char;

Begin

Writeln(‘وارد کنید نمرات 10 دانشجو را؟”);

For i:=1 to 10 do

 Begin

  Write(‘enter’,i:2,’: ‘ );

Readln(a[i]);

End;

For n:=1 to 3 do

Begin

Max:=0;

For i:=1 to 10 do

Begin

If a[i]>max then begin

Max :=a[i];

b[n]:=i;

c[n]:=max;

    End;

End;

a[b[n]]:=0;

End;

Writeln;

For   i:=1 to 3 do

Begin

Write(‘a(‘,b[i],’)’);

Write(‘--->  ‘,c[i]:3:2);

Writeln;

End;

Read(s);

End.

 

دلایل و مشکلات نصب نشدن پاسکال

سلام
توربور پاسکال 7 روی ویندوز ایکس پی اجرا می شود و باهاش کار میکردیم ولی  روی ویستا من ندیدم کسی نصب کرده باشه و  روی سیستم عامل 64 بیتی  نصب نمیشه چون این نرم افزار خیلی قدیمی هست و زمانی که ساخته شد برمیگرده به اوایل  سال 1970 که هنوز سیستم عاملی طراحی نشده بود.این زبان در واقع نسل جدید زبان ALGOLمی باشد .می توان گفت زبان های جدید تری چون ADA, MODULA2  برگرفته از سبک وساختار PASCALمیباشد تاریخ پیدایش PASCALبدون بررسی تاریخچه ALGOLناقص خواهد بود.

تمریناتی  درمورد روال procedureو تابعfunction

تمریناتی  درمورد روال procedureو تابعfunction

1.     سه عدد را خوانده و ماکزیمم آنها را باfunction بنویسید.

2.     سه عدد را خوانده و ماکزیمم آنها را باprocedureبنویسید.

3.  فرض کنید در یک فروشگاه یک4 نوع جنس با عناوینa,b,c,d, باقیت به ترتیب 25و20و12و5ریال موجود می باشد بر نامه ای بنویسید هر جنس با تعداد آن را در یافت قیمت نهایی را اعلام نماید شرط اتمام بر نامه وارد کردن حرفe باشد.

4.     به طور کلی تفاوت روال و تابع  در چیست؟

5.     خروجی تابع زیر اگر n=40باشد چه مقداری است؟

6.      

Function  ad (n: byte):word;

Begin

If n=1 then

Ad: =1

Else

Ad: =ad (n-1) +n;

End;

پاسخ سوالات تشریحی

1)                   

Program t1;

Var

a,b,c :integer;

Function max (a,b,c: integer): integer;

Var

m: integer;

Begin

m:=a;

if b>m then  m:=b;

if c>m  then  m:=c;

max:=m ;

End;

Begin

Write ('please enter a, b, c :');

Readln (a ,b ,c);

 Write (max(a ,b ,c));

Readln;

End.

2)                  

Program t1;

Var

a, b, c, m :integer;

Procedure    Max (a, b, c: integer; Var m: integer);

Begin

m: =a;

If b>m then m: =b;

If c>m then m: =c;

End;

Write ('please enter a, b, c :');

Readln (a, b, c);

Max (a, b ,c ,m);

Write (m);

Readln;

End.

3)                  

Program t3;

Label 10;

Var

Ch: char;

n, sum :integer;

Function    call (ch: char; n: integer): integer;

Begin

Case ch of

'a', 'A': call:=n*5;

'b', 'B' : call:=n*12;

'c', 'C' : call:= n*20;

'd', 'D' : call:=n*25;

End;

End;

Begin

Writeln;

Writeln ('**** enter "E" to exit ****');

Sum: =0;

While true do

Begin

Write ('enter kind of (a, b, c, d) :');

Readln ( ch );

If (ch='e') or (ch='E') then goto 10;

Write ('enter numbers :');

Readln (n);

Sum:=sum+ call( ch , n);

End;

10:write('pay =' , sum);

Readln;

End.

4)                 

به طور کلی تفاوت روال و تابع  در نحوه فراخوانی آنهااست.

5)       این برنامه مقدارزيگما i ازi=1تا n=40 را محاسبه می کند می دانیم این مجموع برابر است با

n(n+1)/2

بنابراین داریم :

n=40        ,      40(40+1)/2=820 

خروجی 820است .

 

کلیات درمورد روال و تابع

زیر بر نامه ها به صورت روال و توابع بیان می شوند در بر نامه نویسی ساخت یافته ،واحدی منطبق بر این است که اگر بر نامه بزرگتر را به قسمت های کوچکتر تقسیم کنیم نوشتن بر نامه آسانتر و بهتر خواهد بود که در زبان پاسکال به این قسمت های کوچک  روال یا تابع می گویند در زیر روال ها می توان هر زیر روال را به طور جداگانه نوشته و اجرا کرده ودر صورت صحت آن را می توان به بر نامه اصلی اضافه کرد همچنین می توان در پاسکال متغیر ها را به روال و توابع انتقال داد .

تعریف روال در پاسکال

برا ی تعریف روال حداقل دو چیز نیاز داریم:

1.     نام روال

2.     یک بلاک کد

تفاوت بین روال و تابع عبارتند از:

1.  فراخوانی یک روال به صورت دستوالعمل مستقل می باشد ولی فراخوانی یک تابع بایستی قسمتی از یک عبارت باشند به عبارت دیگر توابع مشابه متغیر ها می باشندکه مقدارآنها بستگی به پارامتر های انتقال داده شده به آنها دارد.

2.     ازروال نمیتوان دردستورهای جایگزینی ومقایسه ای وعبارتهای حسابی استفاده کرد.

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

 

مقادیر ومتغیر ها در لیست پارامتر ها

مقادیر ومتغیر ها در لیست پارامتر ها

  

وقتی در جلوی پارامتر ها Var   قرار می دهیم با مراجعه به نام این پارامتر ها می توان آنرا به سابروتین وارد کرد و یا نتیجه گرفت . ولی در صورتیکه جلوی پارامتری Var قرار ندهیم ،مقدار آن پارامتر مورد نظر خواهدبود در حالت اول کامپیوتر محلی برای متغیر در نظر می گیریدو هر بار به آن محل مراجع می کند و محتوای آنرا انتقال می دهد . و این محتوا داخل و خارج برنامه قابل استفاده است .در حالت دوم کامپیووتر یک کپی از مقدار متغیر را به سابروتین می برد ومحلی را برای آن در نظر نمی گیردکه به تواند حاصل تغییر به بر نامه اصلی باز گردئد .تغییرات داخل سابروتین نیز روی کپی متغیر انجام می شود.بنابر این هر گاه تغییرات متغییری در داخل سابروتین مورد نظر مانیست آنرا بدون Var  قرار می دهیم.

معرفی قبلی سابروتین ها

 

گاه اتفاق می افتد که یک سابروتین در بر نامه سابروتین دیگری را فرا مکی خواند. از آنجا که قبل از تعریف هیچ عاملی نمی توان از آن استفاده کرد سابروتین فرا خوانده شده باید قبلا معرفی شده باشد حال اگر قرار باشد گاه سابروتین 2 را فرا خواند و گاه سابروتین 1 را ،در اینجا اشکالی بوجود می آید . به شکل زیر توجه نمائید.

 

 

Procedure   test1 (some: integer);

Begin

If     some<10 then      test2 ('y');

{………..etc.}

Procedure   test2 (another parameter: char);

Begin

test1 (15);

{………..etc.}

End;

این اشکال به این صورت رفع می شود که از کلمه forward استفاده کرده سابروتین دوم را قبلا معرفی می کنیم گر چه سابروتین دومی به تفضیل شرح داده شده ولی معرفی آن قبا از سابروتین  1 مشکل را رفع می کند به بر نامه زیر توجه کنید :

Program test;

Var

A, b, c, x, y, z: integer;

Procedure   proc (Var   a, b: integer; c: integer);

Forward;

Procedure   proc2;

BEGIN

Clrscr ;

Readln(x);

Proc(x, y, z);

Writeln(x: 10, Y: 10);

End;

Procedure proc2 (Var A, B: Integer; c: Integer);

Begin

Writeln (A: 10);

B: =A*A*A;

C: =100;

END;

{*******************************}

Begin

Proc1;

End.

مثال

1.برنامه فاکتوریل را با procedure بنویسید.

Program t1;

Var

N: Integer;

M: Longint;

Procedure     fact (n :integer ; Var f: Longint);

Var

I: byte;

Begin

F: =1;

For   I: =1 to n do

     F: =F*I;

End;

Begin

Write ("please enter n:");

Readln (n);

Fact (n, m);

Write (m);

Readln;

End.

2. برنامه فاکتوریل را با Function بنویسید.

 

Program t2;

Var

N: Integer;

K: real;

Function   fact (n: integer) Longint;

Var

I: byte;

f: Longint

Begin

F: =1;

For   I: =1 to n do

     F: =F*I;

Fact: =F;

End;

Begin

Write ("please enter n:");

Readln (n);

Write (Fact (n));

Readln;

End.

توابع و پردازه هاPROCEDURES  &  FUNCTIONS  

توابع و پردازه هاPROCEDURES  &  FUNCTIONS 

 

پردازه و تابع دو نوع متفاوت از بر نامه های فرعی(زیر بر نامه ها) می باشند . تفاوت تابع با سابروتین آن است که یک مقدار را به بر نامه باز می گرداند , در حالی که پردازه چند مقدار را می تواند منتقل سازد . هر دو نوع می توانند شامل  انواع ثابت و متغیر داده ها , پردازه ها و توابع باشند . اینها ایه بر نامه ریزی ساختاری هستند .

از محاسن وجود این دو نوع بر نامه فرعی موارد زیر را می توان بر شمرد .

1.     را ه پی گیری اشکالات ودنبال کردن مسیراجرای دستورالعملهاراکوتاه می سازد .

2.     تست بر نامه جزء جزء انجام می شود . هر بخش را جداگانه می توان برسی نمود .

3.     در ک مسئله و اعمال تغیرات روی آن بسیار ساده تر می شود.

4.  بساری از دستورات پاسکال که دستور العمل نامیده ایم در اصل پر دازه ها و تابع هایی هستند که بافر اخوانی آنها عمل را انجام می دهند. از آن جمله  پر دازه WRITELNکه متغیر های خودرابه دستورالعملهای خروجی و یابه فایل های موردنظرمی فرستد.همچنین تابعsucc( ) که عدد 6 را پس از انجام عملیات داخلی به خودگرفته وبه برنامه بازمی گرداند.

دامنه انتقال متغییر ها در رابطه باپردازه و تابع

دو نوع متغیر در رابطه باپردازه ها وتوابع وجود دارد :

1.     داده های فراگیر یا global

2.     داده های محلی local

داده های محلی LOCAL

داده های فراگیر که در بالا ترین سطح بر نامه معرفی می شود در همه بر نامه های فرعی نیز دیده می شود.متغیر هایی که در داخل سابروتین ها تعریف می شوند محلی هستند و تغییرات آنها به خارج از سابروتین نفوذ نمی کند .

معرفی متغیر ها در پردازه و تابع

متغیر ها در قبل از اینکه بتوانند به کار روند باید معرفی کرد .به همین دلیل داده های فراگیر راباید قبل از همه در خط های اولیه معرفی کرد .همچنان ,سابروتین ها در قبل از اینکه فراخوانده شوند باید معرفی کرد.

چگونگی تعریف پر دازه ها و توابع

 

پردازه و توابع را باید پس از Varوقبل از بر نامه اصلی معرفی کرد معرفی هر پردازه یا تابع , اطلاعات زیر را شامل می باشد:

1.     نام پر دازه که تابع ضوابط نام گذاری در تربو اسکال است.

2.  نام پارامتر ها ونوع آنها هرقلم از اطلاعات که باید به بر نامه ها وارد شود, وهر اطلاعاتی که پس از پردازش از بر نامه صادر شود , باید در داخل پرانتز جلوی نام سابروتین آورده می شود.

3.  در داخل پرانتز پارامترها می تواننند مقادیر باشندیا پارامتر های متغیری باشندکه قبل از آنها Var می آید . چنین پامتر هایی در داخل سابروتین تغییر کرده وتغییرات آن به خارج نفوذ می نماید.

4.  در مورد تابع پس از پرانتز نوع اطلاعات باز گشتی به بر نامه اصلی که تحت نام خود تابع می باتشد , معرفی می گردد.نوع تابع لزوما" نباید با نوع رانتز آن یک باشدگرچه مثلا"  تابع  succ( )  همان نوعی از اطلاعات را برگشت می دهد که بکار می برد.

عبور وانتقال اطلاعات از پردازه هاوتوابع

 

وقتی یک سابروتین رابه کارمی بریم ،معمولا می خواهیم مقداری را به آن وارد و اطلاعاتی را از آن خارج سازیم. اطاعات وارده ،گاه ثابت هایی هستند که دذر طول سابروتین تغیر نمی کنند بطوریکه قبلا نیز اشاره شد متغیر های وارد صادره از سابروتین ها می توانند محلی یا فراگیر باشند

برای انتقال اطلاعات به سابروتین و بر عکس لیست پارامتر ها را جلوی نام سابروتین داخل پرانتز قرار می دهم. لیست پارامتر ها شامل نام متغیر ها ونوع آنها می باشد . در زمان فراخوانی سابروتین هانیز در بر نامه اقلامی از دادهخ ها را که می خواهیم،داخل پرانتز قرار می دهیم.

نکاتی که باید در تهیه لیست پارامتر ها در نظر گرفت:

1.     باید دید چه پارامتر هایی مورد نیاز است .

2.  در نظر گرفت کدام مقادیر باید به سابروتین داده شود . در جلوی این پارامتر ها باید کلمه Var  ر ا قرار داد.

3.     پارامتر هارا بایدنظم داد به تر تیبی که موقع فراخوانی نیز همان نظم را داشته باشد .

4.     ترتیب و نوع پارامتر ها با اقلامی که موقع فراخوانی بکار می رود باید یکسان باشد.

سوالاتی  درمورد دستورات کنترلی وشرطی

سوالاتی  درمورد دستورات کنترلی وشرطی 

1)    اعداد صحیح و مثبت n ,m   را خوانده m  را به توان n  بر سانید ؟

2)    بر نامه ای بنویسید که یک عدد صحیح و مثبت دریافت کند  و اعداد اول 1 تا n را نمایش دهد ؟

3)  برنامه ای بنویسید سه عدد از ورودی دریافت کند و maxآنها را در خروجی چاپ کند؟(بدون متغیر کمکی )

4)  برنامه اي بنویسید كه دو عدد را از ورودي دريافت و چنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ كند چنانچه 68 بود حاصلضرب دو عدد را چاپ كندو در غير اینصورت مقادیر مجاز را چاپ كند.(با دستورif)

5)    عدد صحیح و مثبت n را دریافت و فاکتور یل آن را در خروجی چاپ کند ؟

6)    مجموع اعداد زوج سه رقمی را محاسبه و چاپ نماید ؟

7)    برنامه ای بنویسید که توان دوم اعداد 100 تا 200 را چاپ كند؟

8)    برنامه اي بنويسيد كه اعداد 100..1 را چاپ كند؟

پاسخ ها

۱)

Program   t1;

Var

I, m, n: integer;

S: char;

P: Longint;

Begin

Writeln ('please enter m, n :);

Read (m, n);

Power: =1;

For a: =1   to n do

 Power: = power*m;

Write ('power=', power);

Readln(s);

End.

به توان رساندن یعنی مقدار پایه را به  تعداد توانش , در  خود ضرب نماییم یعنی m را n بار در خودش ضرب کنیم پس یک حلقه درست می نماییم که از یک تا n ادامه داشته باشد و در داخل حلقه m را د ر خودش ضرب می کنیم بعد از اتمام حلقه m  , n مرتبه در خودش ضرب  شده است  

1)     

 

Program t2;

Lable10;

Var

n,m,a: longint;

s: char;

Begin

Write('Please Enter n: ');

Readln(n);

For m:=1    to   n   do

Begin

            a:=2;

While  a<=m/2   do

Begin

      If ( m  mod  a=0 ) then goto 10;

      a:=a+1;

end;

     Write(m,' ');

10: end;

Read(s);

End.

 

2)     

  Program EXAMPL3;

        Var

             a, b , c: integer;

       Begin

             Readln (a, b, c);

                If a>b then

                     If a>c then

                         Write (a)

                     Else

                          Write(c)

               Else

                      If b>c then

                            Write (b)

                       Else

                             Write(c);

     End.

 

3)     

Program EXAMPL4;

Var

a, b: integer;

Begin
Writeln('enter 2 number');
Readln(a , b);
If (a>=0)and(a<=5) then
Writeln(b*b)
Else
If a=68 then
Writeln(a*b)
Else
Writeln('enter 0..5 or68');
End.

5)

Program EXAMPL5;

Var

A , n: integer;

Fact: Longint;

BEGIN

Repeat
WRITELN ('ENTER n :');
READLN (n);

Until    n>0;

Fact: =1;

For    a: =1   to n   do

 Fact: = fact*a;


WRITELN ('fact=', fact);

Readln;
END .

6)

 

Program EXAMPL6;

Var

n, B: integer;

Sum: Longint;

Begin

Sum: =0;

N:=100;

While    n<= 998     do

Begin

Sum: = sum+ n;

n:=n+2;

end;

write('sum=' ,sum);

Readln;
End.

7)

Program EXAMPL7;

Var

i: integer;

Begin
For i: =100 to 200 do
Begin
Writeln (i*i);
end;

End.

8)

Program EXAMPL8;

Var

i: integer;

Begin
I:=1;
While i<=100 do
Begin
Write(i);

I:=i+1;
End;

خلاصه توضیح دستورات شرطی و ...

جملات شر طی را می توانیم به 3حالت های مطرح کنیم :

1)    جمله شرطی می تواند از یک مقایسه مستقیم باشد

2)    جمله شرطی می تواند شامل محاسبات باشد

3)    جمله شرطی می تواند شامل چندین شرط باشد

دستورات شرطی

1)    دستور If……….Then………..else  

2)    دستور case ………of 

3)    دستورgoto

دستورات کنترلی

1.     دستور حلقهfor………do

2.     حلقه while-do

3.     حلقه Repeat-Until

دستورcontinue :

این دستور در حلقه های for ,  while و یا Repeat  به کار می رود . هنگامی که به این دستور می رسیم , به ابتدای  حلقه پرش می کنیم .

دستور break:

این دستور نیز همواره در یکی از حلقه های  for ,whileو یا Repeat به کار می رود . این باعث می شود که در داخل حلقه پرش نمود و اجرای حلقه به طور کامل , خاتمه یابد .

نکته:

 Longint: برای عداد بزر گتر  و نشانه دار 4 بایت است .

Integer: می تواند حد اکثر 2 بایت اشغال کند.

دستوراتlabel و Gotoو Exit و  continueو break و تابعHalt

دستور label :

این د ستور در قسمت تعاریف بر نامه قرار می گیرد و وظیفه آن معرفی بر چسب های به کار رفته  د ر  بر نامه است .

Label     ......و بر چسب دوم و بر چسب اول

دستور   Goto:

ای دستور , کنترل بر نامه  را به  خطی  که بر چسب  آن مقابل  دستور goto  نوشته  شده  است  منتقل می گر داند.

Goto بر چسب مر بوطه   ;

هدف کلی:

گاهی در حین انجام یک بر نامه لازم است از یک سطر بر نامه به یک سطر دیگر که دستور خاصی در آن سطر قرار دارد ,پرش  کنیم . این پرش توسط دستور goto انجام می گیرد .اما برای اینکه  به مکانی رش کنیم ,باید آن مکان دارای اسم یا آدرس باشد , این اسم یا در اصطلاح بر چسب توسط دستور label معرفی می گردد.  

مثال11:

بر نامه ای بنویسید که یک عدد صحیح و مثبت دریافت کند  و اعداد اول 1 تا n را نمایش دهد .

Program EXAMPL11 ;

Lable10;

Var

n, m, a: Longint;

s: char;

Begin

Write ('Please Enter n: ');

Readln (n);

For m:=1    to   n   do

Begin

            a:=2;

While a<=m/2   do

Begin

      If (m mod a=0) then goto 10;

      a:=a+1;

End;

     Write (m,' ');

10: end;

Read(s);

End.

همانطور که مشاهده می نمایید بر چسب 10, توسط دستور label    معرفی می شود .

دستور Exit :

سبب خروج از  بلاک جاری (بلاک در حال اجرا)می شود . اگر بر نامه شامل چند بلاک باشد از بلاک جاری خارج می شود .

تابع Halt:

به اجرای بر نامه خاتمه می دهد . 

دستورcontinue :

این دستور در حلقه های for ,  while و یا Repeat  به کار می رود . هنگامی که به این دستور می رسیم , به ابتدای  حلقه پرش می کنیم .

مثال12:

فر ض کنید حلقه ای داریم که متغیر شمارنده  آن از 50 تا 150 را شمارش می کند می خواهیم اعدادی که در این فاصله  هستند و بر عدد 3 بخش پذیرند , چا گردند .

Program EXAMPL12;

Var

a: integer;

Begin

For   a: =50 to 150 do

Begin

If (a mod 3 <>0) then continue;

Write (a: 5);

End;

End.

دستور break:

این دستور نیز همواره در یکی از حلقه های  for ,whileو یا Repeat به کار می رود . این باعث می شود که در داخل حلقه پرش نمود و اجرای حلقه به طور کامل , خاتمه یابد .

مثال13:

خروجی برنامه زیر چیست ؟

Program   EXAMPL13;

Var

S: string;

Begin

While   true do begin

Readln (S);

If   S='exit'    then break;

Writeln(S);

End;

Write ('good by ');

End.

جواب

حلق بی نهایتی داریم که در داخل آن یک عبارت رشته ای در یافت می شود  و اگر عبارت رشته ای معادل 'exit ' باشد , بر نامه  خاتمه می پذیرد و در غیر این صورت عبارت رشته ای در خروجی نمایش داده می شود .

حلقه Repeat-Until

حلقه Repeat-Until

دستور Repeat-Until یکی دیگر از دستور کنترلی تکراری است که برای اجرای حلقه تکرار شرطی این دستور یبکار می رود.این دستور شبیه دستور While-Do است و از بعضی جهات این دو دستوزر  کنترلی مکمل یک دیگر هستند.

 دستور Repeat-Until  به صورت کلی زیر است :

Repeat دستور یا دستورات until شرط

توجه: دنباله دستورات بین Repeatو until همیشه دست کم یک بار اجرا می شود زیرا عبارت  شرطی تنها در پایان این دستور کنتر لی آزمایش می شود , که بر خلاف دستور While-Do است که در آن عبارت Boolean ( شرطی ) در آغاز دستور کنترلی آزمایش می شود ( اگر عبارت شرطی از همان ابتدا نادرست باشد , دستور While-Do اصلا اجرا نمی شود ) و بدین دلیل به حلقه Repeat-Until  حلقه بی نهایت نیز می گویند و حلقه Repeat-Until  نیاز به Begin و End ندارد اگر شرط مقابل Until  درست نباشد حلقه تکرار خواهد شد پس پایان حلقه درست بودن شرط است مزیت این حلقه نسبت به حلقه های دیگر بی نهایت بودنش است.

مثال10:

برنامه ای بنویسید بی  نهایت عدد را از ورودی خوانده و مجمو ع معدل را محاسبه و چاپ نماید اتمام بر نامه زمانی است که عدد صفر وارد گردد.

Program EXAMPL10 ;

Var

a, sum, ave: real;

n : integer;

s:char;

Begin

Sum:=0;

n:= -1;

Repeat

           Write ('Enter Number :');

           Readln (a);

           Sum: = sum + a;

           n:=n+1;

Until a=0;

ave:=sum/n;

Writeln ('sum=', sum: 1:2);

Write ('ave =', ave: 1:2);

Read(s);

End.

نکته:

مقدار اولیه n  برابر1ــ می باشد و آن بدین علت است که  عدد صفر منجر به اتمام حلقه می باشد , به عنوان یک ورودی شمرده  می شود ودر معدل تاثیر خواهد گذاشت در صورتیکه ما نمی خواهیم عدد صفر رات به عنوان یک ورودی داشته باشیم . لذا مقدار اولیه n   را 1ــ  معرفی می نماییم تا صفر به عنوان اعداد خوانده شده,در نظر گرفته نشود.

حلقهWhile-Do

2 ) حلقهWhile-Do

دستور While-Do   یک دستور کنترلی تکراری است که برای اجرای حلقه تکرار شرطی بکار می رود.

این دسور به صورت کلی زیر است

While  شرط  Do  دستورات  

در حلقه While –Do قبل از اجرای بلاک برنامه عبارت شرطی مورد تست قرار می گیرد

 اگرعبارت شرطی نادرست باشد بلاک بعد از حلقه اجرا نخواهد شد بدین ترتیب ممکن است این حلقه هیچگاه اجرا نشود.

اگر عبارت شرطی درست باشد بخش دستور به صورت مکرر اجرا می شود تا وقتی که ارزش عبارت شرطی نادرست باشد اگر بیش از چند دستور بخواهیم در حلقه بکار گیریم باید از Beginو End استفاده کنیم . 

مثال 9:

یک عدد صحیح و مثبت در یافت و در صورتیکه ورودی عدد کامل بود پاسخ  مثبت دهد ؟

Program EXAMPL9;

Var

n, a, sum: Longint;

s: char;

Begin

Write ('Please Enter n: ');

Readln (n);

Sum: =0;

a:=1;

While a<=n/2 do

Begin

            If (n mod a=0) then sum:=sum + a;

            a:=a+1;

End;

If n=sum then Write ('YES')

     Else Write ('NO');

Read(S);

End.

توضیح:

عددی کامل است که با مجموع مقسوم علیه های کوچکتر از خودش ,برابر باشد.

به عنوان نمونه    6=1+2+3

بر ای بدست آوردن مجموع مقسوم علیه ها کافی است , هر بار که فهمیدیم که شمارنده 1 تا n/2  ما یا همان a  ,مقسوم علیه عدد n  است (فر مان if) ,مقسوم علیه بدست آمده را در داخل متغییر sum  بریزیم .

بعد از اتمام حلقه ,مقدار sum  با خود عدد مقایسه می شود  و اگر دو مقدار برابر بودند ,nعد د  کامل است .

دستور حلقهfor………do

کنترل تکرار بر نامه ها

برای تکرار بلاکی از بر نامه می توانیم به جای تکرار دستورات به تعداد مورد نیاز از دستورات حلقه استفاده کنیم در پاسکال انواع دستورات حلقه داریم که عبارتند از :

1)دستور حلقهfor………do

این دستور دارای یک شمارنده می باشد که مقدار اولیه و مقدار نهایی آن باید مشخص شده باشد

 شکل کلی دستور for

For    متغییر :=مقدار اولیه       to     مقدار نهایی    do   دستورات

Begin

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

End

نکته :

زمانی از begin و end  استفاده می کنیم که دستورات اجرای داخل for بیشتر باشد .

حلقه ها 2حالت می توانند داشته باشند :

1)افزایشی

در این حالت بین مقدار اولیه و مقدار نهایی عبارت toرا بکار می بریم بدین تر تیب مقدار اولیه کمتر از مقدار نهایی خواهد بود.

مثال 7 :

عددی صحیح و مثبت را گرفته اعداد کمتر از هزار که بر N بخش پذیر است را چاپ کند ؟

Program  EXAMPL7  ;

Var

N, I: integer;

Begin

Write ('enter N :');

Readln (N);

For   I=1   to 999   do

If (I mod N= 0) then   write (I);

Readln;

End.

2)کاهشی

در  این حالت بین عبارت مقدار اولیه و مقدار نهایی از عبارت down to  استفاد ه می کنیم .بنابراین مقدار اولیه بیشتر از مقدار نهایی خواهد بود .

حلقه های to در to :

دستورات      DO      مقدار اتمام       TO      مقدار شروع =: متغیر  FOR 

---------------

---------------

دستورات      DO      مقدار اتمام       TO      مقدار شروع =: متغیر  FOR 

مثال 8 :

جدول ضرب 10*10را محاسبه و چاپ کند

Program  EXAMPL8;

Var

a,b: integer;

Begin

For a: =1    To   10   Do

Begin

For   b: =1    To 10   Do

Write (a*b: 5);

Writeln;

End;

Read(s);

End.

یادآوری : در دستور

Write(a*b:5);

عدد 5 فاصله مابین دو ستون را مشخص می کند و دستور Writeln در سطر بعدی فاصله ما بین دو سطر است و یا به عبارتی دیگر بین سطور فاصله ایجاد می کند

دستور شرطی  case………..  of

2)دستور شرطی  case………..  of

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

Case          نام متغییری که شرط بر روی آن اعمال می شود      of

دستور1:  شرط 1             

دستور2:  شرط2                                

 

 

دستورn:  شرط n

End

نکته:

علامت آخر end بستگی به محل قرار گیری آن دارد امکان دارد سمیکالن یا نقطه  باشد ودر ضمن به دستور قبل از end در شرطcase می توان سمیکالن نگذاشت.

مثال:

Case   traffic   of

Red: Write ('stop');

Green: write ('go head');

Amber: write('stop  if possible, else go head')

End;

 مثال:

Case   key     of

'A'. . 'Z': write ('uppercase');

'a' . . 'z': write('Lowercase');

'0'. . '9': write('numeric');

End;

مثال6:برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و چنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ كند چنانچه 68 بود حاصلضرب دو عدد را چاپ كند و در غير اينصورت مقادير مجاز را چاپ كند.

Program EXAMPL6;

Var

A,B: integer

BEGIN
WRITELN('ENTER TWO  NUMBER');
READLN(A,B);
CASE A OF
0..5 :WRITELN(B*B);
68:WRITELN(A*B)
ELSE
WRITELN('ENTER 0..5 OR 68');
END;
END.

 

دستور If……….Then………..else

2)دستور If……….Then………..else  

در بر خی موارد یک بر نامه نیاز به 2شاخه شرطی دارد در این حالت از دستور شرطی به صورت If……….Then………..else   استفاده می کنیم که یکی از آنها در صورت درست بودن شرط اجرا خواهد شد در این حالت اگر نتیجه ارزش یابی جمله بولین یا بولی درست باشد بلاکی از بر نامه که بعد ازدستورالعمل then   قرار دارد اجرا خواهد شد ولی اگر نتیجه ارزش یابی نادرست باشد بلاکی از بر نامه که بعد از else   قرار دارد اجرا خواهد شد در هر دو حالت پس از اجرای بلاک انتخاب شده کنترل برنامه به دستور العمل If……….Then………..else منتقل می شود فلوچارت آن به شکل زیر می باشد .

 

If……….Then………..else

نکته :

قبل از دستور else از سمیکالن استفاده نمی کنیم .

مثال3:

برنامه ای بنویسیدکه عددصحیح را در یافت کرده و تعیین کند زوج است یا فرد ؟

 

Program EXAMPL3;

Var

N:integer;

Begin

Read(N);

If   N mod  2=0    then

Writeln('p');

Else

Writeln('q');

End.

حالت یافته if…….then…..else

If……….then

Else

Else

Else

در حالت گسترش می توانیم با استفاده از if …..else  توسعه را انجام  دهیم .

به این تر تیب جملات بولی پشت سر هم بیان می شود ودر نتیجه می توان پرش های چند شاخه  ای را انجام داد بر نامه پس از رسیدن به نتیجه false در مورد عبارت شرطی اول اجرای بلاک برنامه عبارت false شرط دوم را ارزشیابی میکند تا اینکه دستور  if ……Else  وارد عمل شود اگر این عبارت هم false باشد آخرین بلاک برنامه اجرا می شود.

مثال4:

خروجی بر نامه چیست؟

 

Program EXAMPL4 ;

Var

Mess:char;

Begin

Writeln(' کاراکتری با حروف بزرگ وارد کنید ');

Read(Mess);

If   Mess='A'    then

     Writeln('Add')

Else   if    Mess='I'   then

              Writeln('Insert')

Else   if    Mess='D'   then

              Writeln('Delete')

Else   if    Mess='E'   then

              Writeln('Exit');

Writeln('press enter ' );

Readln;

End.

جواب :

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

A: Add

I: Insert

D: Delete

E: Exit

دستورات تودر تو در if ……then  

هر گاه بخواهیم 2 یا چند شرط رامختلف را به منظور انجام کار ی تعریف می کنیم از if ……then   تو در تو استفا ده می کنیم .

مثال5:

سه عدد را خوانده و بزرگتر و کوچکتر را چاپ کند ؟

Program EXAMPL5;

Var

A,b,c,min,max:integer;

Begin

Readln(a ,b, c);

Max:=a;

Min:=b;

If  b>Max then

Max:=b;

If   a

     min:=a;

If    c>max  then

        Max:=c;

If    c

Min:=c ;

Writeln('larg:', max  , 'smol:',min );

Readln;

End.

 

جملات شرطی

جملات شرطی

جملات شر طی را می توانیم به حالت های مختلفی مطرح می کنیم .

1.     جمله شرطی می تواند از یک مقایسه مستقیم باشد .

مثال:

Age>12          یا         x

2.     جمله شرطی می تواند شامل محاسبات باشد .

مثال:

x>(12*a)                      یا                (x-5)<(y-5)+(x+5)

3.     جمله شرطی می تواند شامل چندین شرط باشد .

مثال:

(age >21)   and  (name='Sara')

x>=12     or      y<=x

مثال1:

خروجی برنامه زیر چیست؟

Program EXAMPL1;

       Var

           i, j: integer;

           i:=9 ;

            y:=-47;

             Writeln (' i     or    J>0='  ,   i    or   J>0);

             Writeln;

             Writeln ('( i>0)     or    (J>0)  ='  , ( i >0)  or ( J>0));

             Writeln;

            Writeln ('presenter.');

            End.

جواب:

i    or  J  

9+ ( - 47)

9 - 47

- 38<0

false

T=1

F=0

 

دستورات شرطی

1) دستورthen  ......       If

دستور If یک دستور کنترلی شرطی  است و تنها در صورتی که شرط مقدار درست داشته باشد یا نادرست اجازه می دهد عملی انجام شود .

کاربرد دستور

برای تصمیم گیری در داخل بر نامه از این دستور استفاده می کنیم و ساده ترین شکل پرش به قسمت های دیگر بر نامه می باشد.

نکته :

به دستور If اغلب دستورthen  .....  If هم می گویند.

دستور If …… then دو حالت دارد ؟

حالت 1:

1) If   شرط   then   دستورات         

 مثال2:

 بر نامه ای بنویسید که سن را بخوهد و اگر سن شخص بزرگتر و مساوی 20 باشد بنویسد very good""

Program EXAMPL2;

       Var

         age: integer;

           Begin

             Writeln (' enter age :');

             Read(Age) ;

                If Age>=20   then

                    Writeln (' very good');

            Writeln ('enter age :');

           Readln;

            End.

نکته :

اگر بخواهیم بیش از یک دستور العمل را به طور  شرطی اجرا کنیم دستورالعمل های مورد نظر را داخل کلمات begin و end قرار می دهیم .

If شرط     then ….

           Begin

       دستورات

          End;

    دستورات بعدی برنامه

4 تابرنامه

سوالات تشریحی 

1)    برنامه ای بنویسید که 4 عدد راخوانده میانگین آنهارا حساب کند؟

2)  بر نامه ای بنویسید که مبلغ n را بگیرد و برای ما مشخص کند این مبلغ از چند سکه 10 ریالی چند سکه 5 ریالی چند سکه 2 ریالی و یک ریالی تشکیل شده است ؟

3)  برنامه اي بنويسد كه معدل سه دانشجو را از ورودي بخواند ومعدل هر دانشجو را در جلو نام آن در خروجي چاپ كند .( در ابتدا نام سه دانشجو خوانده شده و در ادامه معدل آنها از ورودي خوانده شود)؟

4)    هدف از قرار دادن Ln  در پایان دستور خواندن و نوشتن  چیست؟

 

پاسخ

 Program   t1;

       Var

a , b, c, d,s: integer; 

   Begin

           Readln (a, b, c, d);

            S:=(a+b+c+d);

Writeln(s div  4);

Readln;

End.

2)     

Program  t2;

       Var

X, y, z, w, n: integer; 

            S: char; 

   Begin

           Readln (n);

            X:= n  div  10 ;

         n:=  n  mod 10;

         y := n  div  5;

         n:=  n  mod5;

         z:= n  div  2 ;

         n:=  n  mod 2;

          w:= n  div  1 ;

         n:=  n  mod 1;

         Writeln('10R=' ,x , '5R=' ,y , '2R=',z,  '1R=',w,);

       Read(s);

        End.

 

3)     

Program t3 ;

       Var

           n1,n2,n3:string[30];   { نام سه دانشجو}

            a1,a2,a3:real;  {معدل سه دانشجو}

             s:char;

   Begin

           writeln(n1,n2,n3);

             readln(a1,a2,a3);

               writeln(n1,a1);

                  writeln(n2,a2);

                    writeln(n3,a3);

                    read(s);

   End.

 

4)    Ln در دستورات به معنی این است که دستور در سطر جدا گانه اعمال شود.

مثال هاي ابتدايي

مثال 1:

برنامه ای که 2 عدد صحیح را از ورودی خوانده و حاصل جمع و حاصل تقسیم  را محاسبه کند؟

 

Program   EXAMPL1;

       Var

           n1, n2: integer;  

            a1, a2: real; 

   Begin

             Readln (n1, n2);

                a1:=n1+n2;

               Writeln (a1) ;{{ حاصل جمع

                 a2:=n1/n2;

                Writeln (a2) ;{ حاصل تقسیم}

   End.

این پاسخ یک ایراد اساسی دارد.ابتدا بزرگترین مشکل مثال بالا را پیدا کنید ؟

جواب:

1- وقتی در این حالت بر نامه را اجرا می کنید خروجی را نخواهید دید ولی می توان متغییر از نوع کاراکتر در قسمت Var تعریف کنیم و در پایان بهend پایانی مانده دستور;(read(sرا  قرار می دهیم تا کامپیوتر منتظر بماند شما یک کلید را به عنوان ورودی را وارد کنید و این باعث می شود شما خروجی بر نامه را تا هنگامی که کلید ی فشار  ندادید ببینید.

نکته :

به جای تعریف یک متغییر از نوع charو در پایان read کردن آن می توانیم تنها از Readln خالی در پایان بر نامه استفاده کنیم .

مثال 2:

2- مثال را طوری بنویسید که در هنگام اجرا متنی بنویسید که اعداد صحیح را وارد کنید و نیز در مقابل خروجی بنویسید که کدام خروجی مربوط به حاصل جمع است و کدام خروجی مر بوط به حاصل تقسیم است؟

 

جواب: 

Program   EXAMPL2;

       Var

           n1, n2: integer;  

            S: char; 

   Begin

             Writeln (2عدد صحیح را وارد کنید   );

             Readln (n1, n2);

             Writeln ('n1+n2', n1+n2);

              Writeln ('n1/n2', n1/n2);

               Read;

   End.

نکته :

الزامی وجود ندارد که یک بر نامه پاسکال هم از دستور ورودی و هم از دستور خروجی  استفاده کند اگر چه بیشر برنامه ها این گونه هستند زیرا اکثر بر نامه ها داده های ورودی را در یافت می کنند ودر زمان  اجرا٬ اطلاعات خروجی تولید می کنند.

مثال3:

بر نامه ای بنویسید مقدار دو متغییر a=3  وb=1 را جا بجا کند ؟

 

Program   EXAMPL2;

Var

n1, n2, temp: integer; {وظیفه نگهداری موقت داده ها temp} 

Begin

a:=3;

b:=1;

Temp: = a;

a:=b;

b:=temp;

Writeln ('a=', a),

Writeln ('b=', b);

Readln;

End.

نكته:

دلیل استفاده از متغییر temp این است هنگامی که مقدار جدید را به متغییر ی واردمی کنیم ٬محتویات متغییرقبلی ازبین می رودومقدارجدیدجایگزین می شود برای جلوگیری از این عمل ٬باید مقدار اولیه را در متغییر دیگری ذخیره کنیم .

خلاصه  

خلاصه 

د ستورات ورودی

دستور خواندن داده ها

Read (نام داده);     و    Readln (نام داده);

دستور نوشتن در خروجی

Write (   );              و   Writeln (   );

Ln در دستورات به معنی این است که دستور در سطر جدا گانه اعمال شود.

دستورات جایگزینی

1- داده های ثابت در متغییری ذخیره می شوند .

Л: =3.14;

2-مقدار یک متغییررا در متغییر دیگر ذخیره کند .

نکته :همیشه مقدار سمت راست در متغییر سمت چپ ذخیره می شود .

A: =x;

A: =x یعنی مقدار متغییر x را در متغییر Aقرار گیرد

 

3- مقدار یک عبارت محاسباتی را در یک متغییر ذخیره می کند .

Z :=( 10+2)*12;

 

دستورنوشتن وخواندن

دستورات پاسکال

د ستورات ورودی

دستور خواندن داده ها

 

Read (نام داده);

Readlnشکل دیگر دستور خواندن داده ها است  با این تفاوت که پس از انجام عمل خواندن کنترل بر نامه به خط بعدی منتقل می شود .

Readln (نام داده);

دستورات خروجی

دستور نوشتن در خروجی

 

Write (   );

 

Writeln شکل دیگر دستور نوشتن در خروجی با این تفاوت که پس از انجام عمل چاپ کنترل به خط بعدی منتقل می شود.

نکته :

1-بعد ازاتمام  هر دستوراز سمیکالان ;   استفاده می کنیم .

2-Ln در دستورات به معنی این است که دستور در سطر جدا گانه اعمال شود.

ادامه نوشته

خلاصه ای در مورد داده ها

داده ها

1.داده ها ی ساده

 

 

 

-1.1داده های عددی

 

-1.1.1داده های عددی صحیح

-1.1.2د اده های اعشاری یا حقیقی

-1.2داده های غیر عددی

 

-1.2.1کاراکتر

Boolean-1.2.2

2.داده های پچیده

-2.1آرایه های متغییر ی

 

-2.2رکورد ها

-2.3رشته ها