C
Programlama Dili
DERS – 14


Çok boyutlu bilgileri veya veri tablolarını saklamak için kullanılırlar.

Tanımlama biçimi: Tip Değişken_adı [Boyut1] [Boyut2] [Boyut3]…

Tip: Değişken türü

Değişken adı: Dizinin adı

[Boyut1]: Birinci boyut

[Boyut2]: İkinci boyut

Dizimiz iki boyutlu ise bir tabloya benzer. Bu durumda birinci boyut satırları, ikinci boyut ise sütunları gösterecektir. Bunun gösterim şekli ise;

Tip_adı Değişken_adı [Satır_sayisi][Sütun_sayısı];

Şeklinde olur. Tip_adı ile değişken türünü(int, float, char,..) belirleriz. Değişken_adı ise dizimizin adını içerir. Satır_sayısı kaç satırdan oluşacağını, Sütun_sayısı ise kaç sütundan oluşacağını belirler.

Örn: int dizi[4][7];

Dizi isimli değişkenimiz 4 satır ve 7 sütundan oluşmaktadır. i=satır sayısı, j=sütun sayısı olmak üzere dizi[i][j] değişkeni ile; i. satır, j. sütun elemanı tanımlanır.

Yukarıdaki tabloda da görüldüğü gibi 4 satır ve 7 sütundan oluşan 28 eleman (4×7=28) i ve j ye bağlı olarak yerleştirilmiştir. İki indisi(i ve j) birlikte tanıtmakla bir matris elde edilir. Satır ve sütun kavramı programcının isteğine göre şekillenmektedir. Eğer ilk boyut satırı ikinci boyut sütunu oluşturuyorsa programın sonuna kadar böyle kullanılması gerekmektedir. Bir matrisi oluşturmada da iç içe iki for döngüsü kullanılarak indislere değer ataması yapılabilir.

3×4 boyutunda 12 elemanlı bir matris aşağıdaki gibi tanımlanabilir;

int matris[3][4] = {3, 5, 0, 1, 8, 12, 9, 125, 0, 2, 4, 6 };

int matris[3][4] = {{3, 5, 0,1}, {8, 12, 9, 125}, {0, 2, 4, 6}};

3 5 0 1
8 12 9 125
0 2 4 6

matris[0][0]=3   matris[0][1]=5   matris[0][2]=0   matris[0][3]=1

matris[1][0]=8   matris[1][1]=12 matris[1][2]=9 matris[1][3]=125

……   ……


Şimdi matris ile ilgili kısa bir program çalıştırıp bunu anlamaya çalışalım.

int matris[3][4] = {3, 5, 0, 1, 8, 12, 9, 125, 0, 2, 4, 6};

3×4 boyutunda bir matris değişkeni tanımladık. Bu matrise 3×4=12 eleman atadık.

int i, j;

integer tipinde i ve j değişkenlerimizi tanıttık.

for(i=0; i<3; i++)

{

Döngümüz ile ilk önce satıra ait indis değerini atadık. Matrisimizi matris[i][j] olarak düşündüğümüzde; i=0 için matris[0][j] değerini alır ve ardından sütun indisi için diğer döngüye girer.

for(j=0; j<4; j++)

{

Burada da j(sütun) indisi için bir değer ataması yapıldı. j=0 için matris[0][j] değişkeni matris[0][0] durumuna gelir.

printf(“%4d “, matris[i][j]); ile %4d ile 4 karakter uzunluğunda bir yazma alanı ayırıp sona dayalı olarak d tipinde(integer), matris[0][0] elemanı yazdırıyoruz. (matris[0][0]=3)

for(j=0; j<4; j++)

{

printf(“%4d “, matris[i][j]);

}

İlk döngüde i=0 değerini alarak yukardaki döngü içerisine giren programımız, sırasıyla j=0, j=1, j=2, ve j=3 için döngüyü sürdürecektir. Bunun karşılığı olarak matrisimizin indisleri şu şekilde olacaktır.

matris[i][j];

matris[0][0] , matris[0][1], matris[0][2], matris[0][3]

j(sütun) için oluşturduğumuz for döngüsü sıfırdan başlayarak, her seferinde döngü bloğu içerisinde bulunan printf fonksiyonunu kullanarak devam edecektir.

j=4 için döngüdeki j<4 sorgusuna gelindiğinde j değişkeni 4 den küçük olmadığından, j döngü bloğunu terk ederek program bir alt satırı okumaya devam eder.

printf(“\n”);

Burada bir alt satıra geçilir ve i değişkeni 1 artarak döngü devam eder. matris[i][j], i=1 için; matris[1][j] durumuna dönüşür. i=1 için tekrar program j değişkenine ait döngü içerisine girer.

matris[i][j];

matris[1][0] , matris[1][1], matris[1][2], matris[1][3]

Tekrar her j(sütun) değeri değiştiğinde, j döngüsüne ait bloğu işleten programımız, i<3 sorgusu sağlandığı sürece bu işlemi tekrar eder.

Bir matrisin indislerinin kullanıcı tarafından girilmesini istediğimizde ise aşağıdaki kodu kullanabiliriz.

Yukarıdaki kodda scanf(“%d”,&satir); ve scanf(“%d”,&sutun); ile matrisimizin kaç satır ve sütundan oluşacağını klavyeden giriyoruz. Daha sonraki kısım ise matrisin ekrana yazdırılmasıyla aynı mantık üzerinden işliyor. scanf(“%d”, &matris[i][j]); koduyla matrisin i. satır ve j. sütun değerlerini giriyoruz.

Aşağıdaki örnekleri derleyicide çalıştırarak çok boyutlu dizileri daha iyi kavrayabiliriz.

ÖRNEK: Kullanıcı tarafından bir matris oluşturan program.

ÖRNEK: İki matrisin toplamını bulan program.

ÖRNEK: Kullanıcının oluşturduğu matrisin simetrik olup olmadığını bulan program.

ÖRNEK: Tek boyutlu bir diziyi iki boyutlu (matrise) çeviren program.

ÖRNEK: NxM Matrisi bir boyutlu P elemanlı diziye dönüştüren program (p=NxM).

ÖRNEK: 3×3 kare matrisin transpozesi ( devriği) ‘ni bulan program.

ÖRNEK: 2×2 kare matrisin tersini bulan program.