İndisli Değişkenler
Pascalda indisli değişken kullanımı.
A) İndisli Değişkenlerin Tanımı:
Kural olarak, bir değişken bir anda sadece bir bilgiyi tutabilir. Bir değişken indisli değişken olarak tanımlanırsa, bir küme teşkil eden bilgiler, indisli değişken olarak tanımlanan bir değişkenin, indis numarasıyla ayırt edilen hücrelerinde tutulabilir. İndis numarası sabit, değişken ya da ifade olabilir.
Buna göre program içerisinde aynı anda aynı tür bilgiden çok sayıda mevcut olması ve bu bilgiler üzerinde toplu işlem yapılmasının gerekmesi durumunda dizilerden yararlanılır.
Örnek olarak, bir okulda okuyan öğrencilerin okul numaraları bir küme teşkil eder. Aynı şekilde öğrencilerin adları, soyadları, adresleri hep birer küme teşkil etmektedir. Öğrencilerin sayısı 1000 kişi olsa, her öğrencinin numarasını tutacak ayrı bir değişken tanımlayacak olsak 1000 tane birbirinden farklı değişken tanımlamamız gerekecekti. Buna bağlı olarak döngü kullanılamayacak ve 1000 tane Read veya Readln komutu kullanılmak zorunda kalınacaktı. İndisli değişkenler bizi bütün bu güçlüklerden kurtarmaktadır.
Dizilerin gerekliliğini aşağıdaki örneklerle açıklayacak olursak;
Örnek – 1 :
100 adet isim ve telefon numarası saklamak için :
İsim : 100 adet.
Telefon : 100 adet.
Toplam 200 adet değişken kullanılmalıdır.
Örnek – 2 :
Bir sınıfta okuyan 50 öğrencinin isim ve her öğrencinin 3 farklı dersten aldıkları 3 farklı not bilgisini aynı anda hafızada tutmak için :
İsim : 50 adet.
Notlar : 50 öğrenci X 3 ders X 3 not = 450 adet.
Toplam 500 adet değişken kullanılmalıdır.
Yukarıda görülen iki örnekte de, çok sayıda değişken kullanılması gerekmektedir. Bu durumda bilgiler üzerinde işlem yapılması imkansızdır. Bu durumu kolaylaştırmak için Diziler kullanılmaktadır. Şimdi bu örnekleri diziler yardımı ile tanımlayalım.
Örnek – 1 İçin :
İsim : 100 elemanlı.
Telefon : 100 elemanlı.
Toplam 200 elemanlı 2 dizi (değişken) kullanılmalıdır.
Örnek – 2 İçin :
İsim : 50 elemanlı.
Notlar : 50 X 3 X 3 = 450 elemanlı.
Toplam 500 elemanlı 2 dizi (değişken) kullanılmalıdır.
Görüldüğü gibi değişken sayısının yerini dizideki eleman sayısı almış olup, değişken sayısı oldukça azalmıştır.
Dizi içerisinde her elemanın bir indis numarası bulunur. İndis numarası her elemanın dizi içerisindeki yerini yani kaçıncı eleman olduğunu gösterir. İndis numaraları [ ] içerisinde yazılır.
Örnek – 1 İçin :
İsim [1] : İsim dizisinin 1. elemanı.
İsim [x] : İsim dizisinin x. elemanı.
Telefon [35] : Telefon dizisinin 35. elemanı.
Telefon [x] : Telefon dizisinin x. elemanı.
Örnek – 2 İçin :
İsim [i] : İsim dizisinin I. elemanı.
Notlar [I,J,K] : Notlar dizisinin I,J,K. elemanı. Yani I. öğrencinin, J. dersi, K. notunu temsil eder.
İndisli değişkenler de VAR kelimesi ile başlayan değişken tanımlama bloğunda tanımlanırlar.
B) Tek Boyutlu İndisli Değişkenler:
İndisli değişkenler, tek boyutlu tanımlanabildikleri gibi, 2 ve daha fazla boyutlu olarak ta tanımlanabilirler. Ancak uygulamada en çok en çok 1,2 ve 3 boyutlu indisli değişkenler kullanılmaktadır.
Turbo Pascal’ da dizi tanımlamak için ARRAY komutu kullanılır.
Aşağıdaki örnekte Sınıf değişkeni tek boyutlu indisli değişken olarak tanımlanmıştır. Sınıf indisli değişken 8 elemandan oluşmaktadır.
Var
Sınıf : Array [1..8] of integer;
Görüldüğü gibi değişken adından sonra ARRAY kelimesi yazılmakta, bu kelimenin yanındaki köşeli parantezler içinde iki rakam bulunmaktadır. Birinci rakam minimum indis sayısını, ikinci rakam ise maksimum indis sayısını gösterir. Köşeli parantezin dışındaki Of kelimesinden sonra da, indisli değişkenin tipi tanımlanmıştır. Buna göre yukarıdaki Sınıf değişkeni her biri bir integer sayı tutabilen 8 elemandan oluşmaktadır. Yukarıdaki tanımlamadan sonra bellekte, aşağıdaki düzenleme oluşur.
İndisli değişkenlerde, herhangi bir elemana değişken adı ve köşeli parantez içinde bulunan indis numarası ile ulaşılır. örneğin aşağıdaki indisli değişkende üstten üçüncü elemana Sınıf [3] yazarak ulaşılabilir. Aşağıda, tek boyutlu indisli değişken tanımlamanın genel yapısı görülmektedir.
Var
Değişken Adı : Array [Min. İndis Değeri .. Mak. İndis Değeri] of Değişken Tipi ;
Aşağıda, isim adlı bir indisli değişken 100 elemanlı olarak tanımlanmıştır.
Var
İsim : array [1..100] of string[15] ;
İsim indisli değişkenin her bir elemanı 15 karakter uzunluğundaki bir string bilgiyi tutabilir. Buna göre isim indisli değişkeni her biri en fazla 15 karakterden 100 ismi tutabilir.
İndisli değişkenlerde minimum ve maksimum indis değerlerinin değişkenler aracılığıyla tanımlanamayacağını, buna karşılık, bu değerlerin tanımlanmasında, Const başlığı altında tanımlanmış sabitler kullanılabilir.
Örnek :
Const
a = 1;
b = 20;
Var
Numara : array [a..b] of integer ;
Bu örnekte a, b sabitleri Const başlığı altında tanımlanmış, daha sonra da bu sabitler numara indisli değişkenin minimum ve maksimum indis değerlerinin tanımlanmasında kullanılmıştır.
Yukarıdaki diziler aşağıdaki gibi bilgi aktarılabilir.
İsim [10] := ‘Baki BOZKURT’ ;
Numara [7] := 75 ;
C) İki ve Üç Boyutlu İndisli Değişkenler:
İki boyutlu indisli değişkenler n satır ve m sütundan oluşan matris bir yapı oluştururlar. Aşağıdaki örnekte not indisli değişkeni, iki boyutlu olarak tanımlanmıştır.
Var
Not:array[1..5, 1..3] of integer;
Bu tanımlamada, köşeli parantez içerisindeki ilk iki sayı satır değerlerini, son iki sayı ise sütun değerlerini gösterir. Bu tanımlamaya göre, bellekte aşağıdaki düzenleme oluşur.
A:array[1..10] of array [1..5] of integer ;
Veya ;
A:array[1..10,1..5] of integer;
Şeklinde tanımlamalar yapılır.
Meselâ 50 öğrencinin 5 notunu saklamak için ;
Var
Not:array [1..50,1..5] of byte;
tanımlaması yapılır. Aynı şekilde 50 öğrencinin, 8 farklı dersten aldıkları 5 not bilgisini tanımlamak için ;
Var
Not:array[1..50,1..8,1..3] of byte;
tanımlaması yapılır.
Örneğin;
Not[12,2,1] bize, 12. öğrencinin 2. dersten aldığı 1. not anlamındadı