Ç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.
#include <stdio.h>
int main()
{ //main bloğu başlangıcı
int matris[3][4] = {3, 5, 0, 1, 8, 12, 9, 125, 0, 2, 4, 6};
int i, j;
for(i=0; i<3; i++)
{ //for döngü bloğunun i için başlangıcı
for(j=0; j<4; j++)
{//for döngü bloğunun j için başlangıcı
printf("%4d ", matris[i][j]);
}//for döngü bloğunun j için sonu
printf("\n");
}//for döngü bloğunun i için sonu
return 0;
}//main bloğu sonu
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.
printf("Matrisin satir sayisini gir > ");
scanf("%d",&satir);
printf("Matrisin sutun sayisini gir > ");
scanf("%d",&sutun);
printf("Matrisin degerlerini gir > ");
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
printf("\n Deger [%d] [%d] --> ", i+1, j+1);
scanf("%d", &matris[i][j]);
}
}
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.
#include <stdio.h>
#include <conio.h>
int main()
{
int matris[100][100];
int satir, sutun, i, j;
printf("Matrisin satir sayisini gir > ");
scanf("%d",&satir);
printf("Matrisin sutun sayisini gir > ");
scanf("%d",&sutun);
printf("Matrisin degerlerini gir > ");
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
printf("\n Deger [%u] [%u] --> ", i+1, j+1);
scanf("%u", &matris[i][j]);
}
}
printf("\nolusturulan matris:\n\n");
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
printf("%3u ", matris[i][j]);
}
printf("\n");
}
return 0;
}
ÖRNEK: İki matrisin toplamını bulan program.
#include<stdio.h>
int main()
{
int a[3][3];
int b[3][3];
int c[3][3];
int i,j;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("\nA[%d][%d] matrisinin degerlerini giriniz> ",i+1,j+1);
scanf("%d",& a[i][j]);
}
}
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("\nB[%d][%d] matrisinin degerleri giriniz>",i+1,j+1);
scanf("%d",& b[i][j]);
}
}
printf("\nA matrisi:\n\n");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d\t",a[i][j]);
printf("\n");
}
printf("\nB matrisi:\n\n");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d\t",b[i][j]);
printf("\n");
}
{
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
c[i][j]=a[i][j]+b[i][j];
}
}
printf("\nGirmis oldugunuz matrislerin toplami asagidadir.\n\n");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d\t",c[i][j]);
printf("\n");
}
return 0;
}
ÖRNEK: Kullanıcının oluşturduğu matrisin simetrik olup olmadığını bulan program.
#include <stdio.h>
#include <conio.h>
int main()
{
int a[100][100];
int simetri=1;
int x, y, i, j;
printf("Matrisin satir sayisini gir > ");
scanf("%d",&x);
printf("Matrisin sutun sayisini gir > ");
scanf("%d",&y);
printf("Matrisin degerlerini gir > ");
for(i=0; i<x; i++)
{
for(j=0; j<y; j++)
{
printf("\n Deger [%d] [%d] --> ", i+1, j+1);
scanf("%d", &a[i][j]);
}
}
printf("\nolusturulan matris:\n\n");
for(i=0; i<x; i++)
{
for(j=0; j<y; j++)
{
printf("%2d ", a[i][j]);
}
printf("\n");
}
/*NOT: a[i][j]==a[j][i] ise
bu matris simetridir.*/
for(i=0; i<x; i++)
{
for(j=0; j<y; j++)
{
{
if(a[i][j]!=a[j][i])
simetri=0;
break;
}
}
}
if(simetri==1)
printf("\nMatris Simetriktir.\n");
else
printf("\nMatris Simetrik Degildir\n");
return 0;
}
ÖRNEK: Tek boyutlu bir diziyi iki boyutlu (matrise) çeviren program.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int dizi[100];
int a[100][100];
int i, j, n, x, sat, sut;
printf("Diziniz kac elemandan olusacak? > ");
scanf("%d",&n);
for(x=0; x<n; x++)
{
printf("Dizinin [%d] . elemanini gir > ",x+1);
scanf("%d",&dizi[x]);
}
printf("\nDizi elemanlari -->\n" );
for(x=0; x<n; x++)
{
printf("%3d",dizi[x]);
}
printf("\nMatrisin Satir sayisini gir > ");
scanf("%d",&sat);
printf("matrisin sutun sayisini gir > ");
scanf("%d",&sut);
if(n%sat==0 && n%sut==0)
{
x=0;
for(i=0; i<sat; i++)
{
for (j=0; j<sut; j++)
{
a[i][j]=dizi[x];
x++;
}
}
printf("\n\nMATRIS > \n");
for(i=0; i<sat; i++)
{
for(j=0; j<sut; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
}
else
printf("HATA! Dizi Eleman Sayisi Satir veya Sutuna Tam bolunmelidir");
return 0;
}
ÖRNEK: NxM Matrisi bir boyutlu P elemanlı diziye dönüştüren program (p=NxM).
#include<stdio.h>
int cizgi()
{
int x;
for(x=0; x<30; x++)
printf("_");
printf("\n");
}
int main()
{
int matris[100][100];
int dizi[100];
int i, j, k=0, satir, sutun;
printf("Matrisin satir sayisini gir > ");
scanf("%u",&satir);
printf("Matrisin sutun sayisini gir > ");
scanf("%u",&sutun);
printf("\n");
cizgi();
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
printf("matrisin [%u][%u] elemnini gir > ",i+1 ,j+1);
scanf("%d", &matris[i][j]);
}
}
cizgi();
printf("\nOlusturulan matris\n");
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
printf("%3d",matris[i][j]);
}
printf("\n\n");
}
cizgi();
cizgi();
printf("\nMatrisin diziye aktarilmis hali\n");
for(i=0; i<satir; i++)
{
for(j=0; j<sutun; j++)
{
dizi[k]=matris[i][j];
k++;
}
}
for(k=0; k<satir*sutun; k++)
{
printf("%d ",dizi[k]);
}
printf("\n");
cizgi();
cizgi();
return 0;
}
ÖRNEK: 3×3 kare matrisin transpozesi ( devriği) ‘ni bulan program.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][3] = {2, 4, 4, 2, 1, 0, 1, 2, 3,};
int i, j, m;
printf("MATRIS :\n\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%3d", a[i][j]);
}
printf("\n\n");
}
for (i = 0; i < 3; i++)
{
for (j = i; j < 3; j++)
{
m = a[i][j];
a[i][j] = a[j][i];
a[j][i] = a[i][j];
a[j][i] = m;
}
}
printf("\n\nMatrisin Transpozesi :\n\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%3d", a[i][j]);
}
printf("\n\n");
}
return 0;
}
ÖRNEK: 2×2 kare matrisin tersini bulan program.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a[2][2] = {2, 4, 4, 2};
float b[2][2], c[2][2];
int i, j, m;
float p, r;
printf("MATRIS :\n\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
printf("%3.0f", a[i][j]);
}
printf("\n");
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
if (i == j)
b[i][j] = 1;
else
b[i][j] = 0;
}
}
for (i = 0; i < 2; i++)
{
p = a[i][i];
for (j = 0; j < 2; j++)
{
a[i][j] = a[i][j] / p;
b[i][j] = b[i][j] / p;
}
for (m = 0; m < 2; m++)
{
if (m != i)
{
r = a[m][i];
for (j = 0; j < 2; j++)
{
a[m][j] = a[m][j] - (a[i][j] * r);
b[m][j] = b[m][j] - (a[i][j] * r);
}
}
}
}
printf("\n\n\nMatrisin Tersi : \n\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
printf(" %f ", b[i][j]);
printf("\n");
}
return 0;
}
| didem on 14- C PROGRAMLAMAYA GİRİŞ: DİZ… | |
| taygun on 14- C PROGRAMLAMAYA GİRİŞ: DİZ… | |
| muratcan on 14- C PROGRAMLAMAYA GİRİŞ: DİZ… | |
| mehmet değirmencioğl… on 13- C PROGRAMLAMAYA GİRİŞ: DİZ… | |
| mehmet on 1-BAŞLANGIÇ—->GİRİŞ |