Dizilerin incelenmesi


Merhaba gençler sizlerle bu defa dizileri kabaca inceleyeceğiz. Bu makalemizde sizlerle:

  1. Dizi nedir ve nasıl tanımlanır tanımlanır?
  2. İlk değer ataması yapılan ve yapılmayan  diziler nasıl tanımlanır?
  3. Eleman sayısı belirli ve belirli olmayan diziler nasıl tanımlanır?
  4. Temel dizi fonksiyonları; dizinin eleman sayısını öğrenme, diziye eleman ekleme, dizilerde sıralama vb.

konularını derslerde kullandığımız kadarı ile inceleyeceğiz. Diziler sizlere kodlama yaparken büyük oranda kolaylık sağlayacak bir konudur bu nedenle üzerine biraz düşmneniz faydalı olacaktır. Kodlardan önce ve sonra yeterince açıklama yazdığım için burada fazladan bir açıklama yapma gereği duymuyorum. Yardımcı olması dileğiyle, hepinize mutlu kodlama günleri dilerim.

<script language="javascript" type="text/javascript">
//A. DIZI DEGISKENLERIN TANIMLANMASI VE KULLANILMASI
//Neden dizi degisken tanimlamasi yapariz?
//Cunku islerimizi kolaylastiriyor ve verileri daha yonetilebilir hale getiriyor...
//Misal:
var sayi1=10, sayi2=20,sayi3=30; //seklinde 100 adet degiskene ihtiyaciniz oldugunu dusunun
//bunlari tanimlasaniz bile bunlara veri aktarmak ve onlardaki verileri okumak icin bir suru
//program satiri yazmaniz gerektirecek ki bu buyuk bir eziyet ve zaman kaybi olacaktir. Oysa bunu
//asagidaki yollardan birini kullanarak basitce cozebiliriz.

//1.ILK DEGER ATAYARAK DIZI TANIMLAMAK
var sayilar=[10,20,30,40,50]; //bunu tercih edelim
//ya da 2. yontem olarak
var sayilar2= new Array(20,30,40,50,60); //kullanilabilir.

//burada saklanan her bir veriye erismek icin sayilar degiskenine bir indeks verilir.
//ilk elemanin indeksi 0' dır. 10=>0, 20=>1, 30=>2,.....50=>(dizinin eleman sayisi-1)' dir

//1-a simdi bu degiskenin degerlerini okuyalim
console.log("0 inci eleman = " + sayilar[0]);
console.log("1 inci eleman = " + sayilar[1]);
console.log("2 inci eleman = " + sayilar[2]);
console.log("3 inci eleman = " + sayilar[3]);
console.log("4 inci eleman = " + sayilar[4]);
//1.b ya da bu degiskenin degerlerini for() dongusu ile okuyalim
for(let i=0;i<5;i++)console.log(i + " inci eleman = " + sayilar[i]);
//1.c simdi ise bu dizi degiskenin elemanlarini rasgele sayilar ile dolduralim
for(let i=0;i<5;i++) sayilar[i]=Math.round(Math.random()*100);
console.log("sayilar[] dizinin yeni elemanlarini listeliyoruz");
for(let i=0;i<5;i++)console.log(i + " inci eleman = " + sayilar[i]);
//1.d diziAdi.length() ile bir dizinin toplam eleman sayisini ogrenebiliriz. Bu durumda
console.log("sayilar[] dizisinin eleman sayisi = " +  sayilar.length + "' dir." );
//1.e diziAdi.length ile bir dizinin eleman sayisi dinamik olarak degisse bile onları okuyup
//onlara yeni degerler atamak icin:
for(let i=0;i<sayilar.length;i++)console.log("sayilar[" + i + "]="  + sayilar[i]);

//DİKKAT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
//JavaScript de diziler sayilarla indekslenir, daha once PHP vb. diller kullanan arkadaşlar
//icin bu biraz dikkat gerektirir. Asagidaki ornekte verilenler birer indeks olamazlar.
var otomobil=[];
otomobil["marka"]="Mazda";
otomobil["model"]="RX8";
otomobil["yil"]="2010";
console.log(otomobil.length); //bize 0 verecektir.
//UYARI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//JavaScript de diziler sayi indeksi nesneler(objects) ise text/metin indeks kullanirlar.
//aslinda diziler sayi indeksi kullanan ozel birer nesnedirler(object) dersek yerinde olur

//2.ELEMAN SAYISI BELIRLI OLMAYAN BOS DIZILER TANIMLAMAK VE BUNLARA DEGER ATAMAK
//2.1 yontem
var meyveler=[]; //bunu tercih edelim
//2.2 yontem
var meyveler2=new Array();
console.log("meryveler[] dizisinin eleman sayisi = " + meyveler.length);
//2.3 simdi bu meyveler dizisine indeks vererek eleman ekleyelim
meyveler[0]="elma";meyveler[1]="armut";meyveler[2]="muz";meyveler[3]="karpuz";
console.log("meryveler[] dizisinin eleman sayisi = " + meyveler.length);
//ya da push metodu ile eleman ekleyebiliriz
meyveler.push("kiraz");
console.log("meyveler[] dizisinin son elemani=" + meyveler[meyveler.length-1]);
//veya indeks vererek son eleman ekleyebiliriz.
meyveler[meyveler.length]="çilek";
console.log("meyveler[] dizisinin son elemani=" + meyveler[meyveler.length-1]);

