Pascal (10)

Geçen bölümde yapısal veri tiplerinden dizileri incelemeye başlamıştık. Tek boyutlu dizilerden sonra sıra çok boyutlu dizileri incelemeye geldi. Tek boyutlu dizileri yukarı aşağı gelip gidebildiğimiz sayfalar olarak düşünebiliriz. Bazen iki boyutta ifade edilmesi gereken veriler için tablolar oluştururuz. Bu tabloları aşağı yukarı ve sağa sola gidebildiğimiz sayfalar olarak düşünelim. Bu tablolar iki boyutlu dizilerdir. Pascal'da iki boyutlu bir dizi tanımlayalım:

VAR
T: ARRAYII..4,1..3) OF
INTEĞER;

T isimli INTEGER değerli tablomuz dört sıra ve üç kolondan meydana geliyor. Kolonlar 1 ile 3 arasında indekse sahip. Sıralar ise 1 ile 4 arasında indekse sahip. Tanımladığımız tablomuzu bir sayfa olarak düşünün. Sayfamız dört satıra sahip. Her satır ise üç tane INTEGER sayı alıyor. Tanımladığımız tablo muhtemelen şu değerleri içeriyor olabilir:

K1 K2 K3 S1: 4 2 10 S2: 14 30 80 S3: 5 96 22

Tablodaki istediğimiz herhangi bir değeri indekslerini kullanarak ifade edebiliriz. Mesela (2,3) satır2, kolon3 80 değerini taşıyor. Tablodaki bir değere ulaşabilmek için ilk önce sıra(satır), sonra kolon indeksini vermemiz gerekir: |satır,kolon| Mesela, T|3,1| = 22 İki boyutlu dizi için iki indeks kullandık. Üç boyutlu bir dizi içinse üç indeks kullanmamız gerekirdi. Pascal normalde istediğimiz boyutta dizi tanımlamamıza izin veriyor.

MEHMETULSeL

Mesela üç boyutlu bir dizi tanımlayalım:

VAR
B: ARRAYII..30,1..5,1..4) OF
REAL;

B adlı diziyi sayfaların oluşturduğu bir kitap gibi düşünebiliriz. İlk indeks kitabın sayfa numarasını belirtir. İkinci indeks o sayfadaki satırı belirtir. Üçüncü indeks ise kolonu belirtir. Bu durumda kitabın 25 numaralı sayfasında 3 numaralı satırın ikinci kolonuna bir değer vermek istersek:

Bİ25,3,2): —4.4;
RECORD-KAYIT

Son olarak yapısal veri tiplerinden dizileri inceledik. Dizilere birçok yüksek seviye programlama dillerinde rastlayabiliriz. Şimdi bahsedeceğimiz yapısal veri tipi ise PASCAL gibi yapısal programlamaya yatkın dillerin dışında diğer yüksek seviye programlama dillerinde bulunmaz. Bu yeni yapısal veri tipine RECORD adı veriliyor. RECORD sözcüğünün dilimizdeki karşılığı kayıt, sicil, tutanak anlamlarına geliyor. Bu veri tipinin yaptığı adına çok uygun. PASCAL'ın çok popüler bir dil haline gelmesinde bu veri tipinin katkısı çok büyük. Dizilerde yer alan bireylerin hepsinin aynı türde olması gerekiyordu. Buna karşın RECORD ile tanımladığımız bir değişkenin birimleri farklı veri tiplerine sahip olabilir. Mesela INSAN adlı bir değişkeni RECORD olarak tanımlarsak bu değişkenin birimlerinde o insana ait yaş, doğum yılı, iş, adres ve benzeri bilgileri saklayabiliriz. Bir dizide herhangi bir elemana indeks sayesinde ulaşabiliyorduk. Bir RECORD içinde ise alanlar bulunuyor. Bu veri tipini daha iyi anlamak için bir örnek görelim: Diyelim ki, bir kayıt tutmak istiyoruz. Kayıtta şu bilgiler yer almalı: İsim, cinsiyet, aylık ücret, giriş yılı.

TYPE
BILGI - RECORD
ISIM:PACKED
ARRAYII..10) OF
CHAR;
CINSIYET:(ERKEK,
KADIN);
UCRET:REAL;
END;
VAR
ISCI : BILGI;

