üf Noktaları (9)

Yazımıza disket sürücü ile çalışırken işimize yarayacak olan bilgilerle başlayacağız. Yazımızda Program Döküm Eki'nden bakmanız gereken programlar için 20. sayının Program Döküm Eki'ne bakmanız gerekiyor, Program Döküm Eki'ndeki PROGRAM 1'i yazarak işimize devam edelim. İlk programımızın etkisini görmek için kullandığımız SYS komutları bize ekranda sadece BOOTING... mesajını vermişti. Şimdi yazmış olduğumuz program sayesinde gireceğimiz mesaj, BOOT kelimesinden sonra yer alacaktır. Yazacağımız mesajın uzunluğu maksimum 246 karakter olabilir. Programımızı çalıştırmadan evvel diskete kayıt edin ve sizin için önemsiz bir disketi takarak programı çalıştırın.

BOOT komutu ile veya bilgisayarı açıp kapatarak programın etkisini görebilirsiniz. Şimdi yaptığımızı biraz daha ilerletmek için Program Döküm Eki'ndeki PROGRAM 2'yi yazıp çalıştırmadan evvel SAVE edin. Programın 10-110 satırları arası daha evvelki yazdığımız programlara benziyor. 1000-1070 arasında yer alan DATA satırlarını inceleyelim.

İlk DATA satırındaki yedi değer disketin TRACK 1 SECTOR 0 bölümüne yazılan yedi byte'ı oluşturuyor. BYTE 0-6: Otomatik başlama rutini için gerekli yedi byte BYTE 7-26: BOOTING kelimesinden sonra yazılacak olan mesaj BYTE 27: Bitimi bildiren sıfır değeri BYTE 28-32: Yüklenecek programın adı BYTE 33: Bitimi bildiren sıfır değeri BYTE 34-52: Çalıştırılacak makine dili programı

1060-1070 satırları arasında yer alan makine dili programı çalıştığında RUN komutu verilip yüklenen programın çalıştırılmasını amaçlıyor. Makine dili ile ilgilenenler için programı detaylı olarak veriyoruz.

LDX #
döngü LDA tablo,X al
STA tamponuna
DEX Başka karakter
mı?
BPL döngü ;evet
LDA 44 $03 mikfarı
STA $DO tamponuna
RTS sonu
tablo $52, SOD.

Şimdiye kadar otomatik başlama mekanizmasına sahip olacak bir disketi nasıl hazırlayacağımızı gördük. Program Döküm Eki'ndeki PROGRAM 3 kendiliğinden yüklenerek çalışmasını isteyeceğiniz programlara örnek olabilir. Bu programı yazdıktan sonra

SAVE”BASIC”,8

şeklinde kaydedin. Böyle yapmamızın sebebi PROGRAM 2'deki programın 1040 numaralı satırında program ismi olarak BASIC vermemizdir.

57

PROGRAM 3'ü diskete kayıt etmeden otomatik başlama yapılırsa FILE NOT FOUND hatası ile karşılaşırız. PROGRAM 2'nin 1040 numaralı satırına istediğiniz başka bir programın isminin harflerinin değerlerini yerleştirebilirsiniz. Yeni veri sayısına göre 40 numaralı satırdaki FOR döngüsünü tekrar ayarlamayı unutmayın. Disketten otomatik yükleme hakkındaki sözlerimizi tamamlamadan evvel SECTOR 0'da bulunan bloğun 256 byte'ının dökümünü yapalım.

BYTE : $43 (67) ASCIİ-C
BYTE : $42 (66) ASCIİI-B
BYTE : $AD (77) ASCIİ-M
BYTE : yüklenecek programın bulunduğu bloğu
bildiren adresin LOW-BYTE'ı
BYTE : HİGH-BYTE (üstteki adresin)

BYTE: Yüklenen blokların saklanacağı BANK numarası

Kartuşlar ile Otomatik Başlama

Bilgisayarımızın arkasında yer alan, EXPANSION PORT adı verilen yere takılan kartuşları bilirsiniz. Bilgisayara takmanızla birlikte kartuşta yer alan programın da karşınıza çıkması bir olur. Aslında kartuşlardaki programın otomatik olarak yüklenerek çalışması ile, programınızın disketten otomatik olarak yüklenerek çalışması birbirine benzer. Kartuş kullanmanın iki avantajı vardır: (1) SYS komutu veya RUN komutu vermenize gerek kalmadan program göz açıp kapayıncaya kadar yüklenip kendiliğinden çalışır. (2) Kartuşları kopyalamak daha zor olduğu için, sizin için önemli olan bir programı korumuş olursunuz. Peki bilgisayarımız kendisine bir kartuş takılmış olduğunu nasıl anlıyor? İlk olarak C64'te nasıl anladığını görelim: Bilgisayarımızı açtığımızda bilgisayar $8004-$8008 adreslerini kontrol eder. Eğer bu adreslerin değerleri sırası ile CBM80 yazısının ASCII değerlerine karşılık geliyorsa $8000-$8001 adreslerindeki değerlerin işaret ettiği yere kontrol iletilir. Yani $8000 LOW-BYTE, HIGH-BYTE değerlerini taşır. C128'de C64'teki gibi çalışır. Tek fark C128 için CBM yazısı yeterlidir. Aynı zamanda CBM yazısını disketten otomatik yüklemede de kullandığımızı hatırlayalım.

Fazladan Sekiz Fonksiyon Tuşu

Bilgisayarımızın sekiz tane fonksiyon tuşu bulunuyor. KEY komutu ile fonksiyon tuşlarına çeşitli komutlar tanımlayabiliyoruz. Bilgisayarımızı açtığımızda çok sık kullanılan komutlar fonksiyon tuşlarına tanımlı haldeler. Eğer sekiz fonksiyon tuşu karşılamazsa ne yapacağız? Yeni fonksiyon tuşlarımıza on altı karakter uzunluğunda yazı veya kontrol karakteri girmemiz mümkün. Yeni fonksiyon tuşlarını kullanmak için ALT tuşundan yararlanacağız. İlk fonksiyon tuşu için ALT ve F1 tuşuna, ikinci fonksiyon tuşu için ALT, SHIFT ve F1 tuşlarına basacağız. Program Döküm Eki'nde bulunan PROGRAM A sekiz fonksiyon tuşunu tanımlamamızı sağlayan program. Yeni tanımlanan fonksiyon tuşlarına KEY komutu ile ulaşamayız. Ancak programımız sayesinde sekiz tuşa birden istediğimiz komutları yüklememiz mümkün olur.

Tuş Sesi

Bazı bilgisayarlarda tuşlara basıldığında ses çıkar. Bilgisayarınızın böyle bir özelliğe sahip olmasını isterseniz Program Döküm Eki'ndeki PROGRAM 4'ü yazın. Kolaylık olması açısından RETURN tuşuna bastığınızda daha farklı bir tonda ses duyacaksınız. Program vektörünü değiştirdiğinden basılan her tuşa çok çabuk cevap verir.

Program Askıya Alma

Önemli bir programla çalışıyorsunuz, tam bu sırada telefon veya kapı çalındı. Programı bıraksanız bir türlü, bırakmasanız bir türlü. Artık böyle zor durumlarda kalmak istemiyorsanız Program Döküm Eki'ndeki programı yazın. C128'de NO SCROLL tuşu program akarken listeyi durdurmanızı sağlar. Programda NO SCROLL tuşunu kullanmak yerine başka bir tuş kullanmak istiyorsanız,

POKE 5134,N
POKE 5140,N