//3.ELEMAN SAYISI BELIRLI ANCAK DEGER ATANMAMIS DIZILER TANIMLAMAK
var sebzeler= new Array(5);
console.log("sebzeler[] dizisinin eleman sayisi= " + sebzeler.length);
console.log("sebzeler dizisinin ilk elemanı= " + sebzeler[0]); //undefined olacaktir cunku deger atamadik
console.log("sebzeler dizisinin son elemanı= " + sebzeler[sebzeler.length-1]);//undefined olacaktir cunku deger atamadik
//4.DIZILERDE SIRALAMA YAPMAK (diziAdi.sort();)
var colors=["kirmizi","mavi","sari","yeşil","beyaz","siyah"];
for(let i=0;i<colors.length;i++)console.log("colors[" + i + "]=" + colors[i]);
colors.sort();
console.log("A-Z' ye siralanmis colors[] dizisinin elemanları")
for(let i=0;i<colors.length;i++)console.log("colors[" + i + "]=" + colors[i]);
//4.DIZILERDE DIZILIMI TERSINE CEVIRMEK (diziAdi.reverse();)
colors.reverse();
console.log("Dizilimi tersine cevrilmis colors[] dizisinin elemanlari")
for(let i=0;i<colors.length;i++)console.log("colors[" + i + "]=" + colors[i]);  
//5. DİZİLERDE NUMERIC SIRALAMA YAPMAK
console.log("Numeric/Sayisal siralama");
var loto=[];
for(let i=0;i<6;i++)loto[i]=Math.round(Math.random()*49+1);
for(let i=0;i<6;i++)console.log("loto[" + i + "]=" +  loto[i]);
//siralama icin sort icerisine kucuk bir fonksiyon yaziyoruz 
// function(a-b){return (a-b);}  bu fonksiyon
//cikartma islemi yapiyor bu islem pozitif ise b sıralamada daha once 
//negatif ise a siralamada daha once listelenecektir.
//Sayet sonuc 0 ise sayilar esit demektir ve islem yapilmaz.
console.log("Kucukten buyuge siralanmis dizi elemanlari");
loto.sort(function(a,b){return(a-b);});
for(let i=0;i<6;i++)console.log("loto[" + i + "]=" +  loto[i]);
//basit bir numara yapalim fonksiyonumuzda return(b-a) yazalim.
console.log("Buyukten kucuge siralanmis dizi elemanlari");
loto.sort(function(a,b){return(b-a);});
for(let i=0;i<6;i++)console.log("loto[" + i + "]=" +  loto[i]);    
//OKUYUCUNUN DİKKATİNE!
//SIRALAMA ISLEMLERI BASLI BASINA BIRER ALGORITMA GELISTIRILMESI
//GEREKEN VE GELISTIRILMIS KONULARDIR. VERILERIN BOZULMADAN EN KISA ZAMANDA SIRALANMALARI 
//TEMEL PROBLEMDIR. MERAKLISI OLAN ARKDASLARIM
//1. QUICKSORT
//2. MERGESORT
//3. BUBLESORT
//4. FISHER YATES SHUFFLE 
//5. BINARY SEARCH vb. 
//onlarca algoritmayi inceleyebilirler sonucta burasi bir lise ve arz-talep dengesi bunlari
//kaldirmiyor. Bundan sonrasini sizlerin yuksek ogretim calismalariniza birakiyorum :))

//loto[] dizini rasgele sayilarla dolduralim ve elemanlarini yazdiralim
for(let i=0;i<6;i++)loto[i]=Math.round(Math.random()*49+1);
console.log("Siralama oncesi loto[] dizisinin elemanlari:");
for(let i=0;i<6;i++)console.log("loto[" + i + "]=" +  loto[i]);
//simdi ise BUBLESORT gore siralayalim
let siralandimi=false;
let gecici=0;
do{
    siralandimi=true;
    for(let i=0; i<loto.length-1;i++){
        //if satirini bir de asagidaki gibi deneyin
        //if(loto[i]>loto[i+1]){
        if(loto[i]>loto[i+1]){
            gecici=loto[i];
            loto[i]=loto[i+1];
            loto[i+1]=gecici;
            siralandimi=false;
        }
    }
}while(!siralandimi);
console.log("Siralama sonrasi loto[] dizisinin elemanlari:");
for(let i=0;i<6;i++)console.log("loto[" + i + "]=" +  loto[i]);
//6.BIR DEGISKENIN DIZI DEGISKEN OLUP OLMADIGINI ANLAMAK
var gezegenler=[];
var yildizlar="güneş";
console.log("gezegenler[] bir dizi midir? " + Array.isArray(gezegenler));
console.log("yildizlar bir dizi midir? " + Array.isArray(yildizlar));
//ya da 
console.log(typeof(yildizlar));
console.log(typeof(gezegenler)); //sonucu cok ilginc bulacaksiniz uyarida belirttigim olay budur iste...
</script>