C++ Dizilier
Dizilere Giris
Diziler, "indisleri olan degiskenler" olarak adlandirilirlar. Diger
bir deyisle, birden fazla tek düze veri tipi içeren degiskenlerdir.
Diziler birbirine bitisik bellek gözleri kullanilarak olusturulurlar.
Bunu biraz daha açarsak: farz edelim ki elimizde üç tane kutu var,
birinde yesil kalemler, birinde kirmizi kalemler ve birinde de mavi
kalemler olsun. Bu kutucuklari 1,2,3 diye adlandirdigimizi düsünelim.
Biz diziler ile numarasini bildigimiz kutucugun içindeki malzemeyi
alabilecegiz. Daha dogrusu numarasini vermis oldugumuz kutunun
içindeki bilgiyi bilgisayar okuyacaktir.
Not: For döngüsü dizi elemanlarina ulasmak için en çok kullanilan
yöntemdir.
Dizilerin indislerden olustugunu söylemistik. Diger yüksek seviyeli
dillerle karsilastirildiginda arasindaki fark ilk elemanin indisi
daima sifir (0) olmasidir.
for(int i=0; i<boyut; i++)
Burada dikkat etmek istedigimiz "int i=0" kismidir. Görüldügü gibi
indisin ilk aldigi degeri sifir (0)`dan baslatiyoruz. Bu kismi
unutmayiniz. Genellikle yapilan en büyük hatalardan biridir.
Bir dizi tanimlayicisi -adi-, dizinin ilk elemaninin adresini
tanimlayan adrestir. Bunu söyle izah edelim; elimizde bir dizi var
ve ilk elemani karakter ise biz "char DiziAdi[boyut]" seklinde
tanimlariz. Tam sayi ise "int DiziAdi[boyut]" seklinde olur.
Dikkat edilmesi gereken diger bir konu da: dizi adi hiçbir zaman (=)
isaretinin solunda bulunmaz. Bu yukarida söylediklerimi anlamamis
olabilirsiniz. Onun için alt kismi okuyup bir daha tekrar etmenizi
tavsiye ederim.
Dizilerin Tanimlanmasi ve Deger Atama
Int a[10];
Seklinde bir diziyi tanimlayabiliriz. Bunu daha genel bir kaliba
dökersek.
<tip> <dizi adi> [<boyut>]; halini alir. Birde boyutlarinin
arttirilmis halini verelim.
<tip> <dizi adi> [<boyut1>][<boyut2>][<boyut3>]....[<boyutn>]; n
boyutlu dizi:).
<tip>: Yukarida söylemis oldugumuz "int DiziAdi[boyut]" olayidir.
<dizi adi>: Kurallara uygun herhangi bir isim olabilir. Genellikle
dizilerinizin amacina uygun isimler kullaniniz.
[<boyut>]: Dizinin kaç eleman içerdigini gösterir. 5 elemanli ise
[5] seklinde yazariz.
Basta " int a[10]; " almistik. Simdi bunu degisik bir formda yazalim
const int boyut=10;
Int a[boyut];
Önce boyut adinda bir sabiti tanimladik ve deger atadik sonrada bunu
dizi içine çagirdik.
Dizilere Deger atama:
Bu yöntemleri madde madde verelim,
1. Duragan ve global (erisilen) dizilerde yaratildiklari anda içerik
otomatik olarak belirlenebilir. Programin taniminda erisilen tüm
degiskenler, otomatik olarak sifir yapilir.
2. Duyuru sirasinda sabit degerler belirtilerek belirlenebilir.
3. Programin çalismasi sirasinda indisler kullanilarak her elemana
tek tek veri kopyalanabilir.
1. maddenin örnegi
#include <iostream.h>
const int boyut=5;
int GlobalDizi[boyut];
main() {
//"satatic" yerel degiskende tanimlanmasina ragmen tüm program
boyunca
//geçerlidir. Ancak sadece tanimlandigi fonksiyon tarafindan
erisilebilir.
static int DuraganDizi[boyut];
for(int i=0; i<boyut;i++)
cout<<GlobalDizi[i];
return 0;
}
Programin çiktisinada göreceginiz gibi, dizi aratilirken indislere
ait eleman bloklari temizlenmis ve sifir degerlerini almistir.
Burada bir konuya daha dikkat çekmek istiyorum. Çok yaptigimiz
hatalardan biri olarak da, dizi duyurusunu yaparken belirttigimiz
degerden fazla sayida deger girmemizdir.
int DiziAdi[5]={1,8,9,5,4,6};Görmüs oldugunuz gibi bes tane dedik
ama alti tane yazdik. !!! hata !!!. Bu tür hatalar için elimizde
kullanabilecegimiz bir kalip var.
char DiskOkunmuyor[ ] = "Disk okunmuyor";
char DosyaYok[ ]= "Dosya Yok";
Bunu yaptigimizda derleyici, tüm degerleri içerebilecek en büyük
diziyi olusturur.
|