87 7- Turbo Pascal Programlamada Alt Programlar (Procedure) Alt
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