Şimdi ISCI değişkenimize gerekli bilgileri yükleyelim:

ISCI.ISIM —'Alı
ISCI.CINSIYET : - ERKEK;
ISCI.UCRET  :—-200000.0;
ISCI.YIL :— 1989;

ISCI değişkenimizin var. Örneğimizde her elemanın veri tipi farklı. Herhangi bir elemana ulaşabilmek için değişken ismini verdikten sonra “.” nokta koyup elemanın ismini veriyoruz. Elemanlar kaydımızın alanlarını oluşturuyor ve istediğimiz veri tipine sahip olabiliyor. Kayıtta bir elemana ulaşmak için kullandığımız nokta, dizilerdeki köşeli paranteze denk geliyor. Eğer iki değişken aynı kayıt tipine sahipse ikisini birbirine doğrudan eşitleyebiliriz. Mesela: VAR ISCI, MEMUR : BILGI;

ISCI :— MEMUR;

tanımlaması doğrudur. Bu tanımlama ile MEMUR değişkeninin elemanlarının değerleri ISCI değişkeni-

RECORD yapısal veri tipi Pascal gibi yapısal programlamaya yatkın dillerin dışındaki programlama dillerinde bulunmaz.

nin elemanlarına yüklendi. Bir kayıt tanımlamasının genel halini görelim:

Kayıt-tıpı - RECORD
elemanl: veri tıpıl;
eleman2: veri tıpı2;
elemanN: veri tıpı-N
END;

Bu veri tipi ile çeşitli değişkenler tanımlayalım:

TYPE
KITAP - RECORD
BASLIK:PACKED
OF CHAR;
YAZAR,
BASAN,
SEHIR:PACKED
OF CHAR;
YIL: INTEGER
FIYAT: REAL;
END;
TYPE
TARIH - RECORD
AY:(OCA,SUB,
MAR,NIS,
MAY,HAZ,
TEM,AGU,
EYL,EKI,
KAS,ARA);
GUN:(PT,SA,CA,
PE,CU,CT,
PA);
AYINGUNU:1..31;
YIL:INTEGER;
END;

İÇ İÇE KAYITLAR

Tanımladığımız kaydın herhangi bir alanının bir kayıt olması mümkündür. Bu şekle bir örnek verelim:

TYPE
GUN - RECORD
G : TARİH;
AY: 41..12);
END;

GUN kaydımızın G alanı biraz evvel tanımladığımız TARIH kaydı ile tanımlandı. Mesela şu şekilde bir tanımlama yapalım:

VAR
BUĞUN: GUN;

Bu durumda BUGUN.G değişkeni TARIH veri tipindedir. BUGUN.G değişkenini kullanarak bazı işlemleri gerçekleştirelim:

BUGUN.G.AY — kas;
BUĞUN.G.GUN i— pe;
BUĞUN.G.AYINGUNU :- 4;
BUGUN.G.YIL 65;

İç içe kayıt tanımlarken kendisi de bir kayıt olacak alanın veri tipini ayrıca tanımlamak gerekmez. Aşağıdaki yöntem de kullanılabilir. Burada RECORD tanımlaması içinde geçen RECORD tanımlamasına dikkat etmemiz gerekir:

VAR
KISI:RECORD
ISIM:RECORD
ILK,
ORTA,
SON:PACKED
ARRAYÇI..20)
OF CHAR;
END;
ADRES:RECORD
SOKAK,
SEHIR:
PACKED
ARRAYII.12)
OF CHAR;
END;
END;

Bu tanımlamadan sonra kullanabileceğimiz değişkenleri görelim:

KISI.ISIM KISI.ADRES KISI.ISIM.ILK KISI.ISIM.ORTA KISI.ISIM.SON KISI.ADRES.SOKAK KISI.ADRES.SEHIR

WITH KOMUTU

Özellikle alanların kendileri de kayıt olduklarında kayıt değişkenlerinin isimleri aşırı derecede uzar. Bu değişkenleri sık kullandığınız yerlerde uzun uzun yazmak hem yorucu olur, hem de hata oranı yüksek olur. Bunu önlemek için PASCAL'da WITH komutu bulunuyor. WITH komutu sayesinde kayıt değişkeninin ismini kullanmadan sadece alan isimlerini kullanarak işimizi halledebiliriz. Mesela TARIH kaydını bu şekilde kullanalım:

VAR
T:TARIH;
BEĞIN
WITH T DO
BEGĞIN AY kas;
GUN
AYINGUNU: —4;
YIL 1-65;
END;
END.

WITH komutu ile aynı anda birden fazla kaydı kontrol edebiliriz. Buna bir örnek verelim:

WITH KISI, ISIM, ADRES DO
BEGIN
ILK: - ORTA;
SON: -
SOKAK:-'
SEHIR: - “Istanbul
END;

KAYIT DİZİLERİ

Tanımlamış olduğumuz kayıtlara sadece tek bir veri girebiliriz. Ancak kayıtları dizilerle birlikte tanımlarsak, birçok kayıt girme şansına sahip oluruz: Mesela;

VAR
KİTAPLIK:ARRAYÇ(I..100) OF
KITAP;

Bu tanımlamadan sonra kitaplığımızdaki 100 kitap için bilgi girebiliriz. Mesela 5 numaralı kitabın ismini öğrenmek için;

WRITELNİKITAPLIK|5)1.BASLIK);
Komutunu vermemiz gerekir.

DEĞİŞKEN KAYITLAR

Bazen programın akışına göre değişebilen kayıtlar kullanmamız gerekir. Mesela bir kitaplıkta çeşitli yayınların kaydını tutuyoruz diyelim. Kitapların kayıtları ile magazinlerin kayıtları tam olarak aynı değildir. Bir kitap için yazar ismi, başlık, basım yeri, yayıncı ve basım yılı bilgilerini tutmamız gerekir. Magazin için yazar ismi, başlık, magazinin ismi, basıldığı ay ve yıl, magazinin başlama ve bitiş sayfa numaralarını tutmamız gerekir. Yazar, başlık ve basım yılı veri alanları hem kitap hem magazinler için aynı olduğundan bu alanlar kayıtta daima bulunacaklar. Fakat diğer alanlar sadece magazin veya kitap için geçerli olurlar. Programın gerekli yapıyı seçmesi için bir referans kullanmamız gerekir, bu nedenle bir veri tipi tanımlayalım ve bunu kullanarak örneğimizi kayıt şekline dönüştürelim:

TYPE
REFTIPI - (KITAP,MAGAZIN);
REFERANS - RECORD
YAZAR:
PACKED
ARRAYII..40)
OF CHAR;
BASLIK:
PACKED
ARRAY:1..80)
OF CHAR;
YIL:INTEGER;
CASE TIP:
OF
KITAP:(SEHIR:
PACKED
ARRAY
OF CHAR;
YAYINCI:
PACKED
ARRAY
OF CHAR);
MAGAZIN:
(ISIM:
PACKED
ARRAY
OF CHAR;
AY:(OCA,
SUB,MAR,
NIS,MAY,
HAZ,TEM,
AGU,EYL,
EKI,KAS,
ARA);
SAYFA:
PACKED
OF CHAR;)
END;
VAR
K:REFERANS

TIP değişkeninin alacağı değere göre değişken isimlerine örnek verelim:

Eğer TIP = 'kitap' ise:

K.TIP.SEHIR K.TIP.YAYINCI

Eger TIP: — magazın;ise:

K.TIP.ISIM K.TIP.AY K.TIP.SAYFA değişkenlerini kullanabiliriz. REFERANS olarak tanımladığımız kaydımızın bir sabit, bir de değişken kısmı bulunuyor. Bir kayıtta ilk önce sabit kısım tanımlanır. Eğer varsa arkadan değişken kısım tanımlanır. Örneğimizde TIP değişkeninin değerine göre kaydımızın değişken kısmı belirleniyor. Program Döküm Eki'nde RECORD ve ARRAY yapısını kullanan programlar yer alıyor. Böylece PASCAL dilini anlatmaya çalıştığımız yazı dizisinin sonuna geldik.

PROGRAM VEDA;
BEGIN
WRIİTELN('Baska bir yazıda
buluşmak”);
WRITELN(Ç'uzere hoscakalın.');
END.