7. DİZİLER Bir dizi, aynı tipteki elemanların yan yana sıralanışı ile elde edilen bir bilgi kümesidir. Matematikte kullanılan doğal sayılar (1,2,3,..), reel sayılar aslında birer dizidir. Ayrıca yılın ayları (Ocak, Şubat, Mart, …), haftanın günleri de birer dizidir. Şeklinde tanımlanan bir X vektörü tek boyutlu bir dizi,
Şeklinde tanımlanan bir A matrisi iki boyutlu bir dizidir.
Pascalda Dizi Kullanımı Hangi programlama dilini kullanıyor olursanız olun değişken tanımlamanın mantığı aynıdır. Saklanacak bilginin tipine göre bir tip seçilir buna bir isim verilir ve hafızada bu değişken için bellek ayrılır. Her değişken için durum aynıdır. Pascalda bu işlemi Var bloğunda yapıyoruz. Peki aynı özelliklere sahip birden fazla değişkene ihtiyaç duyarsak ne olacak. Mesela bir öğretmen düşünün. Değişik sayılarda öğrencisi olan sınıflara girsin ve bu öğrencilerin notlarını bilgisayarda tutmaya çalışsın. Eğer dizi değişkenleri kullanmayı bilmiyorsa en kalabalık sınıfındaki öğrenci sayısı kadar değişken tanımlayacak sonra da her öğrencinin notunu kendi değişkenine ayrı ayrı atamak zorunda kalacaktır. Oysa bunu halletmenin daha kolay bir yolu var. Dizileri kullanmak. Dizilerin en önemli özelliği aynı tipteki ve birbiri ile alakalı verileri toplu olarak tanımlamaya yaramasıdır. Bu durumda örneğimizdeki öğretmen en kalabalık sınıfındaki öğrenci sayısı kadar elemanı olan bir tek dizi değişkeni tanımlar ve bilgileri bir döngü içerisinde indis kullanarak dizinin uygun yerine yerleştirir. Bu iki durumu bir tablo içinde gösterelim.
Artık dizi kullanmanın avantajlarını biliyoruz Artık dizi kullanmanın avantajlarını biliyoruz. Bize aynı türden ve birbiri ile ilişkili bilgilere kolay erişmemizi sağlıyor. İsterseniz artık bir dizi tanımının nasıl yapıldığına bakabiliriz. Dizileri VAR bloğunda tanımlayabileceğimiz gibi, Type bloğunda da tanımlayabiliriz. Eğer TYPE bloğunu kullanırsak tanımlamış olduğumuz yeni tipi direkt değişken tipi olarak kullanabiliriz. değişken_ismi : array [boyut_büyüklüğü] of dizi_tipi; Boyut büyüklüğü herhangi bir standart veri tipinde olabilir. Eğer çok boyutlu bir dizi ise bunlar birbirinden virgüllerle ayrılır. Dizi tipinde ise istediğimiz herhangi bir tipi kullanabiliriz. Yani hem standart tipleri hem TYPE bloğunda tanımladığımız kendi tiplerimizi kullanabiliriz. Dizinin elemanlarına köşeli parantez içerisinde verilen indis numarası ile erişiriz.
Örnek tanımlamalar : Var IntList : array[1..100] of integer; { İnteger tipinde bir boyutlu dizi} CharData : array['A'..'Z'] of Byte; { Char tipinde bir boyutlu dizi} isim : array[1..10] of string[20]; { Her biri 20 karakterlik string tipinde 10 elemanlı dizi} Eğer dizilerimiz çok boyutlu olacaksa Matris : array[0..9, 0..9] of real; {real tipinde 2 boyutlu dizi} KupData : array[1..20,1..20,1..20] of Word {Word tipinde 3 boyutlu dizi} Bir çok bilim dalında çeşitli niceliklerin matematiksel gösterimi için yaygın olarak kullanılan vektör ve matrislerle ilgili bir program yapacağımızı düşünelim. Her Xi (i=1,2,...n) ve Aij(i=1,2,..n, j=1,2,..n) elemanı için basit tipte bir değişken kullanacak olursak karşılaşacağımız güçlüğü görürüz. Örneğin 10 bileşenli bir vektör için 10 basit tip değişken kullanılması gerekirken, 10x10 boyutlarındaki matris için 100 basit tip değişken kullanılması gerekmektedir. Bizim için gerekli olan, aynı tipte elemanlardan oluşan bir veri kümesini tek bir değişken ismi kullanarak, küme içindeki yeri ile erişilmesini sağlayacak veri yapısıdır.
Diziler, kullanım amacına göre tek veya çok boyutlu olabilir Diziler, kullanım amacına göre tek veya çok boyutlu olabilir. Elemanlandırılmış dizi değişkenlerinin boyut durumu ARRAY ifadesiyle köşeli parantez içinde yapılan tanımlamalarla belirtilir. Dizi karakter tipi "OF tip tanımı" ifadesi ile mutlaka verilmelidir. PASCAL programlama dilinde diziler, TYPE, VAR veya CONST tanım bloklarından birinde tanıtılır. İşleme alınmaları işlemlerin çalışma durumlarına göre bir döngü ile gerçekleştirilir. Tüm elemanlar ilk elemandan başlayarak işleme alınacaksa FOR döngüsü, herhangi bir şarta bağlı olarak tekrar edilecekse WHILE veya REPEAT döngüleri ile kullanılır.
7.1. Dizilerin Tanıtılması Bir dizinin tanımı değişik şekillerde yapılabilmektedir. Bunlar aşağıda kısaca özetlenmiştir. 7.1.1. Dizilerin Type Bloğunda Tanıtılması Dizilerin type bloğunda tanıtılması işleminde örneğin; Tek boyutlu ve 30 elemanlı Elektronik Mühendisliği 1. Sınıf öğrencilerinin numaralarının programa tanıtımı: TYPE Numara=ARRAY [1..30] of string[10]; VAR ogr:NUMARA; şeklinde yapılabilir.
Örneğe dikkat edilirse NUMARA adı verilen bir dizi TYPE tanım bloğunda tanıtılmış VAR tanım bloğunda ise bu dizinin OGR adı altında değişken tipte olduğu belirtilmiştir. Aynı şekilde tek boyutlu ve 30 elemanlı Elektronik Mühendisliği 1. Sınıf öğrencilerinin isimlerin programa tanıtımı ise: TYPE isimler=ARRAY [1..30] of String[25]; VAR Ogrisim:Isimler; şeklindedir.
7.1.2.Dizilerin VAR Bloğunda Tanımlanması Bir dizi diğer değişkenlerde olduğu gibi Var tanım bloğunda da tanıtılabilir. Bunun için dizinin boyutu belirtildikten sonra diziyi oluşturan elemanların hangi tipte olduğu belirtilmelidir. Aşağıdaki ifadeleri inceleyiniz. VAR X1:ARRAY [1..10] of Real; k2:ARRAY [1..35] of İnteger; 7.1.3.Dizilerin CONST (Sabit Bilgiler) Bloğunda Tanımlanması Bir dizi diğer sabitlerde olduğu gibi CONST tanım bloğunda da tanıtılabilir. Aşağıdaki örnek programı inceleyiniz.
Writeln('Aranan Ay adı :',Aylar[k]); end. Örnek: Const Aylar:Array[1..12] of string[7]= ('Ocak',’Şubat’,’Mart',’Nisan’, ‘Mayıs','Haziran', 'Temmuz', 'Ağustos','Eylül’,'Ekim',’Kasım', 'Aralık'); var k: integer ; begin Write ('kaçıncı ay:'); Readln(k); Writeln('Aranan Ay adı :',Aylar[k]); end.
Tek boyutlu diziler aşağıda görülen genel formda ifade edilebilirler. Değişken = ARRAY [Başlangıç değeri..Bitiş Değeri] OF tip tanımı; Örnek: Var Dizi1: array [1..20] of string[25] ; Dizi2: array [1..20] of integer; Buradaki ARRAY ve OF sözcükleri Pascal'ın anahtar sözcükleridir. Başlangıç değeri ve Bitiş Değeri ise sayılabilir özellikte değerlerdir. Tip tanımı ise hangi tip verileri içerdiğini belirtmektedir. Diziler değişik şekillerde tanımlanabilir. Bunlar ileride açıklanmıştır.
Örnek: Dışarıdan okunan 10 tane sayıyı bir dizide saklayarak bunların toplamını ve ortalamasını bulan programı yazınız. var sayi:array[1..10]of integer; i,top:integer; ort:real; begin top:=0; for i:=1 to 10 do write(i,'. Sayıyı giriniz'); readln(sayi[i]); top:=top+sayi[i]; end; ort:=top/10; writeln('Sayıların Toplami :', top); writeln('Sayıların Ortalamasi :', ort:4:2); readln; end.
7.3 Çok Boyutlu Diziler İndisli değişkenler iki boyutlu veya daha fazla olduğunda boyut durumu, köşeli parantez içinde eleman tanımları arasında virgül verilerek belirtilir. Matematikte kullanılan matrisler iki boyutlu dizilere en güzel örnektir. Var Dizi değişkeni : array [1..n,1..n,……,1..n] of tip adı; Örneğin;İki boyutlu ve 32 elemanlı dizi adı verilen indisli değişkenin programa tanıtımı; dizi:ARRAY[ 1..4,1..8] of Real; şeklinde yapılabilmektedir. Aynı şekilde; üç boyutlu ve 64 elemanlı dizi1 adı verilen indisli değişkenin programa tanıtımı; dizi1:ARRAY[1..4,1..8,1..2] OF Real;
Örnek: Çarpım tablosu programını yazınız. Var i,j: integer; dizi: array[1..10,1..10] of integer; begin for i:=1to10 do for j:=1 to 10 do dizi[i,j]:=i*j; Write(Dizi[i,j]:4); End; Writeln; End; end.
Örnek: 3*3’lük bir matrisi tanımlayıp değerlerini dışarıdan okutup bu matrisi ekrana matris görünümünde yazınız. var matris:array[1..3,1..3] of integer; i,j:integer; begin for i:=1 to 3 do for j:=1 to 3 do write(i,' .satir ',j,' .sutun elemani :'); readln(matris[i,j]); end; write(mat[i,j],' ' ); writeln; readln; end.
Soru: 4*4’lük bir matrisin asıl köşegeni üzerindeki elemanlarını sıfır ( 0 ) yapan programı yazınız. var mat:array[1..4,1..4] of integer; i,j:integer; begin for i:=1 to 4 do for j:=1 to 4 do write(i,' .satir ',j,' .sutun elemani :'); readln(mat[i,j]); if ( i=j ) then mat[i,j]:=0; end; write(mat[i,j],' '); writeln; readln; end.