arkaplan

C Programlama Dili Diziler

Bu güne kadar yaptığımız konu anlatımların da hep birkaç değişkenle örneklerimizi halletmemiz gerekiyordu ancak bazı durumlar olur ki, kullanıcıdan yüzlerce veya binlerce değer girmesini istemeniz gerekebilir. Bu gibi durumlarda girilecek her değer için tek tek değişkenler oluşturup süre ve boyut sıkıntısı yaşamamak için diziler en büyük yardımcılarımızdır. Örneğin 50 tane tane veri saklamamız gerekiyor, bunun için 50 tane değişken tanımlamak yerine bir tane dizi tanımlayıp 50 farklı değerin hepsini bu dizi üzerinde ki farklı noktalara kayıt edebiliriz. Tabi bu işlem için öncelikle dizimizin uzunluğunu belirlememiz ve diziyi tanımlamamız gerekiyor, örneğimiz de 50 tane dediğimiz için bu değeri kullanalım ve dizimizde ki verilerin integer tipinde olacağını varsayalım, bu durumda dizinin tanımlanması aşağıda ki gibi olacaktır.

#include <stdio.h>
int main(){
	int dizi[50];
	return 0;
}

Görebileceğiniz gibi dizinin tanımlanma şekli herhangi bir değişken tanımlamaya çok benziyor. Öncelikle dizinin içerisinde saklanacak veri türünü yazıyoruz (int, char, float vs…) daha sonra dizimizin adını yazıyoruz son olarak da dizinin adına bitişik olarak dizinin kaç değer saklayabilmesini istediğimizi yani uzunluğu köşeli parantezler içerisinde belirtiyoruz.

REKLAM

Önemli: Bir dizinin içerisinde sadece tanımlama sırasında belirttiğiniz veri türünden değerleri kullanabilirsiniz.

Önemli: Dizinin ilk elemanı her zaman dizi[0] adresinde bulunur, yani ilk elemana erişmek için dizi[1] yerine dizi[0] kullanmanız gerekecek. Dizinin 40. elemanına ulaşmak isterseniz dizi[39] adresini kullanmanız gerekecek.

Dizilerin kullanımı genellikle döngüler -özellikle for döngüleri- ile olmaktadır, eğer döngüler hakkında yeterince bilgi sahibi değilseniz C programlama dili döngüler isimli konumuzu incelemenizi tavsiye ederiz.

Diziye İlk Değer Atama

Bazı durumlarda başlangıç için dizinin elemanlarını bizim belirlememiz gerekebilir, örneğin bir değişken tanımlarken “int sayi=20;” şeklinde bir başlangıç değeri atayabiliyorduk, aynı işlemi şimdi dizilerde yapacağız.

Eğer bir dizinin tüm elemanlarına başlangıçta bir değer atamak istiyorsanız aşağıda ki yapıyı kullanmanız gerekiyor.

int dizi[5]={10, 20, 30, 40, 50};

Dizimizin boyutunu 5 olarak belirttik ve sırasıyla dizininin elemanlarını 10, 20, 30, 40, 50 olarak tanımladık ancak başlangıçta dizinin tüm elemanlarına değer atıyorsak boyutunu belirtmemiz gerekmez, örneğin;

int dizi[]={10, 20, 30, 40, 50};

Bu dizi de bir üstte ki dizi ile aynı çalışacaktır, başlangıç ta boyut belirtmediğimiz için dizinin boyutu otomatik olarak eklenen eleman sayısı olacaktır, bu örnek de ise otomatik olarak 5 olarak tanımlanacaktır.


Bazı durumlar da dizide ki tüm elemanların hepsini belli bir sayıya eşitlemeniz gerekebilir, örneğin sıfıra. Normal bir şekilde dizi tanımlayıp hiçbir işlem yapmadan bu diziyi ekrana direkt ekrana yazdırırsanız muhtemelen aşağıda ki gibi anlamsız değerler karşınıza çıkabilir;

1
0
4203625
0
3
0
36
0
0
0

Bunun nedeni, bir dizi kullanmak için dizi tanımladığımız da bilgisayarın hafızasında o diziye ayrılan bölümlerde daha önceden yapılmış işlemlere ait değerler kalmış olabilir, yukarıda ki örnekte görebileceğiniz 1, 4203625, 36 değerleri daha eski işlemlerden dolayı hafızanın o bölümünde kalmış değerler, bu yüzden bir dizi tanımladığımızda o dizinin tüm elemanlarını sıfıra eşitlemek bizim için daha kullanışlı ve sorunsuz olacaktır. Bunu yapmak içinse aşağıda ki yolu kullanıyoruz;

int dizi[10]={0};

