Bu sayfadaki yazılar
Sayfanın metni
Sayfa 53
HACİM (10.0, 5.0, 4.0); Elde edeceğimiz sonuç HACİM:200.0
olurdu. Eğer bir modül olarak hazırlamak yerine HACİM modülünün yaptığını program içinde yaptırmak isteseydik, programımıza aşağıdaki satırları eklememiz gerekirdi:
UZUNLUK: GENİŞLİK: YÜKSEKLİK ZUNLUK*GENİŞLİK* YÜKSEKLİK; WRITELN *', H;9:1);
Aslında modül yazarak bizim yaptığımız, bilgisayara yeni bir komut kazandırmaktır. Nasıl WRITE, WRITELN, READ vs. gibi komutlar varsa artık HACİM de bilgisayar için bir komut olmuştur. Programımızın neresinde hacim hesaplamamız gerekirse yeni komutun adını ve gerekli parametrelerini vermek yeterli olur.
Program Döküm Eki'nde PROCEDURE kullanarak çalışan basit bir program bulacaksınız.
Sadece değişken bildirimi ve program komutlarından oluşan uzun bir programı yazmanın ve anlamanın zorluğunu söylemeye gerek yok. Bu yüzden bir program haline getirmeye çalıştığımız problemimizi daha ufak parçalara bölmeye çalışırız. Ufak parçaları da daha ufak parçalara böleriz. Bu işlem bölünemeyecek ufak parçalara ulaşıncaya kadar devam eder. Bölünemeyecek ufak parçalar program modüllerimiz olan PROCEDURE halinde yazılırlar. Hemen hemen tüm problemleri veri okuma, hesap yazma, sonuçları basma şeklinde üç ayrı alt probleme bölebiliriz. Programımız bittiğinde bir grup modülden oluşur. Her modül daha fazla bölünemeyecek ufak problemlere karşılık gelir. Bir PASCAL procedure'ü, kendi ismi ile çağrılabilen bir program modüldür. Geçen bölümde genel olarak program modüllerini inceledik ve genel yapılarını gördük. Geçen bölümde gördüğümüz alt programlar sadece kendilerini çağıran programdan değer alabiliyor, ancak değer iletemiyorlardı. Daha doğrusu parametrelerde yer alan değişkenlerin değerini kullanıyorlar, ama bu değişkenlerin değerlerindeki değişiklik çağıran programı etkilemiyordu.
DEĞER VE DEĞİŞKEN PARAMETRELER
Geçen bölümde HACİM isimli bir modül tanımlamıştık. Modülümüz uzunluk, genişlik ve yükseklik değerlerini alıp cismin hacmini hesaplayarak ekrana yazıyordu. Bu modülü iki parçaya bölebiliriz. Yeni modülümüz gerekli bilgileri alsın ve parametre listesine ekleyeceğimiz dördüncü değişken yardımı ile bulduğu değeri ana programa göndersin.
Alt programlar sayesinde programımızı, ufak birçok modül yazıp bunları birleştirerek oluşturabiliyoruz.
PROGRAM HESAP; VAR UZUNLUK, GENİŞLİK YÜKSEKLİK,SONUÇ : REAL; PROCEDURE HACIM(U,G,Y: REAL; VAR H:REAL); BEGİN EN
BEGİN WRITEÇVERİLERİ READ(UZUNLUK); WHİLE UZUNLUK > 0.0 DO BEGİN READLN(GENISLIK, HACIM(UZUNLUK, GENİSLİK,YUKSEKLİK,SONUC); WRITELNÇHACIM - *, SONUC:9:3); WRITELN; GIRIN:”); READ(UZUNLUK); END; END.
HACİM modülünde yer alan parametre listesindeki VAR sözcüğü dikkatinizi çekti mi? Geçen bölümde yer alan örnekte parametre listesinde yer alan değişkenleri sadece dışarıdan veri almakta kullanmıştık. VAR komutu sayesinde parametrelerde yer alan değişkenleri hem veri almada, hem de veri vermede kullanacağız. Sadece kendisini çağıran program, fonksiyon veya procedure'dan veri taşıyan parametre değişkenlerine DEĞER PARAMETRESİ diyoruz. Eğer parametrede yer alan değişken veya değişkenlerin önünde VAR komutu yer almış ise bu değişkenler hem değer almada hem de değer vermede kullanırlar. Bu tür değişkenlere DEĞİŞKEN PARAMETRE adını veriyoruz. Modülün çağrıldığı komutta DEĞER parametresine karşı gelen parametre bir değişken veya bir ifade olabilir. HACİM(UZUNLUK,... veya HACİM(2*UZUNLUK,...
Eğer DEĞİŞKEN PARAMETRE kullanmışsak modülün çağrıldığı komutta DEĞİŞKEN PARAMETRESİNE karşı gelen parametre sadece bir değişken olmalıdır. Değişken yerine bir ifade kullanmak hata mesajına yol açar. Yukarıdaki örneğimizde U, G, Y değişkenleri modülümüze modülü çağıran yerden veri taşınmasında kullanılıyor. H değişkeni ise modül için hesaplanan bir değeri modülü çağıran yere iletiyor. DEĞİŞKEN PARAMETRE'lerin bildirimi daima VAR (reserved word) komutu ile başlamalıdır. Eğer VAR komutunu yazmayı unutursanız bu değişkenler DEĞER PARAMETRESİ olarak alınırlar. Örneğimizdeki H := U * Y * G; komutu çalıştığında HACİM := U * Y * G; komutu çalışıyormuş etkisi olur. Ne zaman DEĞER PARAMETRESİ, ne zaman DEĞİŞKEN PARAMETRESİ kullanacağız? Başlıca üç kural şeklinde özetleyebiliriz: (1) Eğer modüle gönderilen bilgi geri alınmak zorunda değilse, o zaman DEĞER PARAMETRESİ kullanabiliriz. Bu tür bir parametreyi giriş parametresi olarak adlandırabiliriz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 52
BURAK KİPER
PROCEDURE (Alt programlar)
Yazdığımız bir fonksiyon kendisine veri olarak bir veya birkaç parametre alıp sadece bir tek değer elde eder. Bu yüzden birkaç veri karşılığı sadece bir değer elde edeceğimiz durumlarda fonksiyon yazmak yararlı olabilir. Peki yazacağımız modülün birden fazla sonuç vermesi gerekiyorsa ne yapabiliriz? Bu noktada bize yardımcı olarak PROCEDURE'lar yani alt programlar devreye giriyor. Alt programlar sayesinde yazımızın başında da söylediğimiz gibi programımızı, ufak birçok modül yazıp bunları birleştirerek oluşturabiliyoruz. Modüllerimiz birçok parametre alıp birçok sonuç elde ederek sonuçları kendisini çağıran ifadeye iletebiliyor, bu sırada parametreleri tanımlama şeklinize göre veri parametrelerinin de değerleri değişikliğe uğrayabiliyor. İlk olarak yapısını görelim:
PROCEDURE procedure-ismi; Bölgesel-bildirim-bölümü BEĞİN komutlar END;
PROCEDURE kelimesinden sonra sizin vermiş olduğunuz isme göre modülümüz tanımlanmış olur.
Bölgesel-bildirim-bölümü'nde yer alan tüm değişkenler sadece modülümüz çalıştırıldığında tanımlıdırlar ve sadece modülün içinde kullanılabilirler.
Yazdığımız modülü çalıştırmak istediğimizde adını yazmamız yeterli olur. Eğer modülümüz parametrelere sahip olacaksa yapısı aşağıdaki gibi olmalıdır.
PROCEDURE proc-ismi (parametreler); Bildirim-bölgesi BEGIN komutlar END; Aynı şekilde isteğimize göre modülümüze isim vererek modülümüzü tanımlamış oluyoruz. Bundan sonra parantez içinde parametreler yer alıyor. Bildirim bölgesinde yer alanlar sadece modül çalıştırıldığında tanımlı oluyorlar. BEGIN...END arasında modülümüzü oluşturan komutlar yer alıyor. Modülümüzü çalıştırmak için modülün adını ve parantez içinde parametrelerini vermek yeterli olur. Parametrelere göre hacim hesaplayacak bir modül hazırlayalım:
PROCEDURE HACİM (UZUN- LUK, GENİŞLİK, YÜKSEKLİK: REAL);
VAR H:REAL; BEGÜN H:- UZUNLUK*GENİŞLİK* YÜKSEKLİK; WRITELN (HACİM:0, H:9:1); END;
Bir yapısı program veya fonksiyon yapısına benzer. Sadece ayrılmış kelime olarak PROGRAM veya FUNCTION yerine PROCEDURE kullanıyoruz. Ancak PROCEDURE başlığı FUNCTION başlığından bir noktada ayrılıyor: Procedure ismi bir değer yüklemede kullanılmadığından sonuç veri tipine ihtiyaç duymuyoruz. Yukarıda yazmış olduğumuz modülü çalıştıralım: