YAPISAL (Modular) PROGRAMLAMA

 

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 PROCEDURE

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.

Formal ve Gerçek Parametreler

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}

 

 

Fonksiyonlar

 

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.