Bu sayfadaki yazılar
Sayfanın metni
Sayfa 56
LABEL'dan sonra gelen komut yerine BEGIN...END blokları arasında komut grupları da olabilir.
CASE AY OF 1,3,5,6,8,10,12: GUN: - 31; 4,6,9,1 :GUN: — 30; 2 : BEĞİN I FRAC (Y/4)-0 THEN GUN:-29 ELSE 28; END:
Üstteki programımızda AY, GÜN ve Y değişkenlerinin INTEGER veri tipinde daha evvel tanımlandığını kabul ediyoruz. FRAC fonksiyonu yapılan bölmenin kalanını hesaplıyor.
Hangi komutun işleneceğini saptayan değeri üreten ifadeye “seçici” denir. Seçici'nin değeri INTEGER olarak sınırlandırılmamıştır; REAL veri tipi hariç şimdiye kadar öğrenmiş olduğumuz tüm veri tiplerini kullanabiliriz. Aşağıdaki ufak programı inceleyin.
PROGRAM örnek; VAR NOT: CHAR; BEGIN READLN (NOT); CASE OF
“A': WRİTELN ("Cok “B': WRİTELN ('İyi'); *“C': WRİTELN 'D': WRİTELN 'E': WRİTELN (“Zayıf”); END; END;
CASE komutunda kullanılan LABEL'ların veri tipi seçici değişken veya ifadenin veri tipi ile aynı olmak zorundadır.
Son olarak program döküm ekinde bulacağınız programın genel açıklamasını görelim:
Programımız bir işyerinde çalışan komisyoncuların çalışma şekillerine göre alacakları ücreti saptıyor. Çalışanlar üç grupta hesaplanıyor; geçici, düzenli, kıdemli. Programımız satıcının ne kadarlık satış yaptığını sorduktan sonra hangi türde olduğunu (G)eçici, (D)üzenli, (K)ıdemli sorusunu yönelterek öğreniyor. Yapılan seçim TİP değişkenine yükleniyor. WHILE döngüsü ile G, D, veya K harflerinden sadece birinin seçilmesi sağlanıyor. CASE komutu ile yapılan seçime göre program akışı sağlanıyor.
CASE TİP OF *G': “Geçici satıcı için komisyon hesapla”” “D”; “Düzenli satışı için komisyon “K': “Kıdemli satıcı için komisyon hesapla” END
ALT PROGRAMLAR
Şimdiye kadar herhangi bir programlama dilinde görülebilecek komutları öğrendik. Yazımızın başında
PASCAL'ın modüler programlama için çok uygun bir dil olduğunu söylemiştik. PASCAL'ı böylesine güçlü bir dil yapan nedir? Büyük boyutta bir program yapacağımız zaman, programımızı her biri kendi başına bir program sayılabilecek modüller halinde hazırlarız. Bu modüllerin birleşmesi ile programımız oluşur. Modüler bir program yazmak bize ne gibi faydalar sağlar? İlk olarak yapacağımız işleri ufak parçalara ayırıp, bu parçalarla tek tek uğraşabiliriz. Hazırladığımız modüllerin sağlıklı bir şekilde çalıştıklarını anlamamız, boyutları ve yaptıkları işler ufak olduğundan çok daha kolay olur. Programda her hangi bir mantık hatası çıktığında, hatanın nerede olduğunu aramak için uzun araştırmalara girmemiz gerekmez; soruna sebep olan modülün elden geçirilmesi hatanın giderilmesi için yeterli olur. Nasıl bir araba başlıca dört teker, dört kapı, bagaj kapakları, kaporta ve iç aksamdan oluşursa, biz de programımızı böyle küçük parçalara, yani alt programlara ayırarak hazırlarız. Modüler bir programlama yapmanın başlıca üç yararını sayabiliriz:
(1) Programımız için bir modül hazırlarken dikkatimizi sadece bu bölüme yöneltebiliriz, böylece programı kolaylıkla baş edilebilecek parçalara ayırmış oluruz.
(2) Çok büyük programlarda aynı anda farklı kişiler programın farklı modüllerini hazırlayabilirler.
(3) Eğer bir modülün programda birden fazla yerlerde kullanılması gerekiyorsa modül bir kere yazıldıktan sonra ihtiyaç duyuldukça kullanılabilir. Başka programlama dillerinde de alt programlar bulunuyor, ancak PASCAL'da alt programlar çok daha önemli bir yer tutuyor. BASIC'te bir alt programı ancak satır numarası vererek çağırabiliyorsunuz ancak PASCAL'da alt programınızın, daha doğrusu modülünüzün adını vermeniz yeterli oluyor.
Öncelikle alt programların yapılarını inceledikten sonra programlarımızı modüler bir yapı kullanarak nasıl hazırlayacağımızı göreceğiz.
FUNCTIONS (fonksiyonlar)
SQR, SQRT, TRUNC, ROUND önceden tanımlanmış olan fonksiyonlardan bazılarıdır. Ancak önceden tanımlanmış olan fonksiyonlardan hiçbirisi ihtiyacımızı karşılayamazsa ne yapabiliriz? FUNCTION bildirimi ile istediğimiz bir fonksiyonu tanımlayabiliriz. Verilen bir sayının isteğimiz üstünü bulabilen fonksiyonu aşağıda inceleyebilirsiniz.
FUNCTİON USALMA (X:RE- AL;N:İINTEGER4):REAL; VAR SONUÇ : REAL; I:İNTEGER; BEGIN SONUÇ: — 1.0; FOR 1:—1 TO ABS(N) DO SONUÇ: — sonuç*X;
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 57
IFN -0 THEN USALMA: - SONUÇ
ELSE USALMA: - 1.0/SONUÇ END;
Kendi yazdığımız fonksiyonda daha önceden tanımlı olan ABS() fonksiyonunu kullandık. ABS() fonksiyonu sayesinde N değişkeninin değeri negatif de olsa gerekli sayıda çarpma işleminin yapılması sağlanmış oldu. Fonksiyonumuzun ilk satırını oluşturan:
USALMA(X: REAL;N:İNTERGER):REAL;
fonksiyonun ismini ve parametrelerini belirliyor. Fonksiyonumuzun nasıl çalıştığını anlatmadan evvel kullanıcı tarafından tanımlanan fonksiyonların yapısını görelim: FUNCTION fonksiyon-ismi (Parametreler): Sonucunun veri tipi; Bölgesel-bildirim-bölümü
BEGIN
Fonksiyonu oluşturan komut satırları
END;
FUNCTION'dan sonra fonksiyonun ismini yazıyoruz, daha sonra parantez içinde fonksiyonun parametreleri bildiriliyor, son olarak bu satırda parantez kapatıldıktan sonra iki nokta üst üste koyularak (':') fonksiyonun sonucunda elde edilecek neticenin veri tipi bildiriliyor. Bölgesel-bildirim-bölümü'nde bildirilen tüm değişkenler sadece bu fonksiyon çağrıldığında tanımlı hale geliyorlar. BEGIN...END arasında fonksiyonu oluşturan komut satırları yer alıyor. Komut satırlarının en az birinde komutun sol tarafında olmak üzere fonksiyonun adının bulunması gerekiyor. Üstteki örneğimizde USALMA := SONUÇ; şeklinde bir ifade kullanmıştık. Bu şekilde kullanılan bir ifade sonucunda fonksiyon çalışmasını bitirdiği zaman bulduğu değeri ismine yükler. Üstteki örnekte dikkatinizi ilk olarak fonksiyonun sonu olan END satırından sonra noktalı virgül “;” geldiği çekmiştir. Gerçek fonksiyon yapısı bakımından program yapısına benziyor, ama END komutundan sonra nokta “.” yerine noktalı virgül “;” geliyor. Fonksiyon tanımlarken dikkat etmemiz gereken iki nokta bulunuyor.
(1) Sonucun veri tipi standart veri tiplerinden (BOOLEAN, INTEGER, REAL, CHAR) biri olmak zorundadır.
Eğer fonksiyonumuzda parametre bulunmayacaksa parametreler bölümünü ve parantezleri kullanmayız.
Örneğimizde tanımladığımız fonksiyonu nasıl kullanacağız? Programımızın herhangi bir satırında fonksiyonun adını ve gerekli parametreleri vererek istediğimiz sonucu elde edebiliriz. ÇARPIM değişkeninin programımızda REAL veri tipi ile tanımlandığını kabul edelim. Programımızda şöyle bir satır kullanabiliriz:
ÇARPIM: - USALMA (5.0,4);
Fonksiyonumuzda beş sayısının dördüncü üssünü bulmasını istiyoruz, bu komut işlendiğinde ÇARPIM değişkeninin içeriği 625 olur. Şimdi satır satır fonksiyonumuzun nasıl çalıştığını görelim:
Ayrılmış kelimelerden (RESERVED WORDS) olan FUNCTION ile bir fonksiyonun yazılımına başlıyoruz, daha sonra fonksiyonun ismi hemen sonrasında da parantez içinde parametreler geliyor. Fonksiyon program içinden çağrıldığında programın içinde adını ve parantez içinde parametrelerini vermemiz gerekiyor. Parametreleri de fonksiyon yazılırken kullanılan sıraya göre vermemiz gerekir:
Programda ÇARPIM: — USALMA (5.0,4);
demiştik. Parametrelerin birbirlerinden virgül (',') ile ayrıldıklarına dikkat edin. 5.0 değeri X parametresine, 4 değeri N parametresine karşı gelmektedir. Eğer parametreleri karşılıklı gelecek şekilde vermezseniz hiç ummadığınız neticeler elde edebileceğiniz gibi hata mesajları ile de karşılaşabilirsiniz. Eğer fonksiyonumuzun hiç bir parametresi yoksa parantezleri kaldırmamız gerekir. Fonksiyonumuzu tanımlarken parantez içine yazmış olduğumuz ne anlama geliyor? Fonksiyonumuzun iki parametresi var. İlk parametre olan X değişken REAL veri tipinde, ikinci parametre olan N değişkeni ise INTEGER veri tipinde olmalı anlamına gelir. USALMA(5.0,4) ile fonksiyonumuzu çağırdığımızda X değişkeni 5.0 değerini alırken N değişkeni 4 değerini alıyor. Parantezden sonra gelen :REAL ise fonksiyonumuzun neticede REAL veri tipinde bir sonuç göndereceğini anlatıyor. Fonksiyonumuzu yazarken en az bir ifadenin solunda fonksiyonun isminin bulunması gerektiğini söylemiştik. Bu sırada fonksiyonun ismi normal bir değişkenmiş gibi davranır ve fonksiyonun başlığında yer alan parantezlerden sonra belirttiğimiz veri tipine sahip olur. Bir fonksiyon hiç bir parametre almayacağı gibi örneğimizde gördüğümüz gibi birden çok parametre de alabilir. Program çalışması sırasında fonksiyonun adı ile karşılaştığında özel bir hafıza bölgesi hazırlar. Bu bölgede fonksiyonda tanımlanan değişkenler yer alır. Örneğimizde USALMA, SONUÇ, I, X, N değişkenleri için yer ayrılır. Fonksiyon yazarken yapabileceğiniz hatalardan birisi de, fonksiyonu yazarken fonksiyonun ismini bir ifadenin sağında kullanmanız olabilir. Çünkü fonksiyonun ismi sadece bir ifadenin solunda kullanıldığında değişken vazifesi görür. Program Döküm Eki'nde bir fonksiyonun nasıl programda kullanıldığına dair bir örnek program bulabilirsiniz.