QBasic Dersleri 6

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ı

0 yorum:

Related Posts Plugin for WordPress, Blogger...