Dizi değişkenleri : DIM, REDIM, LBOUND, UBOUND, PRESERVE, OPTION BASE

From Belgeleme Projesi

Jump to: navigation, search

Konu başlıkları

Diziler

Bu makalemizde hemen hemen tüm programlama dillerinde oldukça fazla kullanılan ve çoğu yerde programcının hayatını kurtaran dizi değişkenlerinin nasıl tanımlanacağı ve üzerinde işlemlerin nasıl yapılacağını göreceğiz.

Dizi değişkenleri

Değişkenler her zaman tek bir değerden oluşmayabilir. Matematikte ve diğer bilim dallarında sıklıkla kullanılan matrisleri veya kümeleri buna örnek verebiliriz. Matrisin (Yani değişkenin) tek bir adı vardır ancak içerisinde birden fazla değer barındırır. Bu tip değişkenlere OpenOffice.org Basic'te Dizi (Matris/Küme) diyoruz.

Dizi tanımlamaları farklı şekillerde yapılabilir;

Basit Diziler

En basit şekliyle bir dizi tanımlamak için aşağıdaki ifadeyi kullanabiliriz.

 DIM DiziAdı(ElemanSayısı)

Örnek;

 DIM A(4)      // A dizisi 4 elemana sahip (0. 1. 2. ve 3. eleman)
 DIM Aylar(12) // Aylar dizisi 12 elemana sahip (0...11. eleman)

İstenirse bu dizinin elemanlarının türleri de tanımlanabilir;

 DIM DiziAdı(ElemanSayısı) As DeğişkenTürü

Örnek;

 DIM A(4) As Integer       // A dizisindeki 4 elemanda Integer türündedir.
 DIM Aylar(12) As Double   // Aylar dizisindeki 12 eleman Double türündedir.
 DIM Adlar(5) As String    // Adlar dizisinin 5 elemanıda String türündedir.

Aksi belirtilmediği sürece OpenOffice.org Basic'te dizi eleman numaraları 0 (Sıfır) dan başlar. İlk eleman 0. elemandır. Eğer siz bu yöntem dışında ilk elemanın istediğiniz bir sayıdan başlamasını istiyorsanız tanımlamanızı aşağıdaki gibi yapabilirsiniz. Üstelik başlangıç ve bitiş eleman numaralarını pozitif sayı olarak vermek zorunda da değilsiniz. Dilerseniz negatif bir eleman numarası da kullanabilirsiniz.

 DIM DiziAdı(BaşlangıçElemanNo TO BitişElemanNo) As DeğişkenTürü

Örnek;

 DIM A(5 TO 10) As Integer // A dizisinin ilk elemanı 5 numara ve son elemanı 10 numaradır ve bu aralıktaki 6 değişkende Integer türündedir.
 DIM B(-5 TO 4) As String  // B dizisinin ilk elemanı -5 numara ve son elemanı +4 numaradır ve bu aralıktaki 10 değişkende String türündedir.

Başlangıç Eleman Numarası Değiştirilmiş Diziler

Aksi belirtilmediği sürece OpenOffice.org Basic tüm dizilerin ilk eleman numaralarının 0 (Sıfır) dan başladığını var sayar ve tüm işlemleri buna göre yapar. Yukarıda belirttiğimiz gibi siz ilk ve son eleman numaralarını istediğiniz sayılarla başlatıp bitirebilirsiniz ancak yazacağınız program içerisinde yüzlerce dizi kullanabileceğinizi düşünürsek hepsini tek tek tanımlamak oldukça zahmetli olacaktır. Bu sebeple tüm dizilerin ilk eleman numaralarının 0 (Sıfır) dan değil de 1 (Bir) den başlamasını isteyebiliriz. Çünkü okulda, iş'te ve günlük hayatta her şeyi saymaya 1'den başlamaya alışığız ve programlarımızında bize uymasını isteyebiliriz. Yani düşünün bir sınıftaki öğrencileri saymaya 0'dan başlamayız değil mi? Bu iş için aşağıdaki ifadeyi kullanacağız.

 OPTION BASE 1	// Bundan sonraki tüm dizilerin ilk eleman numaraları 1'den başlayacak

