İ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];

Dizi Tanımı İkinci Elemana Deger Atama

vizeNotu[2]=80; // vizeNotu dizesinin 2. elemanına 2 değeri atanmış

Dizi Tanımı İkinci Elemana Deger Atama

int x=46;
 
vizeNotu[x+2]=90; // x değeri 46 vizeNotu dizesinin 48. elemanına 90 atanmış.

Dizi Tanımı 48. elemana Değer Atama

 

vizeNotu[2]=vizeNotu[2]+5;  veya vizeNotu[2]+=5; 

Bellekten Hücre Açma

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.
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ()
  5. {
  6. float kenar[3];
  7. cout<<3 karenin kenarlarini giriniz:;
  8.  
  9. for (int i=0;i<3; i++)
  10. {
  11. cin>>kenar[i];
  12. cout<<i+1<<“. karenin cevresi=<<4*kenar[i]<<endl;
  13. cout<<“Alani=<<kenar[i]*kenar[i]<<endl;
  14. }
  15. return 0;
  16. }

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.
 
 

Olcu Dizisi

float olcu[8]={0};   // sadece ilk elemana atama yapılmış diğer bütün elamanlar sıfır değerini alır

Sıfır Elemanlı Olcu Dizisi

int ornekDizi[]={5,6,3,8};       // eleman sayısı belirtilmemiş, elemanlar atanmıştır, atanan eleman kadar eleman sayısı vardır.

Ornek Dizi

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.

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ()
  5. {
  6. int dizi_a[4]={0,1,2,3};
  7. for(int i=0;i<4; i++) // &dizi_a[i] adresi yazdırdık.
  8. cout<<dizi_a[i]<<“. elemani adresi:<<&dizi_a[i]<<endl;
  9. return 0;
  10. }
Karakter Dizisi

İçerinde karakter barındıran dizilerdir.

Kullanımı:

char a[7]={‘f’,’e’,’n,1,0,2,’\0}; // karakter tanımlaması
  1. #include <iostream>
  2. using namespace std;
  3. int main ()
  4. {
  5. char a[7]={97,’e’,’n’,’1′,’0′,’2};
  6. for(int i=0;i<6; i++)
  7. cout<<“a dizisi “<<i<<“. elemani :<<a[i]<<endl;
  8. return 0;
  9. }

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.

  1. #include <iostream>
  2. using namespace std;
  3. int main ()
  4. {
  5. char a[7]={97,’e’,’n’,’1′,’0′,’2};
  6. for(int i=0;i<7; i++)
  7. cout<<“a dizisi “<<i<<“. elemani :<<a[i]<<endl;
  8. int b[7]={97,’e’,’n’,’1′,’0′,’2};
  9. for(int i=0;i<6; i++)
  10. cout<<“b dizisi “<<i<<“. elemani :<<b[i]<<endl;
  11. return 0;
  12. }

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.

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. float topla (float[]);
  5.  
  6. int main ()
  7. {
  8. float reelDizi[4]={3.2,5.3,8.2,1.7}; // 4 elemanlı reel dizi
  9. cout<<“Dizi elemanlari”;
  10.  
  11. for (int i=0;i<4;i++) // Dizi ekrana yazdırılır
  12. cout<<reelDizi[i]<<” “;
  13.  
  14. cout<<endl; // Dizinin toplamı ekrana yazdırılır
  15. cout<<“Dizi elemanlarinin toplami=<<topla(reelDizi)<<endl;
  16. return 0;
  17. }
  18.  
  19. float topla (float par[]) //Dizi parametrelerin toplamını bulur
  20. {
  21. float toplam=0.0;
  22. for (int i=0;i<4;i++)
  23. toplam+=par[i];
  24. return toplam;
  25. }

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

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void fark (int [],int);
  5.  
  6. int main ()
  7. {
  8. int diz[3]={3,5,7};
  9. cout<<“Fonksiyon cagirmadan once dizi elemanlari:;
  10.  
  11. for( int i=0;i<3;i++)
  12. cout<<diz[i]<<” “;
  13.  
  14. cout<<endl;
  15. fark(diz,3);
  16.  
  17. cout<<“Fonksiyon cagirdiktan sonra dizi elemanlari:;
  18.  
  19. for (int i=0;i<3; i++)
  20. cout<<diz[i]<<” “;
  21.  
  22. cout<<endl;
  23. return 0;
  24. }
  25. void fark(int b[],int k)
  26. {
  27. for(int i=0; i<k ;i++)
  28. b[i]++;
  29. }

Fonksiyona parametre olarak yollanmayan dizide fonksiyonda olan değişiklikler yansımamıştır.

Diz Dizisi

Kimler Neler Demiş?

  Abone ol  
Bildir