Merhaba arkadaşlar bugünkü yazımda tek boyutlu ,çok boyutlu dizileri ve dizi tanımlamaların nasıl yapıldığını kısaca anlatmaya çalışacağım.
C’de tablo ,matris,veri depoları oluşturmak için dizi elemanları kullanılır. Program , girilen verileri sırasıyla bellekte alt alta sıralar . Dizi tanımlarken öncelikle dizide saklanacak verilerin türü belirtilmeli sonrasında köşeli parantezlerle ( [8] ) dizinin eleman sayısı girilmelidir. Dizinin 1.elemanı [0] nolu bellek adresinde, sonuncu elemanı ise [eleman sayisi-1] adresinde saklanır.
Tek boyutlu diziler için tanımlamalar <veri türü><isim>[eleman sayısı] , çok boyutlu diziler için ise
<veri türü><isim>[satır][sütun][derinlik]…[vs. ] şeklinde yapılır.tanımlamalara örnek olarak;
float dizi[10]:float türünde 10 elemanlı bir dizi .
int matris[][]:int türünde eleman sayısı belli olmayan iki boyutlu dizi. Bu tür tanımlamalarda matris boyutunu girdiğimiz değer sayısı belirler.
Matrislere ilk değeri verme: Herhangi bir değişken tanımlarken atama operatoru olarak eşittiri (=) kullanıyorduk. Dizide bellek adreslerinde değer saklamak için buna benzer bir yol izlenir. Ayrıca dizilere ilk değer olarak 0 vermekte fayda var çünkü kullandığımız bellekte daha önce başka bir sayı eklenmiş olabilir. Bu yüzden dizinin elemanlarına değer atarken atladığımız bir eleman önceki değerini kullanır bu da işlemlerimizin yanlış olmasına yol açar.
int sayilar[2]={0}
int tekboyut[5]={1,2,3,4,5} ;
float cokboyutlu[3][3]={{1,2,3},{5,5,5},{7,7,7}} veya {1,2,3,5,5,5,7,7,7}
cokboyutlu[2][1]=4; //dizinin 3.satır 2.sütun elemanın değeri 4 olarak atandı.
Dizilere karakter yazma: Dizilerde sayıların yanında karakter tipinde tanımlamalar ve işlemler yapılabilir. Bir string oluştururken dizilerden faydalanabiliriz. Bunun için char tipinde tanımlama yapılmalı. Karakterlerle dizi oluştururken dizinin sonuna geldiğimizi belirten elemana NULL (‘\0’) denir .
char bilgi[]=”komhedos” veya
char bilgi[8]={’k’,’o’,’m’,’h’,’e’,’d’,’o’,’s’}
Bellekte komhedos yazısı bu şekilde yerleştirilmiş oldu. Şimdi de 3×3 ve 4×4 boyutundaki matrislerle toplama işlemi yapan programı inceleyelim.
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 |
#include<stdlib.h> #include<stdio.h> //standart giriş çıkış fonksiyonları scanf,printf kütüphanensi #include<conio.h> //konsol ayarları için kullanılan başlık dosyasıdır // puts gets getchar gibi fonksiyonların bulunduğu kütüphane. void matristopla() //matris toplama fonksiyonu { int i,j,n=4,z,l; char tercih; int matris1[n][n],matris2[n][n],matris3[n][n]; puts("matris boyutunu seciniz\n"); puts("4x4 matris:d\n3x3 matris:u\n\n"); tercih=getch(); if(tercih=='u') { z=4; l=3; } if(tercih=='d') { z=5; l=4; } for(i=1;i<z;i++) { for(j=1;j<z;j++) { printf("%d.satir %d.sutun elemani giriniz\n",i,j); scanf("%d",&matris1[i-1][j-1]); } } printf("\n"); for(i=0;i<l;i++) { for(j=0;j<l;j++) { printf("%d ",matris1[i][j]); printf("\t"); } printf("\n"); } printf("ikinci matris degerlerini giriniz\n"); for(i=1;i<z;i++) { for(j=1;j<z;j++) { printf("%d.satir %d.sutun elemani giriniz\n",i,j); scanf("%d",&matris2[i-1][j-1]); } } printf("\n"); for(i=0;i<l;i++) { for(j=0;j<l;j++) { printf("%d ",matris2[i][j]); printf("\t"); } printf("\n"); } printf("\nTOPLAM\n"); for(i=0;i<l;i++) { for(j=0;j<l;j++) { matris3[i][j]=matris1[i][j]+matris2[i][j]; printf("%d",matris3[i][j]); printf("\t"); } printf("\n"); } } main() { matristopla(); system(“pause”); } |
Programın çalışma mantığı şöyle;
Önce 3×3 ve 4×4 matris için for döngüsünde şartın sınırını belirledim if deyimiyle 3×3’lük matris için z ve l değerlerin yani sınırları sırasıyla 4 ve 3 yaptım. 4×4 için de aynı mantık geçerli. Matrisin elemanlarını aldıktan sonra tekrar bir for döngüsüyle ekrana yazdırdım. Matrisin elemanlarıni girerken scanf i kullandım getch ile de değer okunabilir bu sefer işaretçilerle girilen değerin adresi alınarak içindeki bilgi matris elemanına atanabilir ya da matris1[i][j]=getch()-48; kodunu kullanarak ASCII kodundan 48 çıkararak değeri yazılabilir. En son olarak da main ana programında matristopla fonksiyonunu çağırarak programı tamamladım. Bi daha ki yazıda görüşmek üzere.