Commodore sayı 74, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

A(0)-10:A(I)- 11

Şimdi monitöre tekrar girin ve 0810 0820 arasına bir daha bakın:

41 00 DO 09 01 Ol F5 84 «1 0818 20 00 00 00 84 30 00 00 0820 00 00 00 00 00 00 00 00

Bu sayıların ondalık düzende yazılışları şunlardır:

$84 20 00 00 00 - -

Bir de çok boyutlu dizileri inceleyelim. Bunun için ilk olarak NEW komutunu verin ve direkt modda şu satırı girin:

DIM B(1,2,3)

Monitöre girin ve ilk olarak sıfırıncı sayfa değişkenlerini, daha sonra da 0800 bölgesini tarayın:

«1 002B 01 08 03 08 03 08 86 08 «1 003300 A0 00 00 00 A0

«1 0803 42 00 83 00 03 00 04 00 . «4 080B 03 00 02 00 00 00 00 00 «1 0813 00 00 00 00 00 00 00 00

İlk bakışta B değişkeni hemen dikkatimizi çekiyor zaten. İsimden sonra gelen bayt, dizinin $0083 = 131 bayt uzunluğunda olduğunu söylüyor. Bundan sonra da dizi boyutlarının büyüklükleri saklanıyordu. Bu örnekte $0004, $0003 ve $0002 sayıları rahatlıkla görülebiliyor. Nedendir bilinmez, bu sayılar sizin verdiğinizin tersine sıralanmışlar. “Buraya kadar tamam da, bu dizinin elemanları nasıl sıralanmışlar?” diyenlerinizin cevabını da hemen vereyim:

30 00 00 00

B(0,0,2)

B(0,0,0)

B(1,0,0) B(1,0,2) B(0,1,0) B(0,1,2) Bi1,1,0) B(0,2,0) B(0,2,2) Bi1,2,2) B(0,0,1) B(0,0,3) B(1,0,3) B(0,1,3) Bi1,1,1) Bi1,1,3) B(0,2,1) B(0,2,3) Bi1,2,1) B(1,2,3) Yukarıdaki listeden dizi elemanlarının na- sıl sıralandığını kolayca çıkarabilirsiniz. Aşa- ğıda DIM A(X,Y,2) ile açılan bir dizinin ele- manlarının bellekte hangi sırayla saklandı- ğını gösteren listeyi çıkaracak BASIC prog- ramını görebilirsiniz. 10 FOR K-0 TO X 20 FOR L-0TO Y 30 FOR M-0 TOZ 40 PRINT K*,”L*,”M 50 NEXT M,L,K Normal değişkenlerin aksine, dizilerde ele-

manın tam sayı veya string olmasına göre farklı sayıda kullanır. String dizilerinde de, normal stringlerde olduğu gibi, bir eleman girilene kadar bellekte yer ayrılmaz. Daha sonra $A000'dan aşağı inilir. Yukarıda anlattıklarımın ışığında bir dizinin BASIC alanınızda kaç bayt götüreceğini şu şekilde formüle edebiliriz.

Bellek 4 T*Çarpım(Eleman * 1)

Yukarıdaki formülde bulunan N, dizinin boyutunu, T'de dizinin tipini belli ediyor. Eğer diziniz tam sayı tutuyorsa 2, kesirli sayı tutuyorsa 5, string tutuyorsa 3 koymalısınız T yerine. Sonda bulunan Çarpım(Eleman + 1), tüm boyutların eleman sayılarına 1 ekleyerek, bu sayıları birbirleriyle çarpmanız gerektiğini söylüyor. En başta bulunan 5, iki baytlık isim, iki baytlık dizi uzunluğu ve bir baytlık dizi boyutu için gereken alanı hesaplanan değere ekliyor. Dizinin her boyutu için iki baytlık eleman sayısı tutulduğu için boyut sayısını 2 ile çarpıp toplam belleğe ekliyoruz. En iyisi demin verdiğimiz örnekler için gerekli bellek alanını bir de bu formülle hesaplayalım: 1. DIM A(500) N:1 T:5 - Bellek = 5 + 5 * (501) = 2510 bayt. Tam beklediğimiz gibi. 2. DIM B(1,2,3) N:3 T:5 - Bellek = 5 + 2*3 + 5 * (2*3*4) = 131 bayt. 3. DIM N:3, T:2 = 8 bayt. 4. DIM A$(100,100) N:2, T:3 = 5 + 2*2 + 3 * (101*101) = 30614 bayt. Bu kadar çok yer kapladığı için çoğu zaman bu büyüklükte bir dizi açamazsınız. Sadece dizi tablosu belleğin yaklaşık 30K'sını yiyor ve 10201 elemanın datalarının saklanması için (ve BASIC programını saklamak için) sadece 8K boş bellek kalıyor. Bu aylık bu kadar. Artık ROM'un BASIC'i nasıl yorumladığını, sayıları nasıl kullandığını oldukça iyi biliyorsunuz. Gelecek sayıya kadar anlamadığınız yerleri kapatmaya çalışın, çünkü bir iki tane örnek program yayınlamak istiyorum. Bu arada tüm çabalarınıza rağmen içinden çıkamadığınız yerler olursa bana yazmaktan çekinmeyin. Gelecek ay görüşmek üzere,

Klavyeyle gezinmek için ← ve → tuşları.