İlkel Diziler
İlkel Diziler
- Tek bir değer saklayabilen değişkenlere temel değişken (elemantary variable) adı verilir.
- Birden fazla değer tutabilen değişkenlere ise bileşik değişken (compound variable) adı verilir.
- Örneğin, bir sınıftaki 50 öğrencinin vize notlarını saklamamız için içinde 50 tamsayı değeri saklayabilen bir değişkene ihtiyacımız olacaktır. Bu gibi durumlarda dizi kullanmamız gerekir.
Dizi Tanımlama
Dizi(array), belirli bir boyutta tanımlanmış,içinde aynı tipte veriler barındıran,ardı ardına sıralı bellek hücrelerinden oluşan bir veri yapısıdır.
Kullanımı:
VeriTipi diziİsmi[elelmanSayisi]; int vizeNotu[50];
vizeNotu[2]=80; // vizeNotu dizesinin 2. elemanına 2 değeri atanmış
int x=46; vizeNotu[x+2]=90; // x değeri 46 vizeNotu dizesinin 48. elemanına 90 atanmış.
vizeNotu[2]=vizeNotu[2]+5; veya vizeNotu[2]+=5;
Bir dizi için bellekte eleman sayısı kadar hücre açılır ve bu elemanlara 0’dan eleman sayısı “‘e kadar olan indekslerle ulaşabiliriz.
for (int i=0; i<50; i++) cin>>vizeNotu[i]; // vizeNotu dizesinin 50 tane elemanını tek tek okur.
#include <iostream> using namespace std; int main () { float kenar[3]; cout<<“3 karenin kenarlarini giriniz:” ; for (int i=0;i<3; i++) { cin>>kenar[i]; cout<<i+1<<“. karenin cevresi=”<<4*kenar[i]<<endl; cout<<“Alani= “<<kenar[i]*kenar[i]<<endl; } return 0; }
Dizi Elemanlarına İlk Atama
Bir dizinin elemanlarına dizi tanımı sırasında ilk atama yapabiliriz.
Kullanımı:
veriTip diziİsmi[elemanSayısı]={değer1,değer2,….}; int sinif[3]={6,7,8}; // sinif dizisinin 3 elemanına atama yapılmıştır.
float olcu[8]={ 2.4, 1.3, 4.6}; // 8 elemanı olan bir dizinin ilk 3 elemanına atama yapılmış atama yapılmayan değerler 0 olur.
float olcu[8]={0}; // sadece ilk elemana atama yapılmış diğer bütün elamanlar sıfır değerini alır
int ornekDizi[]={5,6,3,8}; // eleman sayısı belirtilmemiş, elemanlar atanmıştır, atanan eleman kadar eleman sayısı vardır.
Dizinin Adresini Gösterme
Daha önce fonksiyonlarda referans değişkeni bahsettiğimiz referans operatörü (&) ile değişkenin adresine erişiyorduk.
Dizlerin tüm elemanlarının adresine erişmek mümkün aşağıda örneği gösterilmiştir.
#include <iostream> using namespace std; int main () { int dizi_a[4]={0,1,2,3}; for(int i=0;i<4; i++) // &dizi_a[i] adresi yazdırdık. cout<<dizi_a[i]<<“. elemani adresi: “<<&dizi_a[i]<<endl; return 0; }
Karakter Dizisi
İçerinde karakter barındıran dizilerdir.
Kullanımı:
char a[7]={‘f’,’e’,’n,’1′,’0′,’2′,’\0′}; // karakter tanımlaması
#include <iostream> using namespace std; int main () { char a[7]={97,’e’,’n’,’1′,’0′,’2′}; for(int i=0;i<6; i++) cout<<“a dizisi “<<i<<“. elemani : “<<a[i]<<endl; return 0; }
yukarıda programda karakter dizisinin içinde ilk karakteri sayı girilmiştir. Karakter tanımlaması yaparken sayı girilmesi durumunda o sayının ascii tablosundaki karşılık geldiği karakter ekrana yazdırılır.(a=97 gibi). Aşağıdaki örnekte daha net anlaşılacaktır.
#include <iostream> using namespace std; int main () { char a[7]={97,’e’,’n’,’1′,’0′,’2′}; for(int i=0;i<7; i++) cout<<“a dizisi “<<i<<“. elemani : “<<a[i]<<endl; int b[7]={97,’e’,’n’,’1′,’0′,’2′}; for(int i=0;i<6; i++) cout<<“b dizisi “<<i<<“. elemani : “<<b[i]<<endl; return 0; }
Sayı dizisi ile karakter dizisinde tanımlamaların ve ekrana yazılanlar burda daha net anlaşılmıştır. Sayı dizisi veya tek (int x = ‘c’ gibi) değer tanımlamalarında değişken tanımlaması ne ise ekrana o veya asii karşılığı yazılır (int x=’c’ de ekrana 99 yazar çünkü değişken int tanımlanmış) Tam tersinde de sayının karakter karşılığı yazılır( char x=99’da ekrana c yazılır).
Dizi Elemanını Fonksiyona Parametre Olarak Gönderme
Bir dizi elemanını aynı bir değişkeni yollar gibi bir fonksiyona değer veya referans parametresi olarak yollayabiliriz.
void degistir (int x) { x+5; } int main() { int z[4]={3,5,8,11}; degistir(z[0]); ...... }
Diziyi Fonksiyona Parametre Olarak Gönderme
Dizinin tümünü de bir fonksiyona parametre olarak yollayabiliriz.
#include <iostream> using namespace std; float topla (float[]); int main () { float reelDizi[4]={3.2,5.3,8.2,1.7}; // 4 elemanlı reel dizi cout<<“Dizi elemanlari”; for (int i=0;i<4;i++) // Dizi ekrana yazdırılır cout<<reelDizi[i]<<” “; cout<<endl; // Dizinin toplamı ekrana yazdırılır cout<<“Dizi elemanlarinin toplami= “<<topla(reelDizi)<<endl; return 0; } float topla (float par[]) //Dizi parametrelerin toplamını bulur { float toplam=0.0; for (int i=0;i<4;i++) toplam+=par[i]; return toplam; }
Bir dizi fonksiyona parametre olarak yollandığında fonksiyon prototipinde veya fonksiyon başlığında dizinin eleman sayısını belirtmeye gerek yoktur.
float topla( float[] ); //fonksiyon prototipi float topal (float par[] ) //fonksiyon başlığı
Fonksiyon prototipi ve başlığını aşağıda görüldüğü gibi dizinin eleman sayısını belirterek de yazabilirdik.
float topla ( float [4] ); // fonksiyon prototipi float topla ( float par[4] ) // fonksiyon başlığı
void yazdir (int d[], int boyut) { cout<<"Dizi elemanlari: "; for(int i=0;i<boyut; i++) cout<<d[i]; cout<<endl; } ........ int a[10], b[20]; ....... yazdir(a,10); yazdir(b,250);
Parametre olarak yollanan dizi otomatik olarak referans parametresi olarak davranır ve fonksiyonda yapılan tüm değişiklikler diziye yazar
#include <iostream> using namespace std; void fark (int [],int); int main () { int diz[3]={3,5,7}; cout<<“Fonksiyon cagirmadan once dizi elemanlari: “; for( int i=0;i<3;i++) cout<<diz[i]<<” “; cout<<endl; fark(diz,3); cout<<“Fonksiyon cagirdiktan sonra dizi elemanlari: “; for (int i=0;i<3; i++) cout<<diz[i]<<” “; cout<<endl; return 0; } void fark(int b[],int k) { for(int i=0; i<k ;i++) b[i]++; }
Fonksiyona parametre olarak yollanmayan dizide fonksiyonda olan değişiklikler yansımamıştır.