Çok boyutlu diziler (MultiDimensional Arrays)


Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerindeki pek çok programlama dilinde birden fazla boyuttan oluşan dizilerin kullanılması mümkündür.

Örneğin bir ders çizelgesini, haftalık yemek listesini yada kişilerin aylık satışlarından oluşan bir tabloyu ele alalım. Günlük hayatta pek çok yerde tablolar kullanılmaktadır. Aynı zamanda matrisler (masfuf, matrix) matematikte küçümsenmeyecek bir öneme sahiptir.

İçerik
1. Çok boyutlu dizilerin tanımlanması
2. Çok boyutlu dizilerin kullanılması
3. İkiden çok boyutlu diziler

Tutulan bilgi her ne olursa olsun şayet tablo gibi iki boyutlu bir bilgiyse ya da daha fazla boyutu varsa bu bilginin tek boyutlu dizilerle modellenmesi ve işlenmesi güçtür.

Bunun yerine programlama dillerinde birden fazla boyuttan oluşan diziler (array) kullanılabilir. Bu dizilere çok boyutlu dizi (multi dimensional array) ismi verilir.

Çok boyutlu dizilerin tanımlanması

Günümüzde oldukça yaygın olan C yazım kurallarına göre ( C-syntax) bir matris aşağıdaki şekilde tanımlanabilir:

int a[3][3];

Yukarıdaki bu satırı, C/C++ programlama dilinde yazarsak hafızada bizim için 3×3 boyutlarında (3′e 3′lük) bir matris için yer açar (yani toplamda 9 hücreli ve 9 farklı sayı tutmaya yarayan bir yer) ve bu matrisin ismini a olarak tanımlar. Buradaki a matrisin (yani iki boyutlu dizinin (array)) ismidir ve herhangi bir değişken ismi verilebilir. Örnek olarak a ismi kullanılmıştır.

Yukarıdaki tanım satırını JAVA veya C# dillerinde aşağıdaki şekilde yapabiliriz:

int [][] a = new int[3][3];

Yukarıdaki bu yazımda farklı olan sadece yazılış şeklidir aslında yapılan iş aynıdır.

Yukarıdaki şekilde dizi tanımlandıktan sonra bu dizinin istenilen satır ve sütün değerlerine erişilebilir. Bu durumu aşağıdaki temsili resimden görebiliriz:

a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]

Yukarıdaki resimde ilgili satır ve sütünlara erişmek için yazılması gereken indis değerleri verilmiştir. Yani örneğin aşağıdaki şekilde bir kod yazarsak:

a[1][2]=5;

Bu kod satırı ile a dizisinin 1. satırının 2. sütünuna 5 değeri konulmuş olur:

0 0 0
0 0 5
0 0 0

Burada önemli bir uyarı yapmak gerekir. Yukarıdaki satır ve sütün bilgileri tamamen bir kabule dayalıdır. Yani matrisin ilk indisi satır ikinci indisi sütün olarak gösterilmiş ve kullanılmıştır. Oysaki bilgisayarın hafızasında (RAM, Memory) tek boyutlu bir yapı vardır ve bizim iki boyutlu yapılarımız tek boyuta indirilerek tutulur. Dolayısıyla bizim satır ve sütün tutan indislerimiz bir kabule dayanır. Yani aslında aşağıdaki şekilde bir göterim de pek âlâ doğrudur:

a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][2] a[1][2] a[2][2]

Yukarıdaki her iki göterimde bir kabule dayanır (aslında hafızada tek boyutlu olan bilginin iki boyutlu gösterilmesi bir kabuldür) ve programcı hangi kabulü isterse yapabilir ancak birisini kabul ederek bütün programcılık hayatı boyunca bu kabul üzerine devam edebilir.

Ancak programlama dili yazan arkadaşların (derleyiciler teorisi (compiler theory) gibi konular ile ilgilenen kişilerin) bu detayı bilmesinde yarar olabilir. Bu yüzden dilerlerse satır bazlı sıra (row major order) ve sütün bazlı sıra (column major order) başlıklı yazıları okuyabilirler.

Çok boyutlu dizilerin kullanılması

