Monday, May 21, 2012

Diziler


Diziler belirle sayıda veriyi içinde barından değişken listesidir. Program içersinde dizi, değişken türü  dizinin_adı[dizinin boyutu] şeklinde tanımlanır.
dizi içersindeki verilerin indexi(sıra konumu) 0 dan başlar. yani ilk sıradaki dizinin indexi 0 dır. int türünden deneme adında 10 eleman içeren bir dizi
tanımlamamız gerekirse, int deneme[9] şeklinde tanımlamalıyız. index numarası 0 dan başlıyacağı için deneme[9] içersinde 10 adet veri barındırır.
Dizi elamanlarını belirtmek için veriler {} süslü parentezin içine yazılır.
Dizi kullanımda 2 önemli özellik vardır bunlar;
 1. Dizi elemanları bellekte ardışıl  olarak bulunurlar
 2. Dizi elemanları aynı türden nesnelerdir.

Dizi elemanlarına ilk değer verme işleminde dizi uzunluğu belirtilmeyebilir, bu durumda derleyici dizi uzunluğunu verilen ilk değerleri sayarak kendi hesaplar
ve dizinin o uzunlukta açıldığını kabul eder.

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

Dizi elemanlarına index operatörüyle [] ulaşılabilir.

int sayilar[5]= {10,20,30,40,50}   5 adet eleman içeren sayilar adlı dizinin 0. indexte bulunan elemanı 10, 1.indexte bulunan elamanı 20, 4.indexte ki ise 50dir.
sayilar[0] deyimi 10 değerini ifade eder.

1.örnek; 5elamanlı bir sayı dizisinin index numarasına göre değerini yazan program.

#include <iostream>
#include <conio.h>


using namespace std;

int main() {
   
    int sayilar[5]={10,20,30,40,50};  //dizinin elaman sayısı 5olduğu için {]kısmına en fazla 5 adet eleman 
                                                         yazılabilinir.
   
    cout<< sayilar[0] << endl;  //10 yazar.
    cout<< sayilar[1] << endl;  //20 yazar.
    cout<< sayilar[2] << endl;  //30 yazar.
    cout<< sayilar[3] << endl;  //40 yazar.
    cout<< sayilar[4] << endl;  //50 yazar.
    cout<< sayilar[5];          // 5.index boş olduğu için bellekten herhangi bir sayı atar ve atadığı sayıyı yazar.
    getch();
}


2.örnek; klavyeden 5tane değer girilen 5 değeri diziye atan ve bu dizideki değerlerin ortalamasını alan program.

#include <iostream>
#include <conio.h>


using namespace std;
int main() {
    int dizi[10];
    int i;
    float toplam=0;
    float ortalama=0;
    for (i=0; i<5; i++)   {
    cout<< i+1 << "degeri giriniz";   //1-5e kadar 5 adet elman girdirdik ve bunları diziye attık.
    cin>>dizi[i];
        toplam += dizi [i];   // dizideki elamanları başta 0 olan toplam değeri ile topladık.
        }
        ortalama = toplam /5;  // dizideki elemanların toplamı olan toplam değerini dizinin eleman sayısına 
                                             bölerek ortalamayı elde ettik.
        cout<< "ortalama: " << ortalama;
        getch();
        return 0;  
        }

3.örnek; 10elamanlı bir sayı dizisinin en küçük elemanını ve index numarasını bulan program.

#include <iostream>
#include <conio.h>


using namespace std;

  int main() {
  int dizi[10] = {51, 44, 88, 3, 44, 78, 94, 61, 9, 210};

  int min=0, k,indis;
  min = dizi[0];        //dizinin ilk elamanını en kucuk olarak varsaydık.

  for (k = 0; k < 10; ++k) {
   
      if ( dizi[k]<min ){  //0 ve daha soran gelen indexteki değer min değerinden küçük ise ;
          min = dizi[k];   //yeni min değerine onu atadık.
          indis = k;       // en küçük olan index in index numarasınıda index değişkenine atadık.
                     }
          }
   cout<<"dizideki en kucuk eleman = " << min <<endl;
   cout<<"indisi = "<< indis << endl;

   getch();
   return 0;
   }        

4.örnek; sınıf ortalamasını bulan program.

#include <iostream>
#include <conio.h>
#define mevcut 55    // #define ile tanımlanan mevcut değerine 55 i atadık. mevcut yazdığımızda 55 değeri 
                                    baz alınacak. böylece ilerde mevcut değişikliği olursa tüm 55 değerlerini tek tek  
                                    değiştirmemiz yerine baştaki mevcudu değiştirmemiz yeterli olacak.
using namespace std;

int main(){
   
   int dizi[mevcut], k, toplam=0;  // mevcut değeri 55 ti 55elemanlı bir dizi tanımladık
   float ortalama=0;               // ortalama kusuratlı olabileceği için ortalama yı float türünden tanımladık.
 
   for(k=0; k<mevcut; k++){
         
   cout<<k+1<<".ogrencinin notu= ";//index  0dan başladiği için ilk 1.öğrenci olması gerektiğinden k+1
   cin>>dizi[k];                      //klaveyeden tek tek öğrencilerin notlarını girdirdik ve bunları diziye attık.
   toplam = toplam + dizi[k];     //dizideki tüm elamanları topladık ve toplam değerine atadık.
   ortalama = toplam / (k+1);    //toplamı dizideki eleman sayısına böldük.1.öğrenciden başlattığımız için k+1 
         }
   cout<< "sinif ortalamasi= " << ortalama << "endl";
   getch();
   return 0;
               }
 
5.örnek;  10 elemanlı bir sayı dizisine 1-10arası puan girilen ve hangi puandan kaç adet bulunduğunu gösteren program.

#include <iostream>
#include <conio.h>
using namespace std;

int main() {
    int i, dizi[10], Puansayisinitut[11];   //klavyeden girilen 10adet puan ı saklayacak 10 elamanlı bir dizi 
                                                          tanımladık ve girilen puan değerinden dizide kaç adet bulunduğunu 
                                                          tutacak Puansayisinitut adında 11elemanlı bir dizi tanımladık(puanlama 
                                                          0-10 olacağı için 11elemanlı)
   
    for(i=0; i<=10; i++){  
    Puansayisinitut[i]=0;   //Puansayisinitut dizisindeki elamanları ilk başta 0ladık. ilerde her gelen puan değeri
                                       0dan 1arttırılacak.
         }
       
    for(i=0; i<10; i++) {
    cout<< i+1 <<". puanı giriniz(0-10 arasi hesaplanacak); ";  // klavyeden 10adet puan girdirdik.(0 ve 10 
                                                                                              arası puanlar hesaplanacak)
    cin>> dizi[i];
   
    Puansayisinitut[ dizi[i]  ]++;  // bu kısımda girilen puanın adet sayisi arttırılıyor. eğer dizi dizisinin 0. elamanı    
                                                5 ise Puansayisinitut dizisindeki 5. index teki 0 değeri 1 artırılacak.( başta 
                                                değerleri 0 lamıştık.) dizi dizisinin 1. elemanıda 5 ise  1 olan puansayisitut 
                                                dizisinin 5. indexi 2 ye çıkacak. yani puansayisitut dizisindeki 5. index 
                                                5değerinden kaç adet olduğunu gösterecek.
    }

 for(i=0; i<=10; i++){
  cout<< i<< "'den" <<Puansayisinitut[i] << "adet var" << endl;  //en sonunda 0dan 10 a kadar hangi  puandan kaç adet olduğunu gösterecek. hiç 0 puan 0indexten girilmediyse 0ncı index 0 olarak kalmış olacak. 5puandan 3kere girilmisse 5index in değeri 3 olacak ve 5'den  3 adet var diyecek.
             }
getch();
return 0;
}
}


6.örnek; 10 elamanlı bir sayı dizisinin elamanlarını büyükten küçüğe sıralayan program.

#include <iostream>
#include <conio.h>
using namespace std;

int main() {
   
    int dizi[10]={0,52,31,24,2,45,78,14,65,99};
    int buyuk, i, k;
   
    for(i=0; i<10; i++){ //for döngümüz 0 dan başlayacak 1.for 0 değerinde iken; içindeki for döngüsü 
                                     çalışacak.
    for(k=0; k<10; k++){ // içindeki for döngüsü ilk for değeri 0da iken 10 kere dönecek döngüler
                                          tamamlandığında ikinci for toplam 100kere dönmüş olacak.
   
    if(dizi[i] > dizi[k]){  // birinci for değerindeki i. indexteki sayi, ikinci for daki k. indexteki değerden büyük 
                                   olduğunda if deyimine girecek.
             
     buyuk= dizi[i];   //öncelikli olarak büyük olan dizi[i] değerini elde tutmak için buyuk değerine atadık. 
                              buyuk değeri dizi[i] nin değeriyle aynı oldu.
     dizi[i]= dizi[k]; //şimdi büyük olan dizi[i] değerini küçük olan dizi[k] değerine eşitledik, şuan elimizdeki 
                              dizi[k] ve dizi[i] değeri eşitlendi.
     dizi[k] = buyuk;  //küçük olan dizi [k] değeri aynı zamanda dizi[i] ye atanmıştı . bu kısımda dizi[k] değeri 
                               dizi[i] nin ilk değeri olan buyuk'le eşitlendi.
     }                

     } }
     for(i=0; i<10; i++) {
     cout<< dizi[i] << endl;
     }
     getch();
     return 0;
     }

İç içe For döngüsü;

iç içe for döngüsünde 0.indexteki eleman ilk for da diğer tüm elemanlar ile karşılaştırılıyor. büyük olan değer öncelikle elde
   tutulması için buyuk'e atanıyor. ardından buyuk değer kendinden küçük olan değerin index ine atanıyor. küçük olanın indexi yani önde kalacak index ede
buyuk değeri atanıyor böylece buyuk değer başa geçmiş oluyor.
mesela dizi elemanlarımız 10 20 30 olsun. ilk for da 0 index ikinci for sayesinde 0,1 ve 2. index ile karşılaştırılıyor. if durumunu sağlayan durum
mevcut değil. if döngüsüne girilmiyor. ardından ilk for daki 1.index e bakılıyor (20değeri) 2.for sayesinde 0. indexteki 10 ile karşılaştırılıyor ve
if döngüsüne giriliyor. şimdi 20 değeri buyuk değerine atanıyor. buyuk 20 oldu. ardından dizi[i] yani dizi[1] =20 ve dizi[k] yani dizi[0]=10 ile
eşitleniyor dizi[1] 10 oldu fakat dizi[0] da 10 oldu ardından dizi[k]= 10 değerine buyuk (20)atanıyor ve dizi[0]=20 dizi[1]=10 dizi[2]=30oluyor.
döngüler tamamlandığında 0,1,2 indexler 30 20 10 oluyor, elamanlar büyükten küçüğe sıralanıyor.

No comments:

Post a Comment