İki Boyutlu Diziler
İki Boyutlu Diziler
İki boyutlu dizilerin genel kullanımı, satırlar ve sütunlar düzenlenmiş değerler içeren tabloları göstermektedir.Bir dizi elemanını belirlemek için iki belirteç kullanılmalıdır. ilk belirteç dizinin satırını, ikinci belirteç ise dizinin sütununu belirtir.
İki Boyutlu Dizi Tanımlama
İki boyutlu bir x dizi aşağıda gösterilmiştir. Satır ve sütunları belirtilen şekildedir.
int x [ 2] [ 2] ={ {1,2}, {6,7} };
Şeklinde bir iki boyutlu dizi tanımlanmıştır. Bu x dizisinin ilk elemanına erişmek istenirse
x[0][0] = 1;
şeklindedir.
int x[2][2]={ {1}, {6,7} };
Şeklinde tanımlanan dizide tanımlanmayan eleman varsa derleyici tarafından otomatik olarak sıfır atanır.
x[0][0]= 1; x[0][1]= 0;
İki Boyutlu Dizi Yazdırma
Aşağıda programcı dizi elemanları kullanıcı tarafından verilen dizinin ekrana yazdırılması gösterilmiştir.
#include <stdio.h> void diziyiYazdir (const int [ ][3]); int main( ) { int dizi1 [2][3]={{1,2,3},{4,5,6}}, dizi2 [2][3]={1,2,3,4,5}, dizi3 [2][3]={{1,2},{4}}; printf("Satir satir dizi1'in elemanlari:\n\n"); diziyiYazdir(dizi1); printf("Satir satir dizi2'in elemanlari:\n\n"); diziyiYazdir(dizi2); printf("Satir satir dizi3'in elemanlari:\n\n"); diziyiYazdir(dizi3); return 0; } void diziyiYazdir (const int a[ ][3]) { int i,j; for (i=0; i<=1;i++) { for(j=0;j<=2;j++) printf("%5d",a[i][j]); printf("\n\n"); } }
int dizi1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }, dizi2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }, dizi3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
Dizi tanımlamasına bakılırsa prantez({}) kullanılmayan dizi2‘de tüm elemanlar değere atanmış tanımlanmamış olan elamana sıfır atanmıştır. Aynı olay dizi3‘te görülmektedir.
void diziyiYazdir ( const int a[ ][ 3 ] ) { int i, j; for ( i = 0; i <= 1; i++ ) { for ( j = 0; j <= 2; j++ ) printf( “%d “, a[ i ][ j ] ); printf( “\n” ); }
Dizi yazdırma işlemi diziyiYazdir fonksiyonun içerisinde çift for döngüsü ile gerçekleştirilmiştir. for iki değişken i ve j tanımlanmış a[i][j] dizinin o değişkenlere eşit olan elamanları ekrana yazdırmıştır.
void diziyiYazdir ( const int a[ ][ 3 ] )
Fonksiyon tanımının, dizi parametresini const int a[ ][3] olarak belirlediğine dikkat ediniz. Tek belirteçli bir dizi fonksiyon argümanı olarak kullanıldığında, fonksiyonun parametre listesindeki dizinin parantezleri içini boş bırakıyorduk.
Çok boyutlu dizilerde ilk belirtece gerek yoktur ancak sonraki diğer tüm belirteçler belirtilmelidir. Derleyici, bu belirteçleri çok boyutlu dizi elemanlarının hafıza konumlarını belirlemek için kullanır. Tüm dizi elemanları, dizinin belirteç sayısı ne olursa olsun, hafızada ard arda tutulur. İki boyutlu dizilerde hafızaya önce ilk satır daha sonra ise ikinci satır yazılır.
İki Boyutlu Diziye Kullanıcıdan Değer Atama
Dizilerde çarpma işlemi yapan aşağıdaki Programcı üç dizi tanımlamış b dizisi elemanları programcı tarafından girilmiş a dizisi kullanıcıya bırakılmıştır.
#include<stdio.h> #define boy 3 main() { int i ,j ,k, top,m; int a [boy][boy] ; int b [boy][boy] = {1,0,0,0,1,0,0,0,1 } ; int c [boy][boy]; /* A dizisine Deger Atama*/ for(i=0;i<boy; i++) { for(j=0;j<boy; j++) { printf("Giriniz a[%d][%d]=",i,j); scanf("%d",&m); a[i][j]=m; } } /* a dizisini yazdırma */ printf( "a dizisi elemanlari \n"); for(i=0; i<boy ;i++) { for(j=0; j<boy ;j++) printf("%3d ",a[i][j]); printf("\n"); } printf("\n"); /* b dizisini yazdırma */ printf( "b dizisi elemanlari \n"); for(i=0; i<boy ;i++) { for(j=0; j<boy ;j++) printf("%3d ",b[i][j]); printf("\n"); } printf("\n"); /* çarpma c=a*b */ for(i=0; i<boy ;i++) for(j=0; j<boy ;j++) { top=0; for(k=0; k<boy ;k++) top += a[i][k]*b[k][j]; c[i][j]=top; } /* c dizisini yazdırma */ printf( "a*b dizisi elemanlari \n"); for(i=0; i<boy ;i++) { for(j=0; j<boy ;j++) printf("%3d ",c[i][j]); printf("\n"); } return 0; }
for(i=0;i<boy; i++) { for(j=0;j<boy; j++) { printf(“Giriniz a[%d][%d]=”,i,j); scanf(“%d”,&m); a[i][j]=m; } }
İç içe iki for döngüsü ile kullanıcıdan değer alınmış ve a[i][j]=m; ifadesi ile dizinin elemanlarına atanmıştır.
for(i=0; i<boy ;i++) for(j=0; j<boy ;j++) { top=0; for(k=0; k<boy ;k++) top += a[i][k]*b[k][j]; c[i][j]=top; }
Kısmında bulunan kod satırının top += a[i][k]*b[k][j]; çarpma işlemi yapılmış ve c[i][j]=top; ile c dizisine atanmıştır.