komutlarını programa eklemeniz gerekiyor. N değişkeni yerine istediğiniz tuşun değerini vermeniz lazım. Kesintiye uğrattığınız program siz tekrar tuşa bastığınızda kaldığı yerden devam edecektir. Makine dili ile ilgilenen arkadaşlar için programımızı makine dilinde de veriyoruz.

1400 LDA $0B
1402 STA $0308
1405 LDA # $14
1407 STA $0309
140A RIS
;Vektör değiştirme
sonraki BASİC
için
;BASIC'e geri dönüş
140B LDA $D4 değeri
440D CMP ;NO SCROLL tuşumu?
440F BNE 8141B
1414 LDA $DA4A
1413 CMP #$57
1415 $1411
1417 CMP # $58
1419 $ 1411
141B LDA  $O0F

değeri :NO SCROLL tuşu mu? ;Evet, bekle

Bir sonraki BASIC
;komuUutu
141D STA $02 Çalıştır
LDA # $4A
1421 STA $03
1423 LDA # SA2
1425 STA $04
1427
1429 STA $05
142B JMP $02E3

HELP ve RUN/STOP tuşları

Bilgisayarımızın sekiz fonksiyon tuşu olduğunu söylemiştik. HELP ve RUN/STOP tuşlarını da saydığımızda bilgisayarımız on tane fonksiyon tuşuna sahip demektir. Ancak bu iki tuşa KEY komutu ile tanımlama yapamayız. Dokuz numaralı fonksiyonu kullanmak için SHIFT ve RUN/STOP tuşlarına basmamız yeterli olur. Bu fonksiyon

DLOAD”*
RUN

komutlarını taşır. Disket sürücüdeki ilk programı bulup yüklemek isterseniz kullanabilirsiniz. Dokuz ve on numaralı fonksiyonları istediğimiz şekilde tanımlamak için Program Döküm Eki'ndeki PROGRAMI 1'i yazın. Fonksiyon tuşuna RETURN tuşunu eklemek için '1' tuşuna basmanız gerekiyor.

Fonksiyon tuşlarına yazmış olduğumuz tanımlamalar 4096 ($1000) ile 4352 ($1100) adresleri arasında yer alır. İlk on byte fonksiyon tuşlarına tanımlanan yazıların uzunluğunu taşır. Bu değerlerden başlayarak fonksiyonların yazılarının başlama adreslerini bulabilirsiniz. On fonksiyon tuşuna toplam 245 harf kullanabilirsiniz.

Adres 24

24 numaralı adresle oldukça ilginç işler yapabiliriz. Mesela,

POKE 24,37:LIST

komutunu verdiğinizde programınızın satır numarası olmadan ekrana geldiğini göreceksiniz. Eğer FORMULA TOO COMPLEX ERROR ile karşılaşırsanız,

POKE 24,27

deneyin. 27'den başka değerler BASIC listelerine çeşitli değişiklikler yapar. Almış olduğunuz herhangi bir hata mesajı 24 numaralı adresin içeriğini değiştirir. POKE 24,37 komutu satır numaralarını yok etmesinden yararlanarak kendimize amatör bir kelime işlem programı yapabiliriz. Mesela,

10 Bu bir kelime işlem
20 programı olarak kullanıma
30 örnektir.

Yazdığımız programı normal bir program gibi kasete veya diskete kaydedebiliriz. Printer'a yazdırmak için, POKE 24,37:OPEN 4,4:CMD 4:LIST:PRINT# 4:CLOSE 4 komutunu yazın.

Program Hataları

C64'de çalışırken programınız bir hata yüzünden durursa hatanın nerede olduğunu ve neden kaynaklandığını sizin bulmanız gerekir. BASIC 7.0'daki HELP tuşu sayesinde hatanın programın hangi satırında neden kaynaklandığını anlamanız mümkün olur. TRAP komutu sayesinde de normalde hata mesajı vererek duracak olan programınızın çalışmaya devam etmesini sağlayabilirsiniz. Programınızda bir hata olduğunda program programınızda yer alan TRAP komutundan sonraki satırda yer alan kısma atlar. Sisteme ait olan ER değişkeni size iletilen hata mesajının numarasını verir.

PRİNT ERRS(ER)

komutu vererek hatanın ne olduğunu ekrana basabilirsiniz. EL değişkeni ise hatalı satır numarasını taşır.

10 FORİ-1 TO 41
20 PRİNT LERRS(İ)
30 NEXT |

programını çalıştırdığınızda mevcut olan hata mesajları ekrana yazılır. : Programınızda bir hata olduğunda kontrol TRAP'ten sonra gelen numaranın belirttiği satıra atlar ve burada durur. Bundan sonra RESUME komutunu üç ayrı şekilde kullanarak programın devamını sağlayabilirsiniz. Sadece RESUME yazarsanız bilgisayar programı hatalı satırın bulunduğu yerden devam etmek ister.

RESUME satır numarası şeklinde kullanırsanız program akışı verdiğiniz satır numarasından devam eder. Son olarak,

RESUME NEXT

komutu ile program akışı hataya neden olan satırdan sonra gelen satırdan devam eder. Eğer programınızın çalışmasını satır satır görmek isterseniz TRON ve TROFF komutlarını kullanabilirsiniz. RESUME komutunu satır numarasız kullanacak olursanız sonsuz döngüye girebilirsiniz. Aşağıdaki programı deneyin. Bu programda disket sürücü kapalı olduğu sürece disket sürücüyü açın mesajı ekrana yazılacak.

10 TRAP 1000
20 DİRECTORY
30 END
1000 İF ER—5 THEN PRİNT CHRS(19): “DİSKET
SURUCUYU ACIN”:RESUME
1010 END

Hoşça kalın. 59

SEYFETTİN ÇANKAYA

Geçen sayıda sözünü ettiğimiz çevrimin içini incelemeye başlıyoruz. Fahrenayt Santigrat ısı dönüşümlü formülü: sant = (5.0/9.0)*(fahr-32.0); satırıyla programlaştırılmıştır. Örnekte 5.0, 9.0 ve 32.0 ifadelerinde noktadan sonraki 0 ifadesi, yapılan işlemin gerçek sayı olduğunu göstermektedir. Yani 5/9=0, 5.0/9.0=0,555'dir. Burada = endüşük; ifadesinde çelişki varmış gibi görülebilir. Çünkü endüşük değişkeni tamsayı, fahr ise gerçek sayı olarak tanımlanmıştır. C'de esnek bir uygulamayla bu eşitlikte endüşük değişkeninin değeri otomatik olarak gerçek sayıya çevrilmektedir. Bu özellik,

while (fahr < — enyüksek)

ifadesinde parantez içindeki çevrim şartında da görülmektedir. Printf fonksiyonu içindeki ifadelere gelince;

printf sant);

% işareti basılacak her bir değişkeni ifade etmektedir.

Arkadan gelen %4.0f ifadesi 4 karakter uzunluğunda ve noktadan sonra ondalık bölümü bulunmayan gerçek (floatp.) sayıyı göstermektedir. Hemen onu takip eden %06.1f ifadesi ise gerçek değişkenin 6 karakter uzunluğunda ve 1 ondalık haneye sahip olduğunu göstermektedir. ise bildiğiniz satırbaşı gösterimidir. Bu açıklamalar “...” işaretleri arasında yapılmıştır. Bundan sonra ise sözkonusu değişkenler açıklamadaki sırayla yazılır. Yeni gördüğümüz ve değişkenleri ifade eden % işareti değişik şekillerde kullanılabilir;

%d desimal tamsayı %u tamsayı %x Hex (16'lık) tamsayı %c karakter

fahr karakter dizisi fahr karakter olarak kullanılması

fahr = fahr + adım; ifadesi her bir hesaplama değerini adım kadar arttırmaktadır. Bu program çalıştığında aşağıdaki sonuç alınır.

0 -17.8
20 - 6.6
40 4.4
60 15.6

260 126.7 280 137.8 300 148.9

FOR ÇEVRİMİ: C'de kullanılan en önemli komutlardan biri de for işlemidir. Bundan önce vermiş olduğumuz ısı çevrimi programını for döngüsü kullanarak ne kadar basit yazılabileceğini görelim:

main ( ) /* aynı işlemin for çevrimiyle yapılması */

|
ınt fahr;
for (fahr —-0; fahr — —300; fahr * 20)
printf (© fahr, (5.0/9.0) *fahr-
32);
|

Program çalıştırıldığında bir önceki sonucun aynısını verecektir. Şimdi farkları inceleyelim. Öncelikle birçok değişkenin kullanımı yerine sadece bir değişken kullanılmıştır. Alt ve üst ısı limitleri ve adım değişkenleri yerine for işleminin parametreleri olarak yapılabildiği bu örnekte görülmektedir. printf içinde (5.0/9.0)*(fahr-32) formülü ile santigrat değeri hesaplanmakta ve aynı zamanda yazılmaktadır.

For çevrimini while işleminin genelleştirilmişi olarak düşünebiliriz. Çünkü while işlemi for işleminin özel bir durumudur. For işlemi üç bölümde incelenebilir. Bunlardan birincisi değişkene atama yapan bir bölümdür. Bu örnekte,

fahr - 0

işlemi bu şekilde kullanılmıştır.

İkinci parça karşılaştırma yapan bölümdür. Bunu while işleminin kullanımında gördük. For çevrimi bu eşitlik sağlanana kadar devam eder. Örnekte bu bölüm fahr <= 300 olarak görülmektedir. For çevriminin fahrenayt ısı değerinin 300'den küçük ya da eşit olana kadar devam edeceğini ifade etmektedir. For çevriminin devam etmesi printf (...... ) işleminin fahr <= 300 olana kadar tekrarlanması demektir. Eşitliğin sağlanmaması durumunda bir alt işleme geçilir. Örnekte printf (.....) işleminden sonra bir işlem olmadığından program sona erer. Son ve üçüncü bölüm ise işlem bölümüdür ve her for çevriminde bir tekrarlanır. Bu işlem yardımıyla ilk örnektedir adım değişkeninin kullanılması gereği ortadan kalkmaktadır.

SEMBOLİK SABİTLER:

Son örnekte kullandığımız adım ve en yüksek ısı değeri 20 ve 300 olarak belirlenmiştir. Doğal olarak bu değerler farklı olabilir. Örneğin hesaplama her 10 birimlik artımda tekrarlanabilir. Bu durumda program

Commodore'la açık öğrenim :

içinde düzeltme gereklidir. Bu işlemin pratik olmaması nedeniyle sabitlerin sembolik gösterimi özelliğinden yararlanılabilir.

Örneğimizi bu mantıkla tekrar yazarsak:

# define ENDÜŞÜK O
4&define ENYÜKSEK 300
# define ADIM 20
main ()
int fahr;
for (fahr -ENDÜŞÜK; fahr < - ENYÜKSEK;
fahr -fahr * ADIM)
printf (“ fahr, (5.0/9.0)*(fahr-32));

Örnekte EN DÜŞÜK, EN YÜKSEK, ADIM #define komutu ile yanındaki değerlere eşitlenmiştir. Böylece bir değişiklik gerektiğinde sadece bu bölüm düzenlenir. Sembolik sabitler genellikle büyük harflerle gösterilir. Bunun nedeni ise sembolik sabitlerin değişkenlerle karışmasını önlemek ve kolay incelenen program yazılımı sağlamak içindir. Ayrıca #define işleminin sonunda noktalı virgül (;) kullanılmadığını da belirtelim.

BURAK KİPER

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.

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;

» ,» 83

,.)

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.