Diziler Giriş
Bu ünite, önemli bir konu olan veri yapılarına bir giriş olacaktır. Diziler , birbirleriyle ilişkili ve aynı tipte verileri içeren veri yapılarıdır. 10. Ünitede C'nin büyük olasılıkla farklı tiplerden oluşan, birbirleriyle bağlantılı veri yapı biçimi olan struct (yapı) gösterimini tartışacağız. Diziler ve yapılar statik yapılardır ve programın çalışması süresince hep aynı boyutta kalırlar. (Bazen de otomatik depolama sınıfında olabilirler ve böylece tanımlandıkları blokların içine giriş ve çıkış esnasında, yaratılıp yok edilebilirler) 12. Ünitede listeler, sıralar, yığınlar ve ağaçlar gibi programın çalışması esnasında büyüyüp, küçülebilen dinamik veri yapılarını da anlatacağız.
DİZİLER
Bir dizi, aynı isme ve aynı tipe sahip olmaları sebebiyle birbirleriyle ilişkili olan hafıza konumlarının bir grubudur. Bir dizinin içindeki bir elemanı ya da konumu belirtmek için o dizinin adını ve elemanın dizi içindeki pozisyonunu belirtmeliyiz. Şekil 6.1, c isminde bir tamsayı dizisi göstermektedir. Bu dizinin 12 elemanı vardır. Bu elemanlardan herhangi biri, dizinin ismi ve belirlenen elemanın pozisyonu köşeli parantez ( [ ] ) içinde belirtilerek çağrılabilir. Bir dizinin ilk elemanı her zaman sıfırıncı elemandır. Bu sebepten, c dizisinin ilk elemanı c [o] ile gösterilir, ikinci elemanı c[1] , yedinci elemanı c[6] ve genel olarak i 'ninci elemanı c [i - 1] şeklinde gösterilir. Dizi isimleri, diğer değişkenlerde olduğu gibi yalnızca harf, rakam ve altçizgi karakterlerini içerebilir. Dizi isimleri rakam karakterleriyle başlayamaz.
Bir dizinin ismi (bu dizinin her elemanının isminin aynı olduğuna dikkat edin)
c[0] -> -45
c[1] -> 6
c[2] -> 0
c[3] -> 72
c[4] -> 1543
c[5] -> -89
c[6] -> 0
c[7] -> 62
c[8] -> -3
c[9] -> 1
c[10] -> 6453
c[11] -> 78
Dizideki elemanların pozisyonunu belirten sayı
Şekil 6.1 12 elemanlı dizi
Köşeli parantez içinde bulunan sayı, belirteç (subscipt) olarak adlandırılır. Bir belirteç, ya bir tamsayı ya da bir tamsayı deyimi olmalıdır. Eğer program belirteç olarak deyim kullanıyorsa , deyim belirtecin değerine karar vermek için hesaplanır. Örneğin, eğer a = 5 ve b = 6 ise
1 |
c [ a + b ] + = 2;
|
ifadesi c[11] elemanına 2 ekler. Dikkat edilirse, belirteçle birlikte dizi ismi bir sol taraf değeridir. Bu sebepten, atamaların sol tarafında kullanılabilir.
Şimdi, c dizisini (Şekil 6.1.) daha yakından inceleyelim. Dizinin ismi c'dir. Dizinin 12 elemanı c[0] , c[1] , c[2] , ...... c[11] şeklinde gösterilmiştir. c[0] içinde tutulan değer –45 , c[1] içinde tutulan değer 6 , c[2] içinde tutulan değer 0, c[7] içinde tutulan değer 62 ve c[11] içinde tutulan değer 78'dir. Bu dizinin ilk üç elemanının içinde tutulan değerlerin toplamını yazdırmak isteseydik;
1 |
printf ("%d", c[0] + c[1] + c[2]);
|
yazacaktık. Bu dizinin yedinci elemanının değerini ikiye bölüp, oluşan sonucu x değişkenine atasaydık;
1 |
x = c[6] / 2;
|
yazacaktık.
Genel Programlama Hataları 6.1
"Dizinin yedinci elemanı" ile "yedinci dizi elemanı" arasındaki farkı anlamak önemlidir.Dizi belirteçleri sıfırdan başladığı için "dizinin yedinci elemanı" 6 belirtecine sahiptir. "yedinci dizi elemanı" ise 7 belirtecine sahiptir ve aslında dizinin sekizinci elemanıdır. Bu "bir eksik"(off-by-one) hatalarının kaynağıdır.
Dizi belirteçlerini içine alan köşeli parantezler, C'de bir operatör olarak kullanılırlar ve parantezlerle aynı seviyede önceliğe sahiptirler. Şekil 6.2, bu ana kadar incelediğimiz operatörlerin önceliğini ve işleyiş sıralarını göstermektedir. Öncelik sırası yukarıdan aşağıya gidildikçe azalmaktadır.
Operatörler İşleyiş Tip
( ) [ ] soldan sağa en yüksek
++ -- ! (tip) sağdan sola tekli
* / % soldan sağa multiplicative
+ - soldan sağa additive
< <= > >= soldan sağa karşılaştırma
= = != soldan sağa eşitlik
&& soldan sağa ve
|| soldan sağa veya
?: sağdan sola koşullu
= += -= *= /= sağdan sola atama
, soldan sağa virgül
Şekil 6.2 Operatör öncelikleri
DİZİLERİN BİLDİRİLMELERİ
Diziler hafızada bir yer kaplarlar. Programcı, her elemanın tipini ve dizide kaç eleman kullanacağını belirterek bilgisayarın en uygun hafızayı ayırmasını sağlatır. Mesela, bilgisayara 12 elemana sahip bir tamsayı dizisini
1 |
int c[12];
|
ile bildiririz. Aynı anda birden fazla dizi bildirimi yapabiliriz. 100 elemana sahip bir b tamsayı dizisi ile 27 elemana sahip bir x tamsayı dizisini aynı anda bildirmek istersek
1 |
int b[ 100 ] , x [ 27 ] ;
|
yazarız.
Diziler başka veri tipleri içermek üzere de bildirilebilirler. Örneğin, char tipte bir dizi karakter stringlerini depolamakta kullanılabilir. Karakter stringleri ile dizilerin benzerlikleri 8. ünitede anlatılacaktır. Göstericiler ve diziler arasındaki ilişki ise 7.ünitede gösterilecektir.
Bilinmesi Gerekli
Arduino

Arduino ile bilgisayar programlarınızı gerçek dünyaya taşıyabilirsiniz.
İlk Transistör

Bell laboratuvarlarında icat edilen ilk transistör







