Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007
DİZİLER Bellekte bitişik bir biçimde bulunan ve aynı türden nesnelerin oluşturduğu veri yapısına dizi (array) denir. Dizi veri yapısının en önemli özelliği, mantıksal bir ilişki içindeki aynıtürden verilerin bellekte bitişik (contiguous) olarak tutulmasına olanak vermesidir. Bunun da pratikte sağladığı fayda şudur: Dizinin bir elemanına, elemanın konum bilgisiyle değişmez bir zamanda ulaşılabilir. Yani dizinin eleman sayısı ne olursa olsun, konumu biilinen bir elemana ulaşım zamanı aynıdır. Bu da bazı uygulamaların etkin bir şekilde gerçekleştirilmesini kolaylaştırır. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
Dizilerin Tanımlanması Dizi tanımlamalarının genel biçimi: [ ]; Yukaridaki gösterimde köşeli ayraç eleman sayısının seçimlik olduğunu değil, eleman sayısı bilgisinin köşeli ayraç içine yazılması gerektiğini gösteriyor. tür : Dizi elemanlarının türünü gösteren anahtar sözcüktür. dizi ismi : İsimlendirme kurallarına uygun olarak verilecek herhangi bir isimdir. eleman sayısı : Dizinin kaç elemana sahip olduğunu gösterir. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE Örnek Dizi Bildirimleri: double a[20]; /* a, 20 elemanlı ve elemanları double türden olan bir dizidir*/ float ave[10]; /* ave 10 elemanlı ve her elemanı float türden olan bir dizidir. */ unsigned long total[100]; * total 100 elemanlı ve her elemanı unsigned long türden olan bir dizidir */ char path[80]; /* path 80 elemanlı ve her elemanı char türden olan bir dizidir. */
ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE Tanımlamada yer alan eleman sayısı belirten ifadenin bir tamsayı türünden değişmez ifadesi olması zorunludur. int x = 100; int a[x]; int b[5.]; int c[10 * 20]; Yukarıdaki deyimlerden a ve b dizilerinin tanımlamaları söz dizim hatası oluşturur.a dizisinin tanımında boyut belirten ifade olarak değişmez ifadesi olmayan bir ifade kullanılmıştır. b dizisinin tanımında ise boyut belirten ifade bir gerçek sayı türündendir. c dizisinin tanımında ise bir hata söz konusu değildir. 10 * 20 bir değişmez ifadesidir.
Dizi bildirimlerinde eleman sayısını belirten ifade yerine sıklıkla simgesel değişmezler kullanılır: #define ARRAY_SIZE 100 int a[ARRAY_SIZE]; /* geçerli bir bildirimdir */ Program içinde dizi boyutu yerine hep ARRAY_SIZE simgesel değişmezi kullanılabilir.Böylece programda ileride dizi boyutuna ilişkin bir değişiklik yapılmak istendiğinde, yalnızca simgesel değişmezin değerinin değiştirilmesi yeterli olur. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
Diğer değişken bildirimlerinde olduğu gibi, virgül ayıracıyla ayrılarak, birden fazla dizi tek bir tür belirten anahtar sözcükle tanımlanabilir: int x[100], y[50], z[10]; x, y ve z elemanları int türden olan dizilerdir. Diziler ve diğer nesneler türleri aynı olmak kaydıyla tek bir tanımlama deyimiyle tanımlanabilir. int a[10], b, c; a int türden 10 elemanlı bir dizi, b ve c int türden nesnelerdir. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
Dizi elemanlarının her biri ayrı birer nesnedir. Dizi elemanlarına köşeli ayraç işleciyle [] ulaşılabilir. Köşeli ayraç işleci bir gösterici işlecidir. Göstericiler konusunda ayrıntılı bir şekilde ele alınır. İndex işlecinin terimi dizi ismidir. Aslında bu bir adres bilgisidir, çünkü bir dizi ismi bir işleme sokulduğunda, işlem öncesi otomatik olarak dizinin ilk elemanının adresine dönüştürülür. Köşeli ayraç içinde dizinin kaçıncı indisli elemanına ulaşılacağını gösteren bir tamsayı ifadesi olmalıdır. C dilinde bir dizinin ilk elemanı dizinin sıfır indisli elemandır. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
T a[SIZE] gibi bir dizinin ilk elemanı a[0] son elemanı ise a[SIZE - 1]'dir. Örnekler: dizi[20] /* a dizisinin 20. indisli yani 21. sıradaki elemanı olan nesne */ ave[0] /* ave dizisinin 0. indisli yani birinci sıradaki elemanı olan nesne */ total[j] /* total dizisinin j indisli elemanı olan nesne*/ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
ÖRENEK int a[5]; gibi bir dizi tanımlaması yapıldığını düşünelim. Windows işletim sisteminde çalışılıyorsa derleyici a dizisi için bellekte 4 * 5 = 20 byte yer ayırır. Bellekte bu dizinin yerleşimi aşağıdaki gibi olur : ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE
Örnek : Klavyeden 10 sayı oku. Tersten yazdır. #include main() { int a[10]; int i; for (i=0; i<=9; i++) { printf("%d. sayıyı gir ",i); scanf("%d", &a[i]); } printf("\n \n"); for (i=9; i>=0; i--) printf("%d. sırada girilen sayı = %d\n", 9-i, a[i]); } ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ, YAZ STAJI, 6/8/2007 Arş.Gör.Cengiz TEPE