Çok boyutlu diziler genelde döngüler (loop) ile birlikte kullanılırlar. Bilindiği üzere aslında dizi (array) kavramının varlık sebebi birden fazla değişkeni hafızada bir arada tutmak ve kolayca ulaşmaktır. Dolayısıyla birden fazla değişkene erişirken indis numaralarından (satır ve sütün numaralarından) erişmek çoğu zaman avantajlı bir durumdur. İşte bu satır ve sütün numaraları üzerinde çalışan döngüler de çoğu zaman vaz geçilmez erişim araçlarıdır.

Örneğin aşağıdaki kodu ele alalım:

int a[5][5]; //diziyi tanimladik
//içine değer atıyoruz
for(int i = 0;i<5;i++){
   for(int i = 0;i<5;i++){
      a[i][j]=i+j;
   }
}
//değerleri bastırıyoruz
for(int i = 0;i<5;i++){
   for(int i = 0;i<5;i++){
      printf("%d ",a[i][j]);
   }
   printf("\n");
}

Yukarıdaki kodun çıktısı aşağıdaki şekildedir:

0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

Görüldüğü üzere yukarıdaki kod ile 5×5 boyularında bir matris tanımlanmış ve bu matrisin içerisine 01234 değerlerinden oluşan satır her seferinde 1 arttırılarak tekrarlanmıştır.

Yukarıda bu işlemi yapmaya yarayan kod değerlerin atandığı ve bastırıldığı iki bölüm olarak düşünülebilir ve her iki bölümde de dizinin elemanlarına döngüler marifeti ile erişilmiştir.

İkiden çok boyutlu diziler

Şimdiye kadar anlatılan diziler iki boyutluydu. Programlama dillerinde ikiden yüksek sayıdaki boyutlarda dizi tanımlamak da mümkündür. Temel olarak programlama dillerinin çoğunda matrisin boyutunun bir limiti yoktur yani 3 boyutlu 4 boyutlu yada 100 boyutlu diziler tanımlanabilir.

Aslında dizi tanımı sırasında tek limit bilgisayarın donanım ve işletim sistemi kaynaklarından doğar. Yani örneğin bir tam sayı değerinin (int) 2 bayt (byte) kapladığı bir işletim sisteminde 10000×10000x10000 boyutlarına sahip 3 boyutlu bir dizi tanımlanırsa ( 104 104 104 = 1012 x 2 byte = 2×1012 byte ~ 1 terabyte) yaklaşık olarak 1TB yapar ki bu günümüz bilgisayarları için oldukça yüksek bir RAM miktarıdır.

Programlama dillerinde çok boyutlu diziler iki boyutlu dizilerde olduğu gibi boyut miktarını belirten ilave sayılar tanımlayarak gösterilir. Örneğin:

int a[5][5][5];

şeklindeki bir tanım C/C++ dillerinde veya

int [][][] a = new int[5][5][5];

şeklindeki bir tanım JAVA vey C# dillerinde 5×5x5 boyutlarında 3 boyutlu bir dizi tanımlamak için kullanılabilir.

Burdaki boyut sayısında bir limit bulunmamaktadır. Örneğin

int a[5][5][5][5][5];

şeklindeki bir satır ile 5 boyutlu (ve her boyutu 5 olan) bir dizi tanımlanabilir.


« MPI (Message Passing Interface , Mesaj Geçirme Arayüzü)   |   İki Parçalı Graflar (Bipartite Graphs) »



Yorumlar

Kullanıcı girişi yaparak ya da zorunlu olan * alanlarını doldurarak yorum yapabilirsiniz.

İsminiz *

Email adresiniz *

Web siteniz

Mesajınızı buraya yazabilirsiniz:

Bu Yazı Hakkında

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Çok boyutlu diziler (MultiDimensional Arrays)' isimli yazı 30 Apr 2009 tarihinde, saat: 16:51 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 2132 defa okunmuştur.

Benzer yazıları C/C++, Derleyiciler, Programlama Dilleri, veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Yazarın Kitabı

Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
Yapılan Son Yorumlar
Yakın Yazılar
Bağlantılar