Eğer bu şekilde bir diziyi süslü parantez içerisinde ki tek bir değere eşitlerseniz, süslü parantez içerisinde ki değer dizinin tüm elemanlarına atanır. Eğer sıfırdan farklı bir sayı atamak isteseydik, sıfır yerine atamak istediğimiz sayıyı yazmamız yeterli olacaktı.


Yalnızca dizinin belirli bir elemanının değerini değiştirmek isterseniz de aşağıda ki kullanımı gerçekleştirmeniz gerekmekte.

#include <stdio.h>
int main(){
	int i;
	int dizi[10];
	dizi[8]=123;
	return 0;
}

Kodda 10 elemanlı bir dizi tanımladık ve dizinin indis değeri 8 olan yani 9. elemanın değerini 123’e eşitledik.

Diziye Eleman Eklemek

Artık dizilerin kullanımına geçebiliriz, örneğin bir öğrencinin 5 dersin sınavlarından aldığı notları bir dizi üzerine kayıt edelim.

#include <stdio.h>
int main(){
	int i;
	int notlar[5];
	for (i=0;i<5;i++){
		printf("%d. Dersin Notunu Giriniz: ",i+1);
		scanf("%d",&notlar[i]);
	}
	return 0;
}

Şimdi de kodda ne yaptığımızı inceleyelim. Öncelikle elimizde 5 tane derse ait sonuçlar olacağı için, “notlar” adında bir dizi tanımlayıp uzunluğunu 5 olarak ayarlıyoruz daha sonra da bir for döngüsü oluşturarak “i” değişkeninin değerini 0’dan başlayıp 5’e gidecek şekilde ayarlıyoruz. Daha sonra döngünün içerisinde printf ile i+1’inci sırada ki -i sıfırdan başladığı için printf içinde i+1 şeklinde kullandık- dersin notunu isteyip, bu notu “notlar” isimli dizimizin “notlar[i]” adresinde sakladık. Örnek çalışma şekli şu şekilde olacaktır.

1. Dersin Notunu Giriniz: 68
2. Dersin Notunu Giriniz: 54
3. Dersin Notunu Giriniz: 26
4. Dersin Notunu Giriniz: 47
5. Dersin Notunu Giriniz: 85

Diziyi Ekrana Yazdırmak

Diziyi ekrana yazdırırken de for döngülerinden yararlanıyoruz, örneğin elemanları daha önceden tanımlanmış 5 elemanlı diziyi ekrana yazdıralım.

#include <stdio.h>
int main(){
	int i;
	int dizi[5]={10, 20, 30, 40, 50};
	for (i=0;i<5;i++){
		printf("dizi[%d] = %d \n",i,dizi[i]);
	}
	return 0;
}

Programımızın kodları yukarıda ki gibidir, 5 elemanlı bir dizi tanımladık ve değerlerini sırasıyla 10, 20, 30, 40, 50 ye eşitledik ve daha sonra for döngüsü kullanarak sırasıyla hepsini ekrana yazdırdık. Programın çıktısı şu şekilde olacaktır;

dizi[0] = 10
dizi[1] = 20
dizi[2] = 30
dizi[3] = 40
dizi[4] = 50

Diziler programlama dillerinde oldukça çok kullanılan yapılardır bu yüzden mantığının anlanması oldukça önemlidir, diziler ile ilgili örneklere buradan ulaşabilirsiniz, özellikle de sıralama ve arama algoritmalarının dizilerde kullanımı oldukça önemlidir, örneklerde çeşitli sıralama ve arama algoritmaları anlatılmıştır. Önümüzde ki konuda C programlama dilinde ki matrislerden -iki boyutlu diziler- bahsedeceğiz.

Yorumlar (2)

  1. iskifogl dedi ki:

    Merhabalar öncelikle yazı dizisi için teşekkürler henüz tam olarak inceleyemedim fakat c++ ile c arasındaki farklar nedir acaba? Bu dönem okulda göreceğim bir konu çünkü c++. Birde c++ veya c kodlarkan kullandığınız editör veya ide nedir acaba? Dev c++ diye bişey duydum ama eclipse daha iyi diye şeylerde duydum. Aydınlatırsanız sevinirim.

    • Burak İşci dedi ki:

      Merhaba, C yapısal bir dildir ancak C++ daha çok nesneye dayalı bir dildir, bu konu hakkında yakında daha detaylı bir yazı paylaşacağım sizin için. Derleyici olarak da ben genelde C kodlarımı yazarken Dev C++ (Hem C hem C++ için kullanılabiliyor) kullanıyorum, bazı durumlarda ise CodeBlocks isimli programı kullanıyorum.