-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDers 16 - matrix.c
More file actions
152 lines (128 loc) · 5.98 KB
/
Copy pathDers 16 - matrix.c
File metadata and controls
152 lines (128 loc) · 5.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <stdio.h>
#include <stdlib.h>
/* "matrix (2D array): matris , iki boyutlu dizi"
matematikte satır ve sütünlardan oluşan dikdörtgen sayılar tablolarına "matris" denir
programlamada da benzer bir şekilde 2 boyutlu diziler matris tabiriyle ifade edilirler çünkü bilgisayar 2 boyutlu dizileri matris formatında belleğe kodlar
şu ana kadar gördüğümüz tek boyutlu sayı dizileri nasıl int dizi[]={sayi1,sayi2,sayi3,...} syntax'ı ile ifade edilirse matrisler de benzer bir şekilde:
int matris[][]={sayi1,sayi2,sayi3,...} syntax'ı ile ifade edilirler
yine tek boyutlu dizilerde nasıl köşeli parantez içindeki sayı dizinin eleman sayısını (ya da kapasitesini) belirtiyorsa
matrislerde de köşeli parantezler sırasıyla o matrisin satır ve sütun sayısını belirler
mesela 2*3'lÜk bir matrisi eğer matris[2][3]={34,58,69,110,2,9001} olarak tanımlarsam bilgisayar bu 2 boyutlu diziyi belleğe şöyle kodlar:
index 0 1 2
0 34 58 69
1 110 2 9001 görüldüğü üzere bilgisayar ilk satırı doldurduktan sonra ikinci satıra verileri yazar
başka bir deyişe bilgisayar bir satırı verilerle sırayla doldurmadan bir sonraki satıra geçmez
yine index default'unun 0 olması burada da geçerli, dolayısıyla mesela bir matrisin 2. satır ve 3. sütununda bulunan veri bilgisayar için 1. satır ve 2. sütunda bulunur (ve matris[1][2] olarak ifade edilir)
ilk o zaman matrisi tek tek kodlayalım
int main () { int main() {
int dizi[2][2]; int F[2][2];
//burada kutucuk içindeki sayılar matrisin satır ve sütün sayısını belirtiyor
dizi[0][0]=14; F[0][0]=290;
dizi[0][1]=45; F[0][1]=39;
dizi[1][0]=399; F[1][0]=42;
dizi[1][1]=7; //burada kutucuk içindeki sayılar elemanların indeks numaralarını belirtiyor F[1][1]=1;
printf("%d",dizi[1][0]); //bana 399 yazdıracak printf("%d\t%d\n%d\t%d",F[0][0],F[0][1],F[1][0],F[1][1]); //"290 39
//42 1"
} }
int main() {
int matris[2][3]={10,20,30,40,50,60};
int i,j;
for(i=0;i<2;i++) {
for(j=0;j<3;j++) { //yıldızlarla şekil oluşturmayla aynı mantık
printf("%d ",matris[i][j]); //i=0 iken, j=0 için matris[0][0]="10" yazdırılacak, j=1 için matris[0][1]="20" yazdırılacak, j=2 için matris[0][2]="30" yazdırıldığında
} //bilgisayar j döngüsünden çıkacak, alt satıra geçecek, ve bu sefer i=1 ve j=0,1,2 değerleri için sırayla "40","50" ve "60" değerlerini yazdıracak
printf("\n"); //dolayısıyla burada i benim satır index'im, j ise benim sütün index'im oldu
}
} //"10 20 30
//40 50 60"
hadi kendi matrisimizi kendimiz yazıp bilgisayardan isteyelim
int main() {
int satir,sutun,i,j;
printf("Satir Sayisi: ");
scanf("%d",&satir);
printf("Sutun Sayisi: ");
scanf("%d",&sutun);
int matris[satir][sutun]; //satır ve sutun değişkenlerine değer atandıktan sonra bunu yazmak çok önemli, yoksa dinamik olduğundan hata verebilir
for(i=0;i<satir;i++) {
for(j=0;j<sutun;j++) {
printf("%d. Satir, %d. Sutun Degerini Giriniz: ",i+1,j+1);
scanf("%d",&matris[i][j]);
}
}
printf("\n\nOlusan Matris\n");
for(i=0;i<satir;i++) {
for(j=0;j<sutun;j++) {
printf("%d\t",matris[i][j]);
}
printf("\n");
}
}
int main() {
char dizi[3][5][20]={"1","23","344","45","5","Arda","Enes","Samet","Zebra Onur","3.14","2.3556","70.369"},i,j;
for(i=0;i<3;i++) { //3: satır sayısı, 5: sütun sayısı, 20: karakter sınırı
for(j=0;j<5;j++) //aslında 3 boyutlu bir char dizisi, 2 boyutlu bir string dizisi (matrisi) olarak düşünülebilir
printf("%s\t",dizi[i][j]);
printf("\n"); //"1 23 344 45 5
} //Arda Enes Samet Zebra Onur 3.14
} //2.3556 70.369"
gelgelelim matrislerde dört işleme... öncelikle toplama ve çıkarma işlemlerinde toplanıp çıkarılacak 2 matrisin de aynı satır ve sütun boylarına eşit olması lazım
eğer matrislerimiz aynı boyutlardaysa toplama ve çıkarma işlemleri aynı index numaralarına sahip elemanların birbiriyle toplanılıp çıkarılması biçiminde gerçekleşir, mesela:
index 0 1 index 0 1 index 0 1
0 [10 12] + 0 [8 11] = 0 [18 23]
1 [15 18] 1 [14 6] 1 [29 24] gelin bi de bunu yazdıralım xd
int main() {
int m1[2][2]={10,12,15,18};
int m2[2][2]={8,11,14,6};
int toplam[2][2],i,j;
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
toplam[i][j]=m1[i][j]+m2[i][j];
}
}
printf("Toplam Matrisi\n\n");
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
printf("%d ",toplam[i][j]);
}
printf("\n");
}
}
matrislerde çarpma işlemi gerçekleştirebilmek için ise öncelikle 1. matrisin satır sayısı 2. matrisin sütun sayısına eşit olmalı
öncelik 1. matrisin bir satırı 2. matrisin tüm sütunları ile eşleşmeden 1. matrisin bir sonraki satırına geçmemek olacak biçimde
1. matrisin a. satırı, 2. matrisin b. sütunu ile eşleştiğinde çarpımlar toplamı çarpım matrisinin a. satırın b. sütuna yazılır
o yüzden bir A matrisi a*b boyutlarında ve bir B matrisi b*c boyutlarında ise A*B matrisi her zaman a*c boyutlarında olur
index 0 1 2 index 0 1 index 0 1
0 [a b c] + 0 [g h] = 0 [a*g+b*k+c*o a*h+b*l+c*p]
1 [d e f] 1 [k l] 1 [d*g+e*k+f*o d*h+e*l+f*p] hadi bunu klavyeden girilen herhangi 2*3 ve 3*2'lik matris için yazdıralım
2 [o p] */
int main() {
int i,j,k,m1[2][3],m2[3][2],m3[2][2];
printf("Ilk matrisi giriniz (2x3):\n");
for(i=0;i<2;i++) {
for(j=0;j<3;j++) {
scanf("%d",&m1[i][j]);
}
}
printf("\nIkinci matrisi giriniz (3x2):\n");
for(i=0;i<3;i++) {
for(j=0;j<2;j++) {
scanf("%d",&m2[i][j]);
}
}
printf("\nCarpim matrisi (2x2):\n");
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
m3[i][j]=0;
for(k=0;k<3;k++) {
m3[i][j]+=m1[i][k]*m2[k][j];
}
}
}
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
printf("%d\t",m3[i][j]);
}
printf("\n");
}
return 0;
}