Not: Burada önemli bir açıklama yapmamız gerekiyor. Siz tüm ilk eleman numaralarını 1'den başlatsanız da OpenOffice.org Basic yinede 0. elemanın olduğunu var sayar ve eleman sayınız hafızada buna göre 1 fazla görünür. Option Base komutu sadece sizin ilk eleman numaranızın kaçtan başlayacağını ayarlar, yani dizinin eleman sayısına bir fazla olur. Bu bir örnekle açıklayalım. Örnek;

 OPTION BASE 1	// İlk elemanların başlangış numarası 1 olsun
 DIM a(3)	// a dizisi 3 elemanlı olması gerekirken toplam 4 elemanı (1,2,3 ve 4 numaralı elemanları) bünyesinde barındırır. Normalde 1,2 ve 3 numaralı elemanları istemişinizdir ancak OpenOffice.org Basic buna 0. elemanı da ekler. Siz Option Base komutu ile toplam 4 adet olan (0., 1. ,2. ve 3. elemanlar) elemanların eleman numaralarının 1'den başlamasını istediğiniz için OpenOffice.org Basic bunların 1,2,3 ve 4 olarak numaralandırır.

Çok Boyutlu Diziler

İhtiyacınıza göre dilediğiniz kadar boyutta dizi tanımlayabilirsiniz. Şu ana kadar hep tek boyutlu dizi örnekleri verdik. Şimdi gelin çok boyutlu dizilerin nasıl tanımlandığını görelim.

 DIM DiziAdı(ElemanSayısı1,ElemanSayısı2,....,ElemanSayısıN) As DeğişkenTürü

Örnek;

 DIM a(5,6) As Integer             // a dizisi 2 boyutludur ve 6x7 elemandan oluşur. (0. elemanları unutmayın)
 DIM b(1 TO 4,-2 TO 5) As Integer  // b dizisi 2 boyutludur ve satırları 0,1,2,3,4 numaralı elemanlardan, sütunları -2,-1,0,1,2,3,4,5 numaralı elemanlardan oluşan toplamda 5x8 boyutunda bir dizidir.
 DIM c(2,5,9) As Currency          // c dizisi 3x6x10 boyutunda bir dizidir.

Dinamik Diziler

Bazı durumlarda eleman sayısını önceden kestiremeyebilirsiniz veya yazacağınız programda eleman sayısının sınırlı olmasını istemeyebilirsiniz. Bu tip ihtiyaçlarınız için dizilerinizi ihtiyaç oldukça genişletmek/daraltmak mümkündür ve aşağıdaki komut ile yapılır. Ancak unutulmaması gereken konu yeniden boyutlandırılan dizinin değişken türü'de ilk hali ile aynı olmalıdır. Yani dizi başlangıçta Integer sonradan String olamaz.

 REDIM DiziAdı(YeniElemanSayısı) AS DeğişkenTürü

Örnek;

 DIM a(5)    // a dizisi 6 elemanlıdır. (0. elemanları unutmayın)
 REDIM a(8)  // a dizisi buradan itibaren artık 9 elemanlıdır.
 REDIM a(11) // a dizisi buradan itibaren 12 elemanlıdır.

Önemli Not: REDIM ile yeniden boyutlandırılan dizinin o ana kadar almış olduğu tüm değerler yok olacaktır. Bu sebeple eğer dizi içerisindeki değerlerin yok olmadan sadece boyutunun değişmesini istiyorsanız o zaman REDIM komutunu aşağıdaki gibi kullanmalısınız.

 REDIM PRESERVE DiziAdı(YeniElemanSayısı) AS DeğişkenTürü

Örnek;

 DIM a(5) As Integer   // a dizisi 6 elemanlıdır
 a(0)=234              // a dizisinin 0. elemanının değeri 234
 a(1)=56               // a dizisinin 1. elemanının değeri 56
 REDIM a(8) As Integer // a dizisi buradan itibaren 9 elemanlı olur ancak dizinin daha önce aldığı değerler hafızadan silinir.	

Eğer önceki verilerinizi kaybetmek istemiyorsanız REDIM komutunu şu şekilde kullanmalısınız;

 REDIM PRESERVE a(8) As Integer  // a dizisi buradan itibaren 9 elemanlı olacaktır ve o ana kadar aldığı değerler hafızada duracaktır. Herhangi bir veri kaybı olmayacaktır.

Boş Diziler

Kimi zaman program içerisinde bir diziye ihtiyacınız olduğunu bilirsiniz ancak duruma göre hiç elemanı olmayabilir veya çok sayıda elemanı olabilir. Eğer böyle bir belirsizlik içerisindeyseniz bu durumda tamamen boş bir dizi tanımlayıp, ihtiyaç oldukça onu yeniden boyutlandırabilirsiniz. Bunun için tanımımızı aşağıdaki şekilde yapıyoruz.

 DIM DiziAdı() AS DeğişkenTürü

Örnek;

 DIM a() As Integer    // a dizisi elemanı olmayan boş bir dizidir.
 REDIM a(5) As Integer // a dizisi buradan itibaren 6 elemanlı bir dizidir.
 a(0)=4                // a dizisinin 0. elemanı 4 olsun
 a(1)=56               // a dizisinin 1. elemanı 56 olsun
 REDIM PRESERVE a(9) As Integer // a dizisi buradan itibaren 10 elemanlıdır ve o ana kadar aldığı değerleri unutmamıştır.

Dizilerin ilk ve son eleman numaralarını tespit etmek

Program içerisinde herhangi bir dizinin ilk ve son eleman numaralarını öğrenmek isteyebilirsiniz. Bunu aşağıdaki komutlarla yapacağız.

 LBOUND(DiziAdı) // Dizinin ilk eleman numarasını verir
 UBOUND(DiziAdı) // Dizinin son eleman numarasını verir.

Örnek;

 DIM a(10) As Integer   // a dizisi 11 elemanlı bir dizidir.
 MsgBox(LBOUND(a))      // a dizisinin ilk eleman numarası 0'dır.
 MsgBox(UBOUND(a))      // a dizisinin son eleman numarası 10'dur.
 REDIM a(47) As Integer // a dizisini 48 elemana büyütüyoruz.
 MsgBox(UBOUND(a))      // a dizisinin son eleman numarası 47'dir. İlk eleman aynıdır.

Not: Boş dizilerde son eleman numarası -1 olarak geri döner. İlk eleman numarası yine 0'dır.

 DIM x() As Integer  // x boş bir dizidir.
 MsgBox(LBOUND(x))   // x dizisinin ilk eleman numarası 0 olarak görünür
 MsgBox(UBOUND(x))   // x dizisinin son eleman numarası -1 olarak görünür.

Dizi değişkenlerine değer atamak

Daha önce anlattığımız tüm değişken atamaları diziler içinde aynen kullanılmaktadır

 DiziAdı(ElemanNo)=Değer

Örnek;

 DIM a(5) As Integer // a dizisi 6 elemanlıdır
 a(0)=4              // 0. elemanın değeri 4 olur
 a(1)=9              // 1. elemanın değeri 9 olur
 a(2)=67             // 2. elemanın değeri 67 olur

Dizi değişkenleri ile işlem yapmak

Yine normal değişkenlerimizle yaptığımız tüm işlemleri dizi değişkenleri ile de yapabiliriz. Bunun için dizi adını ve eleman numarasını kullanmamız yeterlidir. Aşağıdaki örnekleri inceleyiniz. Örnek;

 DIM a(5) As Integer // a dizisi 6 elemanlı olsun
 DIM b(8) As Integer // b dizisi 9 elemanlı olsun
 a(0)=45             // a dizisinin 0. elemanı 45 olsun
 b(0)=10             // b dizisinin 0. elemanı 10 olsun
 a(1)=a(0)*b(0)      // a dizisinin 1. elemanı a(0)*b(0) yani 45*10=450 olsun
 b(1)=a(1)+50        // b dizisinin 1. elemanı a(1)+50 yani 450+50=500 olsun



--Hakan HAMURCU 01:35, 18 Şubat 2011 (MSK)