Bu sayfadaki yazılar
Sayfanın metni
Sayfa 58
Geçen sayımızda bahsettiğimiz, bir sakıncası bulunuyor. Eğer modülle ana programı arasında veri alışverişini PARA-
METRE değişkenleri sağlarsa bir bakışta hangi değişkenlerin veri taşıdığını hangi değişkenlerin etkilendiğini görebiliriz. Ancak işin içinde genel değişkenler kullanırsak bir süre sonra programımıza baktığımızda hangi değişkenlerin modüllerle veri irtibatı sağladığını anlamakta güçlük çekeriz. Eğer PARAMETRE değişkenlerini veri alışverişinde ön-kapı olarak düşünürsek GENEL değişkenlere de veri alışverişinin arka-kapısı diyebiliriz. Genel değişkenleri modülle ana program arasında veri alışverişinde kullanmak düzensiz bir program hazırlamamıza neden olur. Bu yüzden veri alışverişlerinde PARAMETRE değişkenlerini kullanmamız iyi bir program hazırlamamız açısından doğru olacaktır. Buna rağmen karşılaşabileceğimiz iki durumda GENEL değişkenleri veri alışverişinde kullanmak daha faydalı olur: (1) Eğer bir modülü çağırdıktan sonra modüldeki bazı değerleri korumak istiyorsak, bölgesel değişkenlerle amacımıza ulaşamayız. Modüller her çağrıldıklarında bölgesel değişkenler için özel bir hafıza alanı ayrılır. Modülden çıkıldığında modüle ait bölgesel değişkenlere yüklenmiş değerler de kaybedilir. Bu modül tekrar çağrıldığında yeni bir hafıza alanı ayrılır. Kalıcı olmasını istediğimiz bir değer varsa GENEL değişken kullanmamız gerekir. (2) Bazen birçok modül aynı veri yapısı üstünde çalışır. Mesela büyük bir tablo üstünde. Böyle bir durumda birçok modül tarafından kullanılan değişkeni GENEL değişken olarak tanımlamak daha uygun olacak- Bu yazımızda anlattıklarımızı pratik olarak da uygulayabilmek için PROGRAM Döküm Eki'ndeki iki programı inceleyebilirsiniz. Genel değişkenleri kullanmamız için iki duru-
BURAK KİPER mun mevcut olduğunu söylemiştik. İlk programımız böyle bir duruma örnek olabilir. Bu programımızda rastgele sayılar üreten bir fonksiyon tanımlanıyor. Bu fonksiyon kullanılarak bilgisayar 0 ile 100 arasında değişen sayılar tutarak bu sayıyı bulmanızı istiyor. Rastgele sayı üreten fonksiyonumuz pek profesyonel bir fonksiyon değil ama birçok oyun tipi uygulamada işinizi görür. Fonksiyonumuza çekirdek bir rakam gerekiyor. Fonksiyonumuz aldığı çekirdek sayıyı kullanarak yeni bir çekirdek sayı üretiyor. Yani üretilen çekirdek sayı bir sonraki hesaplamada kullanılıyor. Çekirdek sayıyı taşıyan değer GENEL değişken olarak tanımlandığından fonksiyon her çağrıldığında çekirdek sayının bir evvelki değeri kaybolmuyor. 1 ile 100 arasında bir sayı elde etmek istediğimiz için çekirdek sayımızı 100 ile çarpıp elde edilen sonucun tam sayı kısmına 1 eklemek yeterli oluyor.
İkinci programımız ise bir hesap makinesini taklit ediyor. Hesaplatmak istediğiniz işlemi belirli bir yapıya göre girmeniz gerekiyor. Aksi takdirde hata mesajı ile karşılaşabilirsiniz. Geçen sayılarda basit veri tiplerini incelemiştik. Bu yazımızda basit veri tiplerinde kullanacağımız standart fonksiyonlarla devam edeceğiz. İNTEGER, BOOLEAN ve CHAR veri tipleri basit veri tiplerindendir. Standart olan bu üç veri tipinin de, bizim tanımlayabildiğimiz basit veri tiplerinin de her değerinin bir evvel gelen ve bir sonra gelen değerleri vardır. Sadece ilk değerin kendinden evvel, son değerin de kendinden sonra bir değeri bulunmaz. Basit veri tipinde yer alan değerlerin sıraları tanımlanmıştır. Mesela İNTEGER veri tipinde 1'den sonra 2 gelir. Boolean veri tipinde FALSE değerinden sonra TRUE değeri gelir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 59
PRED, SUCC ve ORD fonksiyonları tüm basit veri tipleri için kullanılabilirler. ORD (parametre): ORD fonksiyonu herhangi bir basit veri tipinin sırasını verir. Parametre basit veri tipinde olmak zorundadır. PRED (parametre): PRED fonksiyonu sonuç olarak parametrede yer alan basit veri tipinin bir önceki değerini verir. Eğer parametrede yer alan basit veri tipi ilk değerse fonksiyonun sonucu tanımsız olur. SUCC (parametre): SUCC fonksiyonu sonuç olarak parametrede yer alan basit veri tipinin bir sonraki değerini verir. Eğer parametrede yer alan basit veri tipi son değerse fonksiyonun sonucu tanımsız olur. Basit veri tipleri ile kullanabildiğimiz üç fonksiyonu örneklerle görelim. Örneğimiz için kendimize bir basit veri tipi tanımlayalım
TYPE
dil (basic, pascal, logo, fortran). Parametre ORD 0 pascal BELİRSİZ pascal 1 logo basic logo 2 fortran pascal 4 BELİRSİZ. fortran 0 BELİRSİZ BELİRSİZ tabe 0 0 1 1 10 10 nn
Sadece CHAR veri tipi için geçerli olan CHR fonksiyonumuz bulunuyor. CHR (sıranumarası) CHR fonksiyonu sıra numarası verilen karakteri verir. CHR fonksiyonunda parametre olarak İNTEGER veri tipinde bir sayı veya ifade kullanabilirsiniz. Eğer yazdığınız sıra numarasına karşılık gelen herhangi bir karakter yoksa fonksiyonun değeri belirsiz olur. CHR fonksiyonu özellikle ekrana basılamayan karakterlerin ekrana basılmasında çok yararlıdır. Mesela,
PROCEDURE ALARM; CONST ZIİL- 7; VAR
BEGİN FOR I:—- TO 10 DO WRITELN(CRRIZIL)); END;
Bu ufak alt program çalıştığında bilgisayar ses çıkaracaktır. CHR fonksiyonu sadece CHAR basit veri tipi için geçerlidir. Fakat kolaylıkla kendi tanımladığımız basit veri tipleri için de CHR benzeri bir fonksiyon yazabiliriz.
Herhangi bir basit veri tipinde tanımlanmış değişkeni FOR komutuyla kontrol etmemiz mümkündür.
Mesela, TYPE SIRA = 0..4; şeklinde bir tanımlama yapalım.
CEVİR(N:SIRA):DIL; CASE N OF 0:CEVİR CEVİR: EVİR
BASIC; ASCAL; LOGO;
END END;
SIRA ve DİL veri tiplerinin ana programda tanımlandığını kabul ediyoruz. Aslında veri tipleri daha çok genel olarak tanımlanır. Böylece diğer tüm alt programlar yeni tanımlanan veri tiplerini kullanabilir. Herhangi bir basit veri tipinde tanımlanmış değişkeni FOR komutunda kontrol değişkeni olarak kullanabilirsiniz. Mesela,
VAR D:DIL; BEGĞİN FOR D:- BASIC TO LISP DO WRIİTELN(ORD(D):5) END.
Kendi tanımladığımız veri tiplerinin bir dezavantajı bulunuyor. Kendi tanımladığımız veri tiplerindeki değişkenlere READ, READLN komutu ile yeni değer yüklemek ve WRITE, WRİTELN komutları ile de değişkenin değerini yazdırmak mümkün değildir. Eğer yukarıdaki örnekte komutunu yazacak olursanız bir hata mesajı ile karşılaşırsınız.
Yapısal veri tipi: Diziler
Elimizdeki verileri düzenlemenin bir yolu da verileri listeler veya tablolar halinde düzenlemektir. Verileri bu şekilde düzenlemede kullanılan yapısal veri tipi ARRAY (dizi) olarak biliniyor. ARRAY veri yapısında yer alan veri birimlerinin hepsi aynı veri tipindedir. Bir ARRAY kullanarak bir dizi veriyi aynı değişken isim altında saklayabiliriz. Böylece o değişkende yer alan tüm verilere kolaylıkla ulaşabiliriz. ARRAY veri yapısına bir örnek verelim;
TYPE LISTE - OF REAL; VAR X:LISTE;
Artık X değişkeninde beş ayrı veri bulundurabiliriz. Pascal X değişkeni için beş hafıza birimi ayırır. X değişkenindeki her veri REAL veri tipinde bir değer taşır.
Bir dizide yer alan verileri işlemek için her veriye tek tek ulaşabilmemiz gerekir. Dizide yer alan verilere indeksleri aracılığı ile erişebiliriz. Mesela X değişkeninde yer alan ikinci elemana bir değer yükleyelim,
XI): - 4.4;
Değişken isminden hemen sonra gelen köşeli parantezler içinde yer alan sayı dizideki belirli bir elemanın yerini belirtir. Örneğimizde X değişkeninin sadece beş elemanı olabilir. X değişkenini kullanarak bazı işlemler yapalım:
WRITELN (X(1))
XI2) XI) 4 2.1 XİS) 4 XI2) 59