170 likes | 304 Views
تابع و رویه 1. تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86. مروری بر مطالب. تاکنون یک برنامه به دستورات پاسکال شکسته می شود. طراحی برنامه دشوار است زیرا کوچکترین واحد دستوری، دستورات پاسکال است.
E N D
تابع و رویه 1 تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
مروری بر مطالب • تاکنون یک برنامه به دستورات پاسکال شکسته می شود. • طراحی برنامه دشوار است زیرا کوچکترین واحد دستوری، دستورات پاسکال است. • اگر برنامه را بتوانیم به ساختاری اجرایی با هدف مشخص بشکنیم، طراحی و پیاده سازی راحت تر خواهد شد. • طراحی مدولار ، طراحی از بالا به پایین است.
مثال : نمايش عدد زوج به صورت جمع دو عدد اول Var I , n : Word found : boolean; Begin Readln (n); found := false; for I := 2 to n do If ( Prime ( I ) ) and ( Prime ( n-I ) ) then begin Write(I, n-I); found := true; break; end; if not found then write (‘Not found’); End.
مثال : نمايش عدد… • کافی است prime را یکبار بنویسیم و چندین بار استفاده کنیم. • مجموعه ای از دستورات را نام prime فراخوانی می کنیم. • ورودی (پارامتر) را به صورت آرگمان دریافت می کند. • کد برنامه ساده تر و قابل فهم تر می شود
تعریف تابع Function نام تابع ( متغير : نوع ; … ) : نوع خروجی ; Var تعريف متغيرها ; متغير کمکی : نوع خروجی ; Begin . . . انجام محاسبات با متغير کمکی ; . . . نام تابع := متغير کمکی ; End;
رویه • رویه خروجی ندارد! Procedure نام رویه ( متغير : نوع ; … ) ; Var تعريف متغيرها ; Begin چند دستور ; End;
فرق تابع و رویه • تابع دارای خروجی است. حال آنکه رویه خروجی ندارد. • عملياتهای محاسباتی، انتساب (مقداردهی)، مقايسه ای و چاپ در خروجی، فقط برای توابع معتبرند و برای رویه معنا ندارند. • به عنوان مثال اگر F تابعی با ورودی Real و خروجی Integer و a هم متغيری Integer باشد، عملياتهای زير معتبرند : a := F (2.5) + 3; Write ( F (1.7) ); If F ( 1.3 ) > F ( 7.4 ) Then a := F (5.4);
پیاده سازی تابع prime Function Prime ( m : Word ) : Boolean; Var b : Boolean; I : Integer; Begin b := True; for i := 2 to Trunc ( sqrt (m) ) Do If n mod I = 0 Then b := false; Prime := b; End; متغیر داخلی نوع ورودی نوع خروجی
نگاشت متغیرها • هنگامی که نام آرگمان m باشد: فضای حافظه Heap
انواع متغیرها • متغیر جهانی (global) • متغیرهایی هستند که در برنامه اصلی تعریف می شوند. در سرتاسر برنامه از جمله بدنه تابع ها و رویه ها قابل دسترسی هستند. • متغیر محلی (local) • متغیرهایی هستند که در رویه ها و تابع ها تعریف می شوند و فقط در بدنة آن تابع یا رویه قابل استفاده هستند. • در صورت وجود هم نامی بین متغیرهای محلی و جهانی ، تابع یا رویه به متغیرهای محلی رجوع می کند.
انواع متغیرها(ادامه) var x : integer; y : boolean; function test : boolean; var x,y:Integer; begin x := 100; if y than writeln(x); test := true; end; begin x:= 200; test; writeln(x); end.
انواع متغیرها(ادامه) • آرگمان متغیر محلی محسوب می شود: • هنگامی که نام آرگمان n باشد: فضای حافظه Heap
مثال : محاسبه توان Function Power ( x : Real ; n : Integer ) : Real; Var p : Real; I : Integer; Begin p := 1; For i := 1 To abs (n) Do p := p * x ; if n <0 then p := 1/p; Power := p; End; Var a : Real ; b : Integer; Begin Readln (a , b); Writeln ( Power (a , b) ); End.
مثال :کرم Begin EOG := true ; LEVEL:=1 ; EOG := true ; While EOG do Begin INIT_Wall(Level); INIT_foods ; INIT_putworm; If Game then LEVEL:=LEVEL+1 else EOG := false; End ;
مثال :کرم (ادامه) Procedure INIT_Wall(l:Integer); x,y : integer; dir : byte; … Begin x := random(79)+1; y := random(24)+1; for i:= 1 to l*10 do begin d := random(3); case d of 0 : y:=y-1; …. if y=0 then y:=25 else if y:=26 then y:=1 ; ground[x][y]:=true ; end; End;
مثال :کرم (ادامه) • چناچه ملاحظه می شود برنامه به صورت مدولار از بالا به پایین طراحی می شود: Program INIT_Wall INIT_foods INIT_foods Game
مثال :کرم (ادامه) Function Game:boolean; Var … Begin gameover:= false; while not gameover do begin Move(get_dir); if food[wx,wy] >0 then grow(food[wx,wy]); else ... end; Game := gameover; End.