29 Mart 2008 Cumartesi

Alt Programlarda sabit değişken

Alt programlarda, ana programlarda olduğu gibi sabit, değişken ve çeşitli tip tanımlamaları yapılabilir. Yapılan bu tanımlamalar, alt program aktif olduğu sürece geçerli olup alt programın çalışması sona erdiğinde alt programda tanımlanan değişken, sabit ve tipler bellekten silinir.


Procedure işlem blokları iki şekilde kullanılır,
1. Parametresiz Prosedürler
2. Parametreli Prosedürler
Parametreli Prosedürler

Ana program ve alt programlarda tanımlanan değişkenlerin farklı olması durumunda tercih edilirler. Ana programda tanımlanan değişken değerlerinin işleme alınmaları, alt programda tanımlanan değişkenlere aktarılarak yapılır.
Parametreli prosedürlerde de tek yönlü ve çift yönlü olmak üzere iki ayrı tür değer transferi söz konusudur. Eğer procedure ismini takiben parametrelerin tanım cümlesi VAR ile başlıyorsa parametreler arasında çift yönlü değer transferi yapılacak demektir. Yani ana programda kullanılan değişkenler alt programa aktarılacak ve alt programın çalışması sona erdiğinde sonuç değerler ana programa transfer edilir.
Tek yönlü değer transferinde ise parametrelerin tanım cümlesi VAR ile başlamaz, değer transferi ana programdan alt programa olur ve alt programın icrası sonunda ortaya çıkan sonuçlar ana programa transfer edilmez. Her iki tür için yazım örnekleri aşağıda verilmiştir.
Tek yönlü Transfer rocedure Altyordam(X;Y;Z:integer;KAD:real);
Çift yönlü Transfer rocedure Altyordam(VAR X;Y;Z:integer;VAR KAD:real);
Veri transferinde String değişken veya bir dizi değişken formal parametre olarak tanımlanamaz. String ve dizi değişkenler formal parametre olarak kullanılacaksa, tip bildirisinin özel bir tip ismi olarak verilmesi gerekir. Aşağıda verilen örnekler sözü edilen kurala göre hatalı yazılmışlardır.
Procedure Altyordam(A:Array1..100 of real);
Procedure Altyordam2(String200);
Uygun tanımlamalar yapmak için Type bölümünden yararlanılmalıdır. Aşağıda verilen örnek tanımlar özel tip isimler kullanıldığı için geçerlidir.
Type
Oz=Array1..100 of real;
sozcuk=String200;

Procedure Altyordam(Az);
Procedure Altyordam2(Sozcuk);
Ana programdan alt programa transfer sırasında tanım bloklarında kullanılan parametrelerin tipleri aynı olmak zorundadır. Aksi takdirde 'Tip Uyuşmazlığı' hatası meydana gelecektir.
Aşağıdaki örnek programları inceleyiniz.
program paramli1;uses crt; {Windows için Wincrt}vara,b,t:integer;procedure toplam(x,y:integer);begint:=x+y;end;beginclrscr;re adln(a);readln(b);Toplam (a,b);Writeln(t);end.

program paramli2;uses crt; {Windows için Wincrt}vara,b,t:integer;procedure toplam(x,y:integer;var z:integer);beginz:=x+y;end;beginclrscr; readln(a);readln(b);Toplam (a,b,t);Writeln(t);end.
Yukarıdaki programda X ve Y değerlerinin toplamları Writeln(t); program satırında ekrana yazdırılmaktadır. Aynı programda toplamı yazdırmak istenilen parametre değiştirildiğinde program hata verecektir. Aşağıdaki program derlendiği zaman çalışmayacak ve 3 nolu hata meydana gelecektedir. Programı yazarak hatanın nedenini anlamaya çalışınız.
program hatali_paramli;uses crt; {Windows için Wincrt}vara,b,t:integer;procedure toplam(x,y:integer;var z:integer);beginz:=x+y;end;beginclrscr;readln(a);r eadln(b);Toplam (a,b,t);Writeln(z);end.

Örnek 4: Aşağıdaki örnek programda dizgi isimli tek boyutlu bir dizi oluşturulmuş ve bu dizinin elemanları sıra ile 1-100 arasındadır. Bu dizi değer aldıkça altprograma değer transfer etmekte ve alt programda bu dizinin değerleri random komutu ile rastgele sayılardan oluşan yeni bir diziye aktarılmakta ve ana programa geri dönmektedir.
Program degerparametresi; uses crt; {Windows için Wincrt}type DiziTipi=Array[1..100] of integer;varDizgiiziTipi;Yenidizi1,YenidiziiziT ipi;K:word;PROCEDURE Ornekleme(PardiziiziTipi;var YeniDiziiziTipi);beginYenidizi[k]:=Random(Pardizi[k])end;beginfor k:=1 to 100 dobeginDizgi[k]:=K;Ornekleme(Dizgi,YeniDizi1);Writeln(Dizgi[k],' ',YeniDizi1[k]);end;While not keypressed doend.

Hiç yorum yok: