87 7- Turbo Pascal Programlamada Alt Programlar (Procedure) Alt

Yorumlar

Transkript

87 7- Turbo Pascal Programlamada Alt Programlar (Procedure) Alt
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
7- Turbo Pascal Programlamada Alt Programlar (Procedure)
Alt programların ana programda yapacağımız ek işlevleri üstlendiğinden
daha önceki bölümde bahsetmiştik. Alt programlar genelde ana program
bloğu içerisinde kullanılan program parçacıkları olarak bilinir. Uzun
bilgisayar
programlarında
kodların
karmaşası
ve
tekrar
kullanılamamasından dolayı alt programlar önem kazanmıştır. Yapısal
bilgisayar programlama dillerinde ana program sadece alt programların
çağrıldığı veya parametrelerine değer geçirme yeri olarak tasarlanmalıdır.
Altprogramlar ve fonksiyonlar yukarıdan–aşağı
(top-down) tasarım
ilkelerine uymalıdır. Altprogramlar ayrı dosyalar halinde yazıldıklarına
tekrar kullanılabilme şansına sahiptir. Yazılan bir dosya işleme altprogram
veya fonksiyonu dışarıdan çağrılma yöntemleri ile tekrar kullanılabilme
olanağına sahiptir.
Altprogramlar Turbo Pascal bilgisayar programlama dilinde Procedure
olarak bilinir. Temel yazım kuralları Procedure içinde geçerlidir. Her alt
program
bir
pascal
bilgisayar
programında
olduğu
gibi
değişken
tanımlama, sabit ve dosya işlemlerini tanımlandığı blokları barındırabilir.
Alt programlar fonksiyonlarda olduğu gibi geri dönüş tiplerine de sahip
olan ve olmayan iki ayrı tiptedir. Geri dönüş tipine sahip şeklinde yazılan
procedure’ler
parametreli
procedure’lerdir.
Geri
dönüş
tipi
olmayan
Procedure’ler parametresiz procedure’lerdir. Parametreleri ana program ile
alt programlar arasında ver taşımak için kullandığımızı hatırlayalım.
Altprogramlarda en önemli işlemlerden birisi değişkelerin tanımlanma yeri
ve şeklidir.
Global değişkenler olarak bilinen genel değişkenler ana program içerisinde
ve alt programlar (proedure) içerisinde kullanılan değişken tipleridir. Bu
tip değişkenler ana programda tanımlanır ve alt programlarda da
kullanılırlar. Global değişkenler tanımlandıkları ana program içerisinden alt
programlara geçirilerek kullanılır ve sonuçlar ana programa tekrar aynı
değişken içerisinde geri gönderilir.
87
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
Lokal (yerel) değişkenler sadece alt programlarda (Procedure) tanımlanan
değişkelerdir. Bu tip değişkenler alt programlarda işlenir ve ana programa
aktarılmaz. Ana programa aktarmak gerektiğinde tanımlanan
global
değişkenler ile aktarılırlar.
7.1 Parametre Almayan Procedure’ler
Parametresiz procedure’ler de alt programda kullanılacak olan değişkenler
ana
programın
kullanılan
içerisinde
tüm
tanımlanmıştır.
kullanılan
değişkenler
Değişkenler
ve
değişkenlerdir.
sabitler
kullanıldıktan
ana
sonra
Altprogramlarda
program
bloğunda
içerisinde
değerler
saklanır. Bu tür altprogramlarda Procedure ismini yazmak yeterlidir.
Parametre ihtiyacı olmadığından ana programdan çağrıldığında ayrıca
değişken atamadan veya ayırmadan procudure çalışır çalışması sona
erdiğinde program kaldığı yerden çalışmaya devam eder.
Parametresiz alt program (Procedure) tanımlarken aynen bir pascal
bilgisayar
programı
yazıyormuş
gibi
tanımlamaları
yaparız.
Alt
programların (Procedure) en çok kullanılan değişkenleri global (genel)
değişkenlerdir.
Bu
değişken
tiplerinin
kullanılmasının
nedeni
alt
programlara gönderilecek olan değişkenlerin tanımlamaları genelde ana
program bloğu içerisinde yapılır. Alt programlar normal program gibi
düşünüldüğünden mutlaka begin ve end bloğu kullanılmalıdır.
Procedure deney;
Değişken_tanımlama;
Begin
…
end;
parametresiz alt programlara bir örnek verelim. Bu örnekte iki değişken
alt programlar yardımı ile programa girsin ardından iki değişken sayı
birbiri ile çarpılsın daha sonra ekrana yazdırılsın. Programda kullanılacak
olan değişkenler gerçel tipte olsun. Genelde bu tip çarpma işlemlerinde
88
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
değişkenler tam sayı tipinde seçilirler. Biz bu örnekte gerçel olanı
kullanmaya çalışalım.
Program deneme;
USES CRT;
var
x,y,z: real;
Procedure deg_gir;
begin
writeln(‘ İlk sayıyı girin ’);
readln(x);
writeln(‘ İkinci sayıyı girin ’);
readln(y);
end;
Procedure carp;
begin
Z:= x*y;
end;
Procedure deg_yaz;
begin
writeln(‘ İki sayının çarpımı’, z, ’ dir’);
readln;
end;
Begin {ana program blogu}
Clrscr;
Writeln(‘Bu program iki sayıyı carpar’);
Deg_gir;
Carp;
Deg_yaz;
End.
Programdan
görüldüğü
gibi
değişkenler
genel
olarak
yani
global
tanımlanmıştır. Bu değişkenler alt programlara ana program bloğu
89
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
içerisinden çağrılmakta ve değerler yine bu global tipte değişkenler ile geri
gönderilmektedir.
Ana program bloğunda alt programların çağrılma yöntemlerine bakacak
olursak burada sadece alt programları (Procedure) adları yazılmıştır. Alt
programlar kullanacakları değişkeleri ana program ile ortak kullandığından
tekrar alt program içerisinde herhangi bir tanımlama yapılmamıştır.
Program çalışmaya başladığında ana programdan alt program olan
Procedure deg_gir
yardımı ile değişkenleri çağırmakta ve ilk olarak
değişkenlerin değerlerinin girilmesi sağlanmaktadır. Daha sonra diğer alt
program olan Procedure carp ile girilen değişken değerleri çarpılmakta
ve sonuç ana programda tanımlanan z değişkeni ile ana programa
aktarılmaktadır. Aktarılan bu değişken değeri Procedure
deg_yaz alt
programı ile ekrana yazdırılmaktadır.
7.2 Parametre Alan Procedure’ler
Parametreli altprogramlar (Procedure) ana program ile alt program
arasında değişkelerin değerlerinin aktarıldığı yapılardır. Bu tip yapılarda
değişken değerleri tek yönlü ve iki yönlü aktarılmaktadır. Tek yönlü
aktarımlarda değişkenlerin değerleri alt programa gönderilir ve sonuç
değeri olarak aktarılacak olan parametre içerisinde değer aktarılır.
Alt programda tanımlanan parametrelerin değerleri yine alt programda
tanımlanan değişkenlerin ile ana programa gönderilir. Parametre olarak
gönderilen değişken değerlerinin sıralanmasına dikkat etmek gereklidir.
Kullanılan parametrelerin değerlerinin değişken değerlerine aktarılmasında
sıralama
esası
geçerlidir.
Değişkenlere
hangi
değer
aktarılacak
ise
parametrelerde o sıra takip edilir.
Parametre
olarak
kullanılan
değişkenlerden
alt
program
içerisinde
kullanılarak geri değer göndermesi isteniyor ise alt programın başında
tanımlanmalıdır. Bu tip alt program tanımlanmasına iki yönlü aktarım
denir. Genel olarak parametreli alt program tanımlanması aşağıdaki gibi
yapılmaktadır. Alt program isim_1 parametresiz olarak yazılan alt program
90
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
(Procedure) yapısındadır. Bu alt programda ana program bloğundan alt
programa herhangi bir değer gönderilmemektedir. Ana programdan
çağrılan Procedure isim_1 alt programı sadece kendi içerisinde yazılı olan
komutları çalıştıracak ve sonunda ana program çalışmaya kaldığı yerden
devam edecektir. Bu tip alt programda ana program yanında alt program
içerisindeki değişken tanımlamaları kullanılmamaktadır.
Procedure isim_1( değişken_param: değişken_tipi);
Değişken_tanımlama;
Begin
…
end;
Tek yönlü değer aktarımlı procedur’lerde değer tanımında olduğu gibi ana
programdan prosedüre veya procedure’den ana programa doğrudur.
Alt program Procedure isim_2 ana programdan aktarılan parametreler
alt programda işlenecek ve ana programa alt programdaki parametreler
ile geri gönderilecektir. Bu tanımlamada ana programda tanımlanan
değişken listesi de kullanılmaktadır. Eğer ana programda kullanılan bir
değişken
var
ise
Procedure
tanımlanırken
parametre
listesinde
bu
değişkende tanımlanmalıdır.
Procedure isim_2( var değişken_param: değişken_tipi);
Değişken_tanımlama;
Begin
…
end;
İstatistikte kullanılan ortalama ve ortalamanın varyansını hesaplayan
Turbo Pascal alt programı aşağıdaki gibi yazılabilir. Bu alt programda
91
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
PROCEDURE
avevar(data:
İrfan MACİT
glnparray;
n:
integer;
VAR
ave,svar: real);
var
j: integer;
s: real;
Begin
ave := 0.0;
svar := 0.0;
for j := 1 to n do
Begin
ave := ave+data[j];
End;
ave := ave/n;
for j := 1 to n do
Begin
s := data[j]-ave;
svar := svar+s*s
End;
svar := svar/(n-1)
End;
Procedure’lerde fonksiyonlar gibi değer aktarılacağı zaman fonksiyondan
gönderilecek olan değer fonksiyon adı olmaz. Aktarılacak olan değer veya
değer kümesi alt programın parametre listesinde tanımlanır.
i)
Tek Yönlü Değer aktarımlı Alt Programlar
Bu tip alt programlarda değerler ana programdan alt programa doğru veya
alt programdan ana programa doğrudur. Alt programda kullanılacak olan
değişkenler ana programdan işlenerek veya işlenmesi için alt programa
gönderilir.
İşlenmiş
veya
işlenecek
92
olan
değişkenler
alt
programın
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
çağrılmasından
sonra
işlenir
veya
İrfan MACİT
işlenmiş
şekilde
ana
programa
gönderilir.
Procedure yazılırken eğer ana programdan Procedure değer aktarılacak ise
alt program (Procedure) aşağıdaki gibi yazılır.
Procedure
Procudure_adi(değiş_listesi : değişken_tipi);
Begin
….
End;
Eğer alt programdan (Procedure) ana programa değer aktarılacak ise alt
program (Procedure) aşağıdaki gibi yazılır. Görüldüğü gibi aktarılacak olan
parametreler
VAR
değişken
parametre
bildirimi
ile
ana
programa
aktarılacak değişkenler tanımlanır.
Procedure Procudure_adi(VAR değiş_listesi: değişken_tipi);
Begin
….
End;
Bu tip bildirimli alt programlara yazılacak olan basit bir örnek aşağıdaki
gibidir. Bu
örneklerde çağrılacak olan değerler ve parametre listesine
dikkat etmek gerekir.
Procedure carpma(x,y:integer);
begin
carp:=x*y;
writeln(‘İşlemin Sonucu ’,carp);
end;
Alt programdan ana program değer aktarmak için yazılacak olan örnek ise
aşağıdaki gibi olur. Bu alt programda görüldüğü gibi değişken parametre
tanımlaması yapılarak değer aktarılmıştır. Alt programların parametre
93
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
listesinde
değişken
parametre
İrfan MACİT
olarak
tanımlanmakta
olduğunu
unutmamak gerekiyor.
Procedure carpma( VAR carp: integer);
var
x,y: integer;
begin
readln(x);
readln(y);
carp:=x*y;
end;
Görüldüğü gibi aktarılacak olan değer değişken listesinde tanımlanmıştır.
Alt program (Procedure) içerisinde kullanılacak olan değerlerde alt
program içerisinde değişken olarak tanımlanmıştır. Burada dikkat edilecek
olan önemli bir nokta kullanılacak olan değişkenlerin ana program
içerisinde genel değişken olarak tanımlanmaması gerekir. Eğer bu tip alt
program içerisinde kullanılan değişkenler ana program içerisinde kullanılır
ise değişkenlerin kullanımına ait hata kodu üretilecektir. Ek olarak her
değişken
tanımından
önce
mutlaka
VAR
değişken
tanım
bloğu
kullanılmalıdır.
ii)
Çift Yönlü Değer aktarımlı Alt Programlar
Alt program veya ana programda tanımlanan değişken listesi ile ana
programdan alt programa veya tam tersi aktarımların yapıldığı alt program
tanımlama yöntemidir. Bu tür tanımlamalarda ana programdan alt
programa doğru değişken listesinden değer aktarımı yapılabilir. Genel
tanımlamasına
inceleyecek
olursak
bir
tanımlamaların birleşiminden oluşmuştur.
önceki
bölümde
bahsedilen
Genel yöntem ana programda
tanımlanan değişkenlerin kullanımına yönelik şekil farkı vardır. kullanılacak
olan değişken ana programda tanımlanarak aktarılır.
94
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
Procedure Procudure_adi(VAR değiş_listesi : değişken_tipi,
değişkenler: değişken_tipi);
Begin
….
End;
Bu tip alt program tanımlamasına örnek verecek olursak aşağıdaki gibi bir
önceki örneği derleyebiliriz.
Procedure carpma( VAR carp: integer, x,y: integer);
begin
carp:= x*y;
end;
Görüldüğü gibi VAR carp tanımından ana programa aktarılacak değer
tanımlanmıştır. Her değişkenden önce kullanılması gereken VAR değişken
tanım bloğu burada değişken tanımından hemen önce kullanılmıştır. Bu tip
alt
program
tanımlamaları
değişkenlerin
kontrolü
açısından
dikkatli
yazılması ve değişkenlerin ile parametrelerin sıralama ve tiplerinin de
dikkat ile belirlenmesi gerekmektedir. Bu alt programı inceleyecek olursak,
VAR
carp ile bir değişken tanımlanmasının yapıldığını görmekteyiz.
Parametre olarak x,y:integer şeklinde tanımlanmış olan değer aktarım
parametreleri alt program (Procedure) parametresidir. Alt programdan
(Procedure) ana programa aktarılacak olan sonuç ise carp değişkeni
içerisinde ana programa gönderilmektedir.
Bir başak örnekte üçgenin alanını hesaplayan iki taraflı aktarım yapan alt
program yazalım.
Program ucgen_hesap;
Var
x,y: integer;
sonuc:real;
Procedure ucgen( VAR alan: real ; a,h: integer);
95
Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları
İrfan MACİT
begin
alan:= (a*h)/2;
end;
begin
writeln(‘Üçgenin kenar uzunluğunu girin ’);
readln(a);
writeln(‘Üçgenin h yüksekliğini
girin ’);
readln(h);
ucgen(sonuc, x,y);
writeln(‘Üçgenin alanı ’, sonuc);
end.
Programda görüldüğü gibi ana program içerisinde kullanılacak olan
değişkenler ile alt program içerisinde kullanılacak olan değişkenler ayrı
tanımlanmıştır. Bu tanımlama sonucunda ana programda tanımlanan
değişkenler alt programlara değer göndermekte kullanılmıştır. Alt program
(Procedure) içerisinde kullanılan değişken ve parametreler alt program
(Procedure) tanımlanırken bildirilmiştir.
Procedure ucgen( VAR alan: real ; a,h: integer);
begin
alan:= (a*h)/2;
end;
Değişken olarak tanımlanan VAR alan :real; ana programdan gönderilen
değişkeni alarak alt program (Procedure) içerisinde kullanmaktadır. Diğer
a,h: integer tanımlanması ise alt programın (Procedure) parametre
tanımlamasıdır.
Ana program içerisinde
ucgen(sonuc, x,y); yazımı ile alt program
(Procedure) kullanılmıştır. Değişken değer ve parametre listesinde ana
program
için
kullanılan
tanımlamaları
gereklidir.
96
kullanıldığına
dikkat
etmek

Benzer belgeler