Diziler
5.6 Diziler
C’de dizi, aynı veri tipindeki değişkenlerin, hafızada peşpeşe yeraldığı yapıya denir. Dizide her gözde tutulan değişkene dizinin elemanı denir ve diğer programlama dillerinde olduğu gibi her elemana bir indis yardımıyla ulaşılır. C’de dizilerin en farklı özelliği, indisin 0’dan başlamasıdır – yani her dizinin ilk elemanı 0. elemandır – 1 indisine sahip eleman 2. eleman anlamına gelir.
dizi[0] dizi[1] dizi[2] dizi[3] … dizi[n]
Dizi kullanımının amacı aynı tipteki verileri bir yapı içinde kullanabilmektir – örneğin bir yıl boyunca her günki sıcaklığı kaydedilmek istenirse bunun için 365 ayrı float tipinde değişken tanımlanacağına, 365 elemana sahip bir float dizisi tanımlanır.
5.6.1 Dizilerin tanımlaması
Dizilerin tanımlanmasında veri tipi, dizi adı, dizinin boyutu ve istenirse dizi elemanlarına atanacak ilk değer verilir:
veritipi diziadi[boyut];
Az önceki sıcaklık örneği için bir dizi tanımlanırsa;
float temp[365];
Bu tanımlama sonrası dizide kullanılacak elemanlar temp[0] … temp[364] olacaktır. Dikkat edilmesi gereken şey tanımlama aşamasında verilen sayını bir indis değeri değil dizinin boyutu olduğudur. Dizi elemanlarına değer atama ise veri tipini de gözönüne alarak önceden anlatılan atama operatörleri ile gerçekleştirilir:
temp[0] = 32.4;
temp[1] = 31.0;
C’de dizilerin ilk elemanının 0 indisiyle çağırılması C’nin makineye daha yakın olduğunu da gösterir. Anlaşılması zor olsa da 0 indisi, makine seviyesinde dah anlamlı bir başlangıç noktasını ifade etmektedir.
Az önceki sıcaklık örneğine dönüp, yıllık ortalama sıcaklığı veren bir program yazacak olursak;
void main(void)
{
int j;
float avg = 0, temp[365];
/* temp dizisinin gözlerine değer atamak için kullanılan kod */
for (j=0; j<365; j++)
avg += temp[j];
printf(“Ortalama sicaklik degeri : %l”, avg / 365);
}
5.6.2 Dizilerin hafızadaki yerleşimi
Dizilerin hafızadaki yerleşiminin anlaşılması için aşağıdaki tanımlanmış diziyi gözönüne alırsak;
int ar[5];
ar[0] = 15;
ar[1] = 17;
ar[3] = ar[0] + ar[1];
Dizinin hafızada 1000 adresinden başlayarak yerleştirildiğini varsayarsak, hafıza yerleşimini şu şekilde gösterebiliriz:
Dizi el. Adres (hex) İçerik
0FFC
ar[0] 1000 15
ar[1] 1004 17
ar[2] 1008 ?
ar[3] 100C 32
ar[4] 1010 ?
1014
Görüldüğü gibi dizi elemanları hafızada birbirini takip eden adreslere yerleştirilir. Bu bize dizilere pointer’ları kullanarak da kolayca erişebilme imkanı da verir. ? ile belirtilen yerlerde ne olacağını kestirmek olanaksızdır. Bu adreslerde, yani 1008 ve 1010 adreslerinde, bir önce çalıştırılan programın bu adreslere yazdığı değerler yeralır. Bu tip adresleri kullanırken, standart değişken tanımlamadan ortaya çıkabilecek programlama hataları çıkabilir.
5.6.3 Dizi elemanlarına ilk değer atama
ANSI standartına göre, bir diziye tanımlama esnasında ilk değer atayabilmek için dizinin static keyword’ü ile tanımlanması gerekmektedir. (c99-Borland C’de böyle bir şart yok) Bunun için {} işaretleri kullanılır:
int i[5] = {1,2,3,4,5}
Eğer dizi elemanı sayısından fazla ilk değer girmeye çalışırsanız compiler hata verir. Eğer dizi elemanından daha az sayıda ilk değer girerseniz compiler girilen değer kadar atama yapar ve dizinin geri kalan elemanlarına 0 atar.
int i[5] = {1,2,3}
tanımlamasının anlamı;
i[0]=1;
i[1]=2;
i[2]=3;
i[3]=0;
i[4]=0;
Dizi tanımlaması sırasında ilk değer ataması yapılıyorsa dizi boyutu vermeye gerek yokyur. Compiler verilen ilk değer sayısından dizinin uzunluğunu belirler.
int i2[] = {1, 2, 3};
printf(“%d”, sizeof(i2));
kod parçası çalıştırılırsa ekranda 6 yazar – bu da 3 adet int tipinin byte olarak boyutuna eşittir.
5.6.4 İki boyutlu diziler
Şimdiye kadarki örnekler hep tek boyutlu yani elemanlarına tek indizle ulaşılabilen diziler içeriyordu. İki boyulu dizi ise aslında, elemanları tek boyutlu diziler olan bir dizidir – matris. Tanımlanması ise tek boyutlu dizi gibi – ama iki boyutu da vererek olur:
veritipi diziadi[boyut1][boyut2]
İki boyutlu diziler, boyutlardan birisinin satır sayısını, diğerinin ise sütun sayısını gösteren bir matris olarak kabul edilebilir.
int t, i, num[3][4];
for (t=0; t<3; t++)
for (i=0; i<4; i++)
num[t] = (t*4)+i+1;
kod parçası num adlı iki boyutlu diziye 1-12 arası sayılar atar ve bunlar şu şekilde yerleştirilir:
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
Bu dizi hafızaya yerleştirilirken önce satır satır yerleştirilir (Çizim)
İki boyultu dizilerin tanımlandığı gibi, ikiden fazla boyuta sahip diziler de tanımlanabilir:
veritipi diziadi[boyut1][boyut2]…[boyutn]
Fakat bu kullanım çok gerekmedikçe kullanılmaz çünkü doğru erişimi gerçekleştirmek oldukça zordur.
5.6.5 Stringler
String olarak geçen değişken tipi aslında bir char dizidir. Tanımlanması da;
str chr[10];
şeklindedir. Stringlerde dikkat edilecek şey, her stringin son karakterinin NULL karakteri olması gerektiğidir. Bu yüzden, n karakterlik bir değer tutacağınız bir string için, tanımlama esnasında n+1’lik bir string tanımlamanız gerekir. Stringin içerdiği karakterlere erişim diğer tiplerdei dizilerdeki erişim ile aynıdır.
5.7 Örnek
test örneğini 10 öğrenci için ve her öğrencinin sonucunu da bir dizinin bir gözünde tutacak şekilde yap.












Android’te Grafik Kaynakları-2 : View Nesnelerine Hareket Kazandırmak
Android’te Grafik Kaynakları-2 : View Nesnelerine Hareket Kazandırmak
IBM Yazılım Akademisi 2011
C#’a GENEL BAKIŞ
Kullanıcı Tahminli Sayı Tahmin Oyunu