Procedure ve Function PASCAL’da ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Modüler Programlama Program modülleri : Procedur ve Function Modüller, tek başlarına bir iş yapan (kendi “const” ve “var”ları olan) ve ana bütünle birleşince daha çok iş yapan alt programlardır. Ana program, modüller koleksiyonu gibidir. Ana programda modüller çağrılarak iş yapılır, ancak program entegre olmalıdır. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Procedure ve Function’lar alt programlardır. Algoritma deseninde işi alt parçalara bölmek ve ana programda bunları çağırmak gerek. Procedure ve Functionlar alt algoritmalardır Bu programlar, ana program tarafından bazı işleri yaptırmak için çağırılır ve kullanılırlar (program içinde program). Bunlar da begin ile başlayıp end; ile biter. Bunlara anlamlı isimler vermelidir, çünkü gerektiğinde bu adla çağrılacaktır. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Procedure ve Function’lar alt programlardır. Ana program, bir mütahit gibi duvarcı, tesisatçı, elektriçi, sıvacı vs.yi sırası geldiğinde çağırır. Ana program İşlem 1.1 Dataları al İşlem 1 İşlem 1.2 İşlem yap İşlem 2 Top-down design: İşi alt parçalara böl, her alt parçanın programını (procedure) yaz, bunları gerektiğinde çağıran ana programı yaz. Hangi alt programın ne işe yaradığını { } arasına açıkça yaz. Çıktıyı yaz ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Procedure program Procedure; uses wincrt; Pascal programları alttan başlayarak okunursa daha iyi olur. Çünkü ana program en alttadır. Procedur ve Functionlar başta yer alır. program Procedure; uses wincrt; procedure selam; begin Writeln(‘Merhaba'); end; begin selam; end. ProcA ProcB Alt programlar her zaman üstte yazılır. ProcC Ana program Begin ProcA; ProcB; PorcC; End. Ana program ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Procedure’ler parametre kullanabilir Program procedure1; uses wincrt; var s:string; i:integer; procedure yaz(s: string; i: integer); begin Writeln(s); Writeln(i); end; writeln ('Dizi :'); read (s); write ('Sayı :'); read (i); yaz(s,i); end. Program Procedure2; uses wincrt; var x,x2: integer; procedure kare (x: integer); begin x2:=x*x; end; write ('Karesi alınacak sayı : '); readln (x);kare (x); write (x,' sayısının karesi : ',x2); end. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Global ve lokal parametreler Local değişkenler bir procedur içinde belirlenen ve kullanılan değişkenlerdir. Başka yerde kullanılmaz. Global değişkenler bütün program boyunca geçerli olan değişkenlerdir. Bunlar procedur içinde kullanılıp üzerinde işlem yapılabilir, ancak procedur bitince ana programda geri eski değerlerini alır. Geçici değişkenleri global değil, lokal ayarlayın (“no global variables in procedures”) ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Global ve lokal parametreler Program procedure7; uses wincrt; var a,b,gec: integer; procedure degistir (var x,y: integer); var gec: integer; begin gec:=x; x:=y; y:=gec; writeln (a:4,b:4,gec:4) end; a:=1; b:=2; gec:=3; writeln (a:4,b:4,gec:4); degistir (a,b); end. Burada “var” komutunu unutursan, yukarıdaki “var” satırında global değer gibi arar. Burada çıktı 2 3 1 1 2 1 3 şeklinde olur. İkinci satırda “b” “a”nın, “a” da “b”nin değerini alıyor. “Gec” değişkeni procedureden sonra global değerini geri alır. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Parametreler Program parametre; Var say1,say2: integer; say3:real; Value parametre Program parametre; Var say1,say2: integer; say3:real; Procedure dene (s1,s2: integer; s3:real); Procedure dene (var s1,s2: integer; s3:real); Aktüel parametre Formal parametre Variable parametre Ana program Proc Ana programdaki değişkenler Procedur içindeki işlemlerde değişik değerler alabilir, ancak ana programa döner dönmez eski değerlerini alır. Procedur içinde değer tanımlayacaksak “var” ile tanımlamalıyız. 5 5 Say1 s1 8 8 Say2 s2 2.6 2.6 Say3 s3 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Global ve lokal parametreler Program proc9; uses wincrt; var say1,say2: integer; say3:real; procedure sayyaz (s1,s2:integer; s3:real); begin writeln (s1:10,s2:10,s3:10:2); s1:=2*s1; s2:=2*s2;s3:=2*s3; writeln (s1:10,s2:10,s3:10:2) end; say1:=5; say2:=8;say3:=say1/say2; writeln (say1:10,say2:10,say3:10:2); sayyaz (say1,say2,say3); writeln (say1:10,say2:10,say3:10:2) end. Burada önce ana program değerleri yazılıyor, alt program çağrılıyor, burada da önce ana program değerleri yazılıyor, sonra işlem yapılıp yeni değerler yazılıyor, sonra eski programa dönüp tekrar oranın değerleri yazılıyor. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Program procedure3; uses wincrt; const oran=0.18; {kdv oranı} indir=0.20; {peşin indirimi} var fiyat,sonfiyat :real; procedure kdv (fiyat:real); begin sonfiyat:=fiyat+(fiyat*oran); end; procedure indirim (fiyat:real); sonfiyat:=fiyat-(fiyat*indir); writeln ('Fiyat : ');read (fiyat); kdv (fiyat); writeln ('KDVli fiyatı : ',sonfiyat:6:2); indirim (fiyat); writeln ('İndirimli fiyatı : ',sonfiyat:6:2); end. “Procedur”ler bizi yüzlerce satır kod yazmaktan ve satır numaralarına atlayan ilkel “goto” komutundan kurtarıyor. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Otomatik para ödeme Program procedurcagirma; uses wincrt; var p,p50,p20,p10 ,p5,ptek,yb,bl,kl:integer; procedure yuz (p:integer); begin yb:=p div 100; kl:=p mod 100; p50:=kl; end; procedure elli (p50:integer); yb:=p50 div 50;kl:=p50 mod 50; p20:=kl; procedure yirmi (p20:integer); yb:=p20 div 20;kl:=p20 mod 20; p10:=kl; procedure on (p10:integer); yb:=p10 div 10;kl:=p10 mod 10; p5:=kl; procedure bes (p5:integer); begin yb:=p5 div 5; kl:=p5 mod 5; ptek:=kl; end; write ('Kaç lira ödenecek : '); readln (p); yuz (p); writeln (yb:5,' yüzlük ',yb*100:8); elli (p50); writeln (yb:5,' ellilik ',yb*50:8); yirmi (p20); writeln (yb:5,' yirmilik',yb*20:8); on (p10); writeln (yb:5,' onluk ',yb*10:8); bes (p5); writeln (yb:5,' beşlik ',yb*5:8); writeln (ptek:5,' teklik ',ptek*1:8); writeln ('Toplam ',p:8); end. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN