Yapısal
Programlama, (Modular Programlama) büyük programları küçük küçük programlardan
oluşturma olayıdır. Yapılacak her iş, bir küçük program (alt program) olarak
yazılır. Bunlar, büyük programa, istenen sırayla yerleştirilir. Yazılan bu
küçük programlar, tekrar tekrar kullanılabilir; başka programlara da
taşınabilir. Bu tür küçük programlardan oluşan bir kütüphane oluşturulunca,
büyük programları yazmak oldukça kolaylaşır. Genel amaçlı iyi programlama
dillerinin hemen hepsinde bu nitelik vardır; çoğunlukla alt program diye adlandırılır.
PASCAL’da
alt programlar, Procedure ve Fonksiyon’lardır.
Fonksiyonlar, prosedürlerin özel bir sınıfıdır. Bir prosedür içinde başka
prosedürler tanımlanabilir. Dolayısıyla, bir alt programı ifade etmek için, modül terimini kullanacağız.
Bir maaş
bordrosu programında, programın yaptığı işlerin nasıl başlatılacağını gösteren
ana menü, personele ait verilerin girişini yapan modül, brüt ücretten vergi ve
benzeri kesintileri düşerek net ücreti hesaplayan modul, tayin ve terfiler için
güncelleme yapan modül, istenen verileri yazdıran modul ve benzer işleri yapan alt programlar,
PASCAL’da birer procedure ya da fonksiyondur.
Her
procedure ve fonksiyonun yapısı, tamamen bir Pascal programının yapısına
benzer.
PASCAL
derleyicisinde var olan Writeln, Readln yordamları birer prosedürdür. PASCAL
derleyicileri, bunun gibi bir çok hazır procedure ve fonksiyon içerir. Burada,
programcının tanımlayacağı prosedür ve fonksiyonları ele alacağız. İyi bir
programcı, bir Pascal programında, her farklı işi yapacak ayrı bir prosedür
yazar.
Sözdizimi
Prosedürler, programın bildirge
bölümünde, procedure anahtar
sözcüğü altında tanımlanır. Her procedure bir PASCAL programına benzer. Her prosedürün bir başlığı ve yürütme bölümü
vardır. Gerekiyorsa, ayrıca bildirge bölümü eklenir.
Procedure başlığı, prosedürün
adını ve varsa parametrelerini belirtir.
Bildirgede,
Pascal programında olduğu gibi, procedure içinde kullanılacak label,
sabit, değişken, tip, iç procedure ve fonksiyon bildirimleri yapılabilir.
Yürütme
bölümü, Begin ...End; arasına yazılan ve prosedürün yapacağı işleri belirten
deyimlerden oluşur.
Bildirgede prosedürün
sözdizimi aşağıdaki gibidir.
Procedure
ad(formal parametreler) ;
...........................
Bildirge
...........................
Begin
...
End;
Formal
parametre adları aynı prosedürde yerel değişken adı olarak kullanılamaz. Bir
prosedür içinde bildirilen nesneler, ancak bu procedure içinde görülür.
Procedure içinde tanımlı bir değişken, procedure çalışırken etkin olur; sonra
yok olur. İç içe procedure tanımlanabilir. Bir prosedürü çalıştırmak için, onun
adını yürütme bölümünde yazmak ve varsa parametreleri yerine uygun konumlar
yapmak yeterlidir. Buna procedure çağırma denir.
Bu bölümde, procedür türlerini, nasıl tanımlandığını ve programda nasıl
çağrıldığını ayrıntılarıyla inceleyeceğiz.
Pascal’da
üç türlü procedure vardır:
Basit
Procedure
Karmaşık
Procedure
Fonksiyon
Hiçbir
parametreye ve değişkene bağlı olmayan procedürler en basit prosedürlerdir.
Menü düzenlemek, yazıcıdan çıktı almak ve benzeri işlevleri gördürmek için
düzenlenirler. Aşağıdaki anamenü adlı program ve onun
çağırdığı menu adlı prosedürün her
ikisi de hiçbir değişkene bağlı değildir.
Örnek
Program
anamenu;
PROCEDURE
menu;
begin
writeln(‘Yapacağınız
işlemi seçiniz: ‘);
writeln(‘1: Güncelleme ‘);
writeln(‘2: Yeni Kayıt ‘);
writeln(‘3: Kayıt Silme ‘);
writeln(‘4: Yazdırma ‘);
writeln(‘Q: Çıkış ‘)
end;
Begin
Menu
End.
Genel
ve Yerel Değişkenler
Ana
programda olduğu gibi, prosedürlerin de bildirge bölümünde değişken bildirimi
yapılabilir. Ana programda bildirilen değişkenlere genel (global) değişkenler;
bir prosedür içinde bildirilen değişkenlere de ( o prosedür için) yerel (local)
değişkenler denilir. Genel değişkenler, ana programda olduğu gibi, program
içindeki her prosedür (modül) tarafından tanınır ve kullanılabilir. Yerel
değişkenler, ancak tanımlandığı modül (procedure) içinde kullanılabilir. Bir
modül dışındaki başka modüller, varsa bu modülü içeren üst modül ve ana
program, bu modüle ait değişkenleri tanımaz.
Aşağıdaki
maksimumbul adlı ana program, maksimum
adlı bir procedure tanımlamaktadır. Ana programın bildirge bölümünde tanımlanan
a,b,c değişkenleri, bu programın genel
(global) değişkenleridir. Program ve programın her modülü bu değişkenleri tanır
ve kullanabilir. Maksimum adlı prosedür içinde
tanımlanan max
adlı değişken bir yerel (local) değişkendir. Bu değişken ancak tanımlı olduğu maksimum
modülü içinde görülür. Modül çalışırken etkin olur; modülün çalışması bitince, max
değişkeni ana bellekten silinir (yok olur). Ana program onu göremez ve
kullanamaz.
Örnek
program maksimumbul;
{Verilen üç tamsayının maksimumunu bulmak için bir procedure çağırır.}
uses wincrt;
var
a,b,c : integer;
PROCEDURE maksimum;
{Verilen üç tamsayının maksimumunu bulur.}
var
max : integer;
Begin
IF a>b THEN
max := a ELSE max := b;
IF c> max THEN
max := c;
writeln(a:5,b:5,c:5, '
sayılarının maksimumu : ', max);
End;
Begin
writeln('Üç tamsayı
giriniz.');
readln(a,b,c);
while
a<>-1 DO {a=-1 olunca program
durur.}
begin
maksimum;
readln(a,b,c)
end
End.
İç içe Procedure
Bir modül
içinde başka modüller tanımlanabilir. İç içe procedürlere örnek olması için,
yukarıdaki programı biraz değiştirelim.
Örnek
program maks2;
{Verilen üç tamsayının maksimumunu bulmak için iç içe bir procedure
çağırır.}
uses wincrt;
var
a,b,c : integer;
PROCEDURE maksimum;
{Verilen üç tamsayının maksimumunu bulur.}
var
max : integer;
PROCEDURE maxbul;
begin
if a>b
THEN max := a ELSE max := b;
if c>
max THEN max := c
end;
Begin
maxbul;
writeln(a:5,b:5,c:5, '
sayılarının maksimumu : ', max);
End;
Begin
writeln('Üç tamsayı
giriniz.');
readln(a,b,c);
while
a<>-1 DO {a=-1 olunca program
durur.}
begin
maksimum;
readln(a,b,c)
end
End.
Öncekinde olduğu gibi, bu
programın bildirge bölümündeki var adı altında
tanımlanan a,b,c değişkenleri genel
değişkenlerdir. Programın her modülü bunları tanır. Ama, maksimum procedurü içinde tanımlanan max adlı değişken yerel bir değişkendir. Bu değişken
ancak, tanımlı olduğu modul içinde görülür Dolayısıyla, maksimum ve maxbul procedurleri max
değişkenini tanır ve kullanabilirler.
Uygulama
Aşağıdaki programda
ana programı, modülü, genel değişkenleri ve yerel değişkeni belirleyiniz.
program
toplama;
uses
wincrt;
var n,m :
integer; {global (genel) değişkenler}
PROCEDURE
topla;
var
toplam : integer; {yerel değişken}
begin
toplam := m+n;
writeln(m,' + ',n,' =
',toplam);
end;
Begin
writeln('Lütfen
iki tamsayı giriniz : ');
readln(m,n);
topla
End.
Parametreler
Bir prosedürün başlığına,
o prosedürün işleyeceği değişkenler konulabilir. Bildirge bölümünde tanımlanan
değişkenlerden ayırt etmek için, başlıkta tanımlanan değişkenlere parametreler
(argüman) denir. Parametreleri bir fonksiyonun değişkenleri gibi
algılayabiliriz.
Bir procedure'ün parametreleri varsa, bildirim
sırasında, başlıkta açılan parantez içine bunların formal adları yazılır,
herbirisinin türü belirtilir. Aynı türden olanlar virgül ile birbirlerinden
ayrılır. Farklı tür bildirimleri ise (;) ile birbirlerinden ayrılır. Bildirge
bölümünde procedure başlığı aşağıdaki
gibidir.
procedure
ad(formal parametreler);
Ama bu prosedürü çağırmak
için, programın yürütme bölümüne,
ad(gerçek
parametreler);
deyimi yazılır. Bu deyimde, gerçek
parametreler, formal parametrelerin yerlerine konan değerlerdir.
Dolayısıyla, gerçek parametreler, formal parametrelerin sayısına, sırasına ve
türüne tam uyum sağlamak zorundadır. Gerçek parametreler arasına virgül
konulur.
Formal parametreler ikiye ayrılır:
1. Değişmez
parametreler,
2. Değişir
parametreler,
Prosedür içinde değeri değişmeyen
parametrelere değişmez parametreler, değeri değişenlere de değişir parametreler
denir.
Kullanılacak değişmez parametre, procedure adından
sonra açılacak parantezin içinde
parametre_adı : parametre türü;
deyimi ile, değişir parametre ise,
var parametre_adı : parametre türü;
deyimi ile bildirilir. Başka bir deyişle, değişir
parametrelerin önüne var anahtar sözcüğü konur; değişmez parametrelerin önüne
bir anahtar sözcük konulmaz.
Aşağıdaki örnekte, n ile m
genel değişken, a ile b değişmez parametre ve toplam yerel değişkendir. Ana program, önce n,m genel
değişkenlerine klavyeden değer alıyor, sonra bu değerleri, formal parametrelerin yerine gerçek
parametre olarak koyarak, topla adlı
prosedürü çağırıyor. Konum sırasına göre a yerine n ve b yerine m konulduğuna
dikkat ediniz. Bu konumda prosedüre girenler, n ile m nin birer kopyasıdır. Bu kopyalar
prosedür içinde işlenip değişse bile, n ile m nin asıl değerleri bulundukları
bellek adreslerinde değişmeden kalırlar.
Örnek
program
toplama;
uses
wincrt;
var n,m :
integer; {global (genel) değişkenler}
PROCEDURE topla(a,b: integer);
var
toplam : integer; {yerel değişken}
begin
toplam := a+b;
writeln(a,' +
',b,' = ',toplam);
end;
Begin
writeln('Lütfen
iki tamsayı giriniz : ');
readln(m,n);
topla(n,m);
End.
Aşağıdaki program,
değişir parametreli bir prosedür yardımıyla, iki genel değişkenin yerlerini
değiştirmektedir. Ana program, klavyeden girilen iki tamsayıyı, prosedürün
değişir parametrelerine gerçek değer olarak atamaktadır. Degis
adlı prosedür, kendisine gelen bu iki sayının yerlerini değiştirmektedir.
Örnek
program
takas;
uses wincrt;
var
m,n : integer;
PROCEDURE degis(var a,b : integer);
var
x : integer;
begin
x
:= a;
a
:= b;
b
:= x
end;
Begin
writeln('İki
tamsayı giriniz. ');
readln(m,n);
writeln('m = ',m, '
n = ',n);
degis(m,n);
writeln('m = ',m, '
n = ',n);
writeln('m ile n yer
değiştiler.')
End.
Değişir ve Değişmez Parametreler Arasındaki Fark
Bu son iki örnekte,
prosedüre giren değerlerin nasıl işlendiğini bilmekte yarar vardır. Değişmez
parametreler yerine konulan gerçek değerlerin bellekteki adreslerinde yazılı
değerlere dokunulmuyor, adreslerde saklı tutulan değerlerin kopyaları
kullanılıyor. Dolayısıyla, onların değerleri değişmez kalıyor.
Oysa, yukarıdaki
değişir parametre örneğinde işleyiş farklıdır.
Değişir parametreler yerine
konulan gerçek değerlerin bellekteki adresleri işleme girmektedir. Dolayısıyla,
yapılan değişiklikler, bellek adreslerine işlenmektedir. Dolayısıyla, onların
değerleri değişmektedir.
Formal parametreler için şu özelikleri
sıralayabiliriz:
Değişmez Parametreler
Değişmez parametre yerine,
aynı türden bir sabit, bir değişken ya da bir ifade konulabilir.
Procedure içinde tanımlı
yerel değişken gibidir.
Procedure çağrılırken,
değişmez parametre yerine konulan gerçek parametre, prosedüre adresiyle gelmez,
sadece bir kopyası gelir, değişmez parametre adresine yerleşir. Dolayısıyla,
procedure içinde parametre üzerinde yapılan işlemler, gerçek parametrenin
adresindeki değeri değiştirmez.
Procedure çağrılırken verilen
değer, sadece bir başlangıç değeridir. Procedure içinde işlenip değişebilir.
Değişmez parametreye gerçek
değer atama işlemi tek yönlüdür; yani atanan gerçek değerin bir kopyası bellek
adresinden procedure girer, ama adrese geri dönmez.
Değişir Parametreler
Değişir parametre yerine
konulacak gerçek parametre aynı türden bir değişken adı olmak zorundadır. Sabit
ya da bir ifade konulamaz.
Procedure çağrılırken,
değişir bir parametre yerine konulan gerçek parametrenin (değişken) adı,
procedure tanımındaki değişir parametre adının takma adı (alias name) yerine
geçer. Dolayısıyla, ana bellekte her ikisi aynı adrese yerleşir. Bunun doğal
sonucu olarak, değişir parametredeki her değişiklik, gerçek parametrelere de
aynen yansır. Bu nedenle, procedure içinde yapılan işlemler, gerçek
parametrenin değerini değiştirir.
Procedure girmeden önce,
gerçek değişken değeri hesaplanmaz, procedure içinde değer alır.
Değişken parametre yerine
konum iki yönlüdür; yani procedure girer ve adresine yeni değeriyle döner.
Hangi Parametre Kullanılmalı?
Bazı durumlarda, genel
değişkenleri birden çok işte kullanmamız gerekir. Böyle durumlarda, değişken
değerlerini korumak isteriz. Bunun için, prosedürde değişmez parametre kullanırız. Eğer procedure'de kallanılan parametrenin
ilk değerinin değişmesi isteniyorsa, değişken parametre olarak kullanılmalıdır.
Aynı türden olmak koşuluyla, birden çok parametre
adı virgüllerle ayrılarak yazılabilir. Bir prosedürde, değişmez ve değişir
parametreler bulunabilir. Örneğin,
procedure
deneme(t1, t2 : integer; t3 : real;
var x1 : integer; var x2, x3 : real);
deyimi deneme adlı bir
procedure tanımının başlığıdır. Bu procedure'de t1, t2, t3
değişmez parametrelerdir; x1, x2, x3 ise değişken parametrelerdir.
Procedure sözdiziminin şeması
Örnek
var q, r : integer
Procedure Bol(x, y : integer;
var bolum, kalan : integer);
begin
bölüm
:= x div y ;
kalan :=
x mod y
end ;
bildirimi
yapılıyor. Bildirimi açıklayınız.
Burada x, y
parametreleri değişmez, bolum ve kalan parametreleri değişir türdendir.
Bu procedure'ün
çağrılması için, yürütme bölümünde
Bol(14, 5, q, r);
Biçiminde bir deyim
yazılmalıdır. Bu deyim x=14, y=5 değişmez parametrelerine karşılık hesaplanan q
ve r değişken parametrelerinin değerleri, sırasıyla 2 ve 4 olacaktır. Burada
14, 5, q ve r gerçek parametreleri x ,y, bolum
ve kalan formal parametrelerine karşılık gelen
parametrelerdir.
Bol prosedürü
çağrılırken parantez içine yazılanlar aynı sırada ve formal parametrelerin
türünde (type) olmak zorundadır. Aynı prosedürü çağırmak için,
Bol(20 div 7, 8 div 3, q,r);
Biçiminde
bir deyim de kullanılabilir. Bol prosedürü işlemeye başlamadan önce 20 div 7 =
3 ve 8 div 2 = 2 değerleri hesaplanır ve bunlar, sırasıyla, x ve y formal
parametrelerinin yerine geçerler. Sonra Bol
işler. Sonuçta q ve r için elde edilecek değerler
1 ve 0 olacaktır.
Formal
parametrelere karşılık gelmek üzere, yapılacak atamalar sonunda ne olacağını
programcı doğru kestirmek zorundadır. Örneğin,
Procedure artma_1(x:integer);
Begin
x := x+1
End;
tanımlansın. Eğer T integer türü bir değişken olmak
üzere
Artma(T);
çağrısı yapılırsa, bu çağrı sonunda T nin değerinde bir değişiklik olmaz; çünkü artma procedure'ü değişmez bir parametreye bağlıdır. Sözgelimi, T nin değeri artma'yı çağırmadan önce 12 ise, artma procedure'ü işledikten sonra da 12 olarak kalacaktır.
Şimdi de,
yukarıdaki procedure şöyle tanımlanmış
olsun:
Procedure artma_2(var x:
integer);
Begin
x := x+1
End;
Burada değişken parametre kullanıldığına dikkat
ediniz. Artma_2 procedure'ü işledikten sonra T
nin değeri 13 olacaktır.
Problemler
1.
Modular programlamanın yararları nedir?
2.
Bir procedure nasıl çağrılır?
3.
Bir prosedürün yapısını açıklayınız.
4.
Procedure bildirimi nerede yapılır?
5.
Genel ve yerel değişken nedir? Aralarında hangi
farklar vardır? Hangi durumlarda hangisi tanımlanmalıdır?
6.
Bir değişkenin geçerlilik bölgesi nedir?
7.
İç içe procedure nedir? İç içe procedure
bildiriminde neye dikkat edilmelidir?
8.
Formal ve gerçek parametre ne demektir?
9.
Değişmez ve değişir parametreler nasıl
bildirilir?
10.
Değişmez ve değişir parametre arasındaki fark
nedir?
11.
Değişmez parametre yerine gerçek parametre
olarak neler atanabilir?
12.
Değişir parametre yerine gerçek parametre
olarak neler atanabilir?
13.
Klâvyeden girilen iki sayının mutlak değerini
bulan bir procedure yazınız.
14.
klavyeden girilen bir sayının küpünü bulan bir
procedure yazınız.
15.
Klavyeden girilen üç sayının minimumunu bulup
yazan bir procedure yazınız.
16.
Klavyeden girilen bir gerçel sayının istenilen
bir gerçel üssünü hesaplayan bir procedure yazınız.
17.
Klavyeden girilen iki harften hangisinin
alfabetik sırada önce geldiğini bulan bir procedure yazınız.
18.
Bir mağazada, 10 milyon TL veren müşterinin,
alış veriş tutarını klavyeden giren ve para üstünü hesaplayan bir procedure
yazınız.
19.
Bir sayı kümesinin klavyeden girişini ve
bunların aritmetik ortalamasını bulan bir procedure yazınız.
20.
Bir programda,
var
a, b : real;
n :
integer;
harf :
char;
ile
procedure
deneme(x, y : integer;
var
c, d : real;
var
h : char);
bildirimleri
yapılıyor. Aşağıdaki çağrılardan hangileri geçerli, hangileri geçersizdir?
Neden?
Deneme(4,
5, a, b, harf);
Deneme(n*3,8,
6.6, 3.3, harf);
Deneme(n*3,8,
6.6, 3.3, h);
Deneme(8+7,
7-8, a, b, harf);
Deneme(8*7,
8 div 7, b, a, harf);
Deneme(21,
3, a, b, ‘A’);
Deneme(n,
2n a, b, ‘C’);
Deneme(5,1,
3.2+2.3, 6.8, harf);
Deneme(11,
21, c, d, e);
Deneme(n
div 5, 3*n+54, a, b, harf);
Çözülmüş Problemler
Hanoi Kuleleri
Hanoi’deki
bir tapınakta üç mil ile bu millerden en soldakine geçirilmiş diskler vardır.
Diskler, en altta en büyük disk olmak üzere, büyükten küçüğe doğru sıralıdır.
Bu diskler, en sağdaki mile, aynı konumda yerleştirilecektir. Ortadaki mil
yardımcı olarak kullanılabilir. Taşıma sırasında ve taşıma sonunda bir küçük
disk bir büyük diskin altına asla gelmemelidir. Rivayet edilir ki, tapınaktaki din adamları, binlerce yıldır,
diskleri sol milden sağ mile taşımaya uğraşmaktadırlar. Taşıma işi bitince
kıyamet kopacaktır.
Acaba, diskler taşınabilir
mi?
Binlerce yıldır din
adamlarını uğraştıran bu işi bilgisayarla kolayca yapabiliriz. Çözümü iki
farklı yöntemle çözeceğiz. Hanoi1.pas programı,
recursive procedure kullanarak bilmeceyi çözer. Hanoi2.pas
programı, recursive procedure ve programcının tanımladığı enumerated veri türü
kullanarak bilmeceyi çözer.
Örnek
program hanoi1;
{Ünlü Hanoi bilmecesini, recursive
procedure kullanarak çözer.}
uses wincrt;
var
n : integer;
PROCEDURE
transfer(n,origin,hedef,baska : integer);
{ n tane
diski orijinden hedefe taşır.}
PROCEDURE
disktasi(origin, hedef : integer);
{Bir diski orijinden hedefe taşır.}
Begin {disktasi}
writeln(origin:2, ' den ', hedef:2, ' e
taşı. ');
End; {disktasi}
Begin {transfer}
If n>0 THEN
Begin
transfer((n-1),origin, baska, hedef);
disktasi(origin,hedef);
transfer((n-1),baska,hedef,origin)
End
End; {transfer}
Begin {Ana}
write('Kaç
disk var? ');
readln(n);
writeln;
transfer(n,1,3,2)
End. {Ana}
Örnek
program hanoi2;
{Ünlü Hanoi bilmecesini, recursive
procedure ve
programcının tanımladığı veri
türlerini kullanarak çözer.}
uses wincrt;
type
pole
=( sol,orta,sag);
disk
=0..maxint;
var
n : disk;
PROCEDURE
transfer(n:disk; origin,hedef, baska : pole);
{ n tane diski orijinden hedefe
taşır.}
PROCEDURE
disktasi(origin, hedef : pole);
{Bir diski orijinden hedefe taşır.}
Begin
CASE origin OF
sol : IF hedef = orta THEN writeln('Soldan
ortaya taşı. ')
ELSE writeln('Soldan sağa taşı.');
orta : IF hedef = sol THEN writeln('Ortadan
sola taşı. ')
ELSE writeln('Ortadan sağa taşı.');
sag : IF hedef = orta THEN writeln('Sağdan
ortaya taşı. ')
ELSE writeln('Sağdan sola taşı.');
END {CASE}
END; {disktasi}
Begin
If n>0 THEN
Begin
transfer((n-1),origin, baska, hedef);
disktasi(origin,hedef);
transfer((n-1),baska,hedef,origin)
End
End; {transfer}
Begin {Ana}
write('Kaç
disk var? ');
readln(n);
writeln;
transfer(n,sol,sag,orta)
End. {Ana}
Pascal fonksiyonları prosedürlerin özel bir sınıfıdır. Matematikte tanımlı olduğu gibidir. Bir adı, değişken(ler)i, tanım bölgesi ve değer bölgesi vardır.
Matematikte bir X kümesinden bir Y kümesine tanımlı olan f adlı bir fonksiyonu
F: X ----- > Y
biçiminde gösteriyor ve y = f(x) kuralını veriyoruz.
Pascal fonksiyonları da benzer biçimde tanımlanır.
Programın bildirge bölümünde,
FUNCTION fonksiyon_adı(değişken: tür) : değer_türü;
Bildirge Bölümü
Begin
Yürütme Bölümü
Fonksiyon_adı := değeri;
End;
biçiminde tanımlanır.
Bu bildirimde FUNCTION anahtar sözcüğü, derleyiciye bir fonksiyon olduğunu bildirir. fonksiyon_adı fonksiyonu diğerlerinden ayıran kimliktir. Parantez içindeki değişken_adı fonksiyonun bağlı olduğu değişkeni ve tur fonksiyonun tanım bölgesini; yani değişkenin hangi kümede değer alabileceğini gösterir. En sağdaki değer_türü ise fonksiyonun değer kümesini gösterir.
Her procedürde olduğu gibi bir yürütme bölümü vardır. Yürütme bölümünde, fonksiyonun değerini hesaplayan deyimler yer alır. Bu hesap sonunda,
Fonksiyon_adı := değer;
deyimi, fonksiyonun değerini belirler. Genel olarak, bu değer, değişkenlere bağlı olarak değişir. Matematikteki y=f(x) kuralı yerine geçer.
Örnek
Program topla;
Uses wincrt;
var
a, b, c : integer;
t : integer;
FUNCTION toplam(x,y,z:integer): integer;
Begin
toplam := x+y+z;
End;
Begin
writeln('Üç tamsayı giriniz :');
readln(a,b,c);
Writeln(toplam(a,b,c))
End.
bildirimi üç gerçel sayıyı toplayan basit bir fonksiyon tanımlar. Fonksiyon çağırma eylemi, prosedür çağırma ile aynıdır. Programın yürütme bölümünde, uygun parametreler girilerek fonksiyon adı yazılır. Prosedürlerde olduğu gibi, çağrıda kullanılan gerçek parametrelerin sayısı, konumu ve türü, fonksiyonun formal parametreleriyle tam uyum sağlamalıdır.
Bazı hallerde aynı işi bir prosedür ya da bir fonksiyonla yapabiliriz. Örneğin, aşağıdaki procedure yukarıdaki fonksiyonun yaptığı işi yapar.
Program topla;
Uses wincrt;
var
a, b, c : integer;
t : integer;
PROCEDURE toplam(x,y,z:integer; var top : integer);
Begin
top := x+y+z;
End;
Begin
writeln('Üç tamsayı giriniz.:');
readln(a,b,c);
toplam(a,b,c,t);
Writeln(t)
End.