Quick-Basic Kursu
Bölüm 6: Diziler
Dizilere neden ihtiyaç duyulur? Çünkü binlerce değişkeni tanımlamak uzun sürer ve kullanışlı olmaz. Örneğin 12 ay için ayrı ayrı değişken tanımlamak yerine yalnız bir boyutlu değişken tanımlamak yeterlidir.
DIM AY(12) gibi.
Dizi tanımlama. (Hafızada yer açma)
DIM AY1 AS STRING DIM AY2 AS STRING DIM AY3 AS STRING .. ..
Gördüğünüz gibi bu uzayıp gidecek. Bunun yerine
DIM AYLAR(12) AS STRING
yeterli olacaktır. Bu tanımladığımız dizinin kullanımı
AYLAR(1) = "OCAK" : AYLAR(2) = "ŞUBAT" AYLAR(3) = "MART" : AYLAR(4) = "NİSAN" AYLAR(5) = "MAYIS" : AYLAR(6) = "HAZİRAN" AYLAR(7) = "TEMMUZ" : AYLAR(8) = "AĞUSTOS" AYLAR(9) = "EYLÜL" : AYLAR(10) = "EKİM" AYLAR(11) = "KASIM" : AYLAR(12) = "ARALIK" buay% = VAL(LEFT$(DATE$, 2)) PRINT AYLAR(buay%)
OPTION BASE, LBOUND, UBOUND
Normalde, yani belirtmezseniz, boyutlu değişken tanımladığınızda; ilk boyut no 0 (Sıfır) olur. DIM A(10) dediğimizde 10 değil 11 adet değişken tanımlamış oluruz. Ama istersek ilk boyut numarasını kendimiz belirleyebiliriz.(Tabii 1 yada 0 olarak)
OPTION BASE 1
yazdığımızda bundan sonra tanımlanacak boyutlu değişkenler yani dizilerin ilk boyut numarası 1 olur.
DIM A(10) yazarsak 10 değişken tanımlamış oluruz.
Tanımlanmış bir dizinin ilk boyut numarasını öğrenmek için LBOUND, son boyutunu öğrenmek için UBOUND kullanılır.
OPTION BASE 1 DIM A(10) AS INTEGER PRINT "İlk boyut no: " ; LBOUND(A) PRINT "Son boyut no: " ; UBOUND(A)
Örnek:
CLS DIM A(10) AS INTEGER FOR N = 0 TO 10 A(N) = N * 10 NEXT FOR N=LBOUND(A) TO UBOUND(A) PRINT A(N) , NEXT
Bir başka özellikte boyut numaralarını kendimiz belirleyebilmemiz.
DIM A(10 TO 20) yazdığımızda A nın ilk boyut numarası 10 son numarası 20 olacaktır. Bundan sonra A(5) = 40 ya da A(22) = 65 yazacak olursanız hata oluşacaktır. Çünkü değişken dizi sınırları dışında. (Subscript out of range)
Çok boyutlu değişken tanımlama
Şimdiye kadar tek boyutlu değişkenler tanımladık.
DIM A(5, 6, 10)
yazarak üç boyutlu bir dizi oluşturabiliriz. Buna göre bellekte ( 5 x 6 x 10 ) + 3 adet değişken için yer açıldı. +3 adet 0. değişkenler için. Yine bir başka kullanım olarak
DIM A(5, 3 TO 12, 5 TO 15) gibi bir tanımlama da yapabiliriz.
OPTION BASE 1 CLS DIM SAYI(10,10) AS INTEGER FOR N = 1 TO 10 FOR M = 1 TO 10 SAYI(N,M)=N * M NEXT NEXT 'Çarpım tablosu bellekte oluştu INPUT "1. sayıyı girin " ; A INPUT "2. sayıyı girin " ; B 'Çarpım tablosundan sonucu alıyoruz 'Dikkat edin verilen sayıları çarpmıyoruz PRINT SAYI(A,B)
REDIM, ERASE
Diziler için bellekte ayırdığımız alanı genişletmek için kullanırız.
CLS REM $DYNAMIC ' üst satır, değişkenlerin dinamik olacağını belirtir. DIM A(15) PRINT UBOUND(A) REDIM A(30) ' Yeniden boyutlandı PRINT UBOUND(A) ERASE A ' Bellekte kapladığı alanı boşalt, sil PRINT UBOUND(A) ' HATA. Çünkü dizi bellekten atıldı