Bu sayfadaki yazılar
Sayfanın metni
Sayfa 60
ARRAY yapısal veri tanımlamasında köşeli parantezler arasında indeks tipini, OF'dan sonra ise bu dizideki verilerin tipini tanımlarız. İndeks basit veri tipinde olmak zorundadır. İndeks için INTEGER, CHAR veya sizin tanımladığınız bir basit veri tipini kullanabilirsiniz. Ancak,
CONST A-1.5; B-9.9; TYPE
OF INTEGER;
şeklinde bir tanımlama yapmanız yanlış olur. Çünkü köşeli parantezler arasında yer alan indeks için REAL veri tipini kullandık. OF'dan sonra gelen veri tipi için istediğiniz veri tipini kullanabilirsiniz. X değişkenimiz aşağıdaki verilere sahip olsun:
XI) XBI XI
Dizi değişkenlerine indeksli değişken adı verilir. İndeksli değişkenleri normal değişkenleri kullandığımız şekillerde kullanabilirsiniz. İndeksli değişkenlere READ ve READLN komutları ile değer yükleyip, WRITE ve WRITELN komutları ile değerlerini yazdırabiliriz. Kendi tanımladığımız veri tiplerini array'lerin indekslerini tanımlamada kullanabileceğimizi söylemiştik:
TYPE | SATRANÇ - (PİYON, AT; FİL, KALE, VEZİR, ŞAH);
VAR DEĞER:ARRAY İSATRANÇI OF INTEGER;
bu şekilde bir tanımlama yaparsak,
VALUEJPİYON) VALUBİATI: -3; VALUEİKALE): VALUE|VEZİR) VALUBİŞAH)
000;
bu komutları kullanabiliriz.
Tek Boyutlu Diziler
Diziler ve FOR komutu birlikte çok uyumlu bir şekilde çalışabilirler. İndeks değişkenini her seferinde bir arttırarak sıra ile dizideki tüm elemanlara ulaşabiliriz. Sıra ile dizideki tüm elemanlara ulaşabildiğimiz için aynı işlemleri dizideki tüm değişkenlere uygulayabiliriz. Mesela bir dizinin tüm elemanlarının değerlerini toplayalım:
TOPLAM FOR 1:—1 TO 5 DO TOPLAM: - TOPLAM * Bil)
I değişkeninin değeri her seferinde bir artacağından sıra ile B değişkeninde bulunan tüm elemanların değerleri TOPLAM değişkeninde toplandı.
Dizideki indeks sabit bir sayı olmak zorunda değil, örneğimizde olduğu gibi bir ifade olabilir. Bu şekilde programımız indeks değerini kendisi hesaplayabilir.
Program Döküm Eki'ndeki PROGRAM1 her saat için sıcaklığı alıp günün en sıcak, en soğuk ve ortalama sıcaklığını hesaplıyor. ISI dizi değişkenine yirmidört saatin verileri okunuyor. Mesela, ISI(1) değişkeninde günün birinci saatinin, ISI(15) değişkeninde günün onbeşinci saatinin ısısı saklanıyor.
Program Döküm Eki'ndeki PROGRAM3, ufak bir bütçe programı. On başlık altında aylık harcamaları hesaplayacak bir program. Programımız başlık numarasını ve yapılan harcamayı veri olarak alıyor.
Genelde, dizilerin elemanları ile tek tek uğraşabiliriz. Mesela iki diziyi tek bir komutla toplayamayız. Ancak iki dizi aynı veri tipine sahipseler tek komutla birbirine eşitleyebilirsiniz:
CONST TYPE INDEKS-1.MAX; ARR- OF REAL;
VAR X, Y, Z : ARR; BEGI X:-Y END.
Bu program;
yerini tutuyor. PACKED Array
Bir dizi tanımlarken ARRAY'in başına PACKED getirebiliriz. Mesela, Z:PACKED ARRAY[1..5] OF BOOLEAN; PACKED kelimesi sayesinde Z dizisindeki değerler bilgisayar hafızasına mümkün olduğu kadar sıkıştırılarak yazılır. Bu sayede hafızadan kazanırız, ancak sıkıştırılmış dizinin elemanlarına ulaşma hızımız biraz azalır. Genellikle BOOLEAN veya CHAR veri tipindeki dizileri sıkıştırmak yararlı olur.
Sıkıştırılmış bir dizinin elemanlarına da normal bir dizideki gibi ulaşabiliriz. Mesela:
VAR PC:PACKED ARRAYII...5) OF CHAR; BEGİN
Sıkıştırılmış dizileri kullanmada karşılaştığımız bir sorun var. READ şeklinde bir komut yanlışı olur. Bunun yerine,
READ (C)
komutları aynı işi görür.
Program Döküm Eki'nde PROGRAM4 ve 5 programları da dizilerle ilgili. PROGRAM4 veri olarak girdiğiniz bir satırlık yazıda her harfin ne kadar kullanıldığını bulur. PROGRAM5, her harfin yerine geçecek başka bir harf alıp yazmış olduğunuz satırı şifreler.
Karakter Dizileri
Değerleri karakter dizisi olan değişkenleri tanımlamak için PACKED ARRAY tanımını kullanacağız:
PACKED ARRAY OF CHAR; VAR BEGİN END.
“Commodore;
Yapısal veri tiplerine gelecek yazımızda devam edeceğiz. Şimdilik hoş-
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 61
BURAK KİPER
Otomatik olarak başlamasını istediğiniz disketinizin TRACK 1 SECTOR 0 kısmının boş olması gerekir. Bu kısım disketin ilk bloğunu oluşturur, otomatik başlama olması için disketin bu bölümünün sizin programlarınız tarafından kullanılmaması gerekir. Otomatik başlayacak bir disket hazırlamak istediğinizde mümkünse hiç kullanılmamış bir disket tercih edin. Kullanılmış disketlerin ilk bloğunu bir monitör aracılığı ile kontrol edin.
TRACK 1 SECTOR 0 sadece otomatik başlama rutini tarafından kullanılmıyor. Aynı zamanda CP/M işletim sistemi otomatik başlama rutinini kullanarak yükleme işlemini gerçekleştirip yeni işletim sistemini aktif hale getirir. Disketten okunan ilk üç byte sırası ile $E2C4-$E2C6 adreslerinin içerikleri karşılaştırılır. Eğer üç byte'ın birisi bile farklı olsa otomatik başlama gerçekleşmez. Disketten otomatik yükleme yapılıp yapılmayacağını yüklenen ilk üç byte'ın belirlediğini söyleyebiliriz. Otomatik yüklemenin yapılması için disketten okunacak ilk üç byte'ın $E2C4 - $E2C6 arasındaki adreslerin içeriği ile aynı olması gerektiğini söylemiştik. Bu adreslerin içerikleri şöyledir:
$E2C4 : $43 (67) “C” $E2C5 : $42 (66) “B” $E2C6 : $46 (77) “M”
Disketlerimizin otomatik yükleme mekanizmasına sahip olabilmeleri için ilk üç byte'ına “CBM” kelimesini yerleştirmemiz gerekiyor. Eğer karşılaştırılan üç byte eşitse ekrana,
BOOTING
mesajı çıkar. Otomatik olarak başlayacak bir disket hazırlamak için ufak bir program yazacağız. 10 OPEN 1.8,15 20 OPEN 25 PRİNT 1,“B-F O 4 0“ SOPRİNT 1,“B-P 43 0” 40 PRİNT 2.“CBM” SOPRİNT 13 0 4 0“ 4,“B-A O 4 0“ 70 CLOSE 2 80 CLOSE 1 90 END
Programı yazdıktan sonra çalıştırmadan evvel bir diskete SAVE edin. Disket sürücüye formatlanmış yeni bir disket veya sizin için bir değeri olmayan eski bir disket yerleştirip programı çalıştırın. Programın çalışması bittiğinde otomatik olarak başlayacak bir diskete sahip oldunuz demektir.
Programda yer alan komutların kısa bir açıklamasını yapalım. İlk olarak disket sürücüsünün komut kanalına giriş sağlamak için bir veri dosyası açıyoruz. Daha sonra disket sürücüye tampon bölge hazırlıyoruz. 25 numa-
61