Delphi'de Dizi Veri Türlerini Anlama ve Uygulama

Diziler, aynı ada sahip bir dizi değişkeni ifade etmemize ve bu dizideki öğeleri tek tek çağırmak için bir sayı (bir dizin) kullanmamıza olanak tanır. Dizilerin hem üst hem de alt sınırları vardır ve dizinin elemanları bu sınırlar içinde bitişiktir.

Dizinin öğeleri, tümü aynı türdeki değerlerdir (dize, tamsayı, kayıt, özel nesne).

Delphi'de iki tür dizi vardır: her zaman aynı boyutta kalan sabit boyutlu bir dizi - statik bir dizi - ve çalışma zamanında boyutu değişebilen dinamik bir dizi.

Statik Diziler

Bir kullanıcının her günün başında bazı değerler (örneğin randevu sayısı) girmesine olanak tanıyan bir program yazdığımızı varsayalım. Bilgileri bir listede saklamayı tercih ederiz. Bu listeyi çağırabiliriz randevularve her sayı Randevular [1], Randevular [2] vb. olarak depolanabilir.

Listeyi kullanmak için önce bildirmeliyiz. Örneğin:

 var Randevular: Tamsayı dizisi [0..6]; 

7 tamsayı değerinin tek boyutlu dizisini (vektörünü) içeren Randevular adlı bir değişkeni bildirir. Bu bildirim göz önüne alındığında, Randevular [3] Randevular'daki dördüncü tam sayı değerini belirtir. Köşeli parantez içindeki sayı dizin olarak adlandırılır.

instagram viewer

Eğer bir statik dizi ancak tüm öğelerine değer atamayın, kullanılmayan öğeler rastgele veriler içerir; başlatılmamış değişkenler gibidirler. Aşağıdaki kod Randevular dizisindeki tüm öğeleri 0 olarak ayarlamak için kullanılabilir.

 k için: = 0-6 yapmak Randevular [k]: = 0; 

Bazen bir dizideki ilgili bilgileri takip etmemiz gerekir. Örneğin, bilgisayar ekranınızdaki her bir pikseli izlemek için, bir ekran kullanarak X ve Y koordinatlarına başvurmanız gerekir. çok boyutlu değerleri saklamak için bir dizi.

Delphi ile, birden çok boyutlu diziler bildirebiliriz. Örneğin, aşağıdaki ifade iki boyutlu bir 7'ye 24 dizisini bildirir:

 var DayHour: dizi [1..7, 1..24] Real; 

Çok boyutlu bir dizideki öğe sayısını hesaplamak için, her dizindeki öğe sayısını çarpın. Yukarıda açıklanan DayHour değişkeni, 7 satır ve 24 sütunda 168 (7 * 24) öğeyi ayırır. Üçüncü satır ve yedinci sütundaki hücreden değeri almak için şunu kullanırız: DayHour [3,7] veya DayHour [3] [7]. DayHour dizisindeki tüm öğeleri 0 olarak ayarlamak için aşağıdaki kod kullanılabilir.

 i için: = 1 ila 7 yapmak
j için: = 1 ila 24 yapın
DayHour [i, j]: = 0;

Dinamik Diziler

Bir dizinin ne kadar büyük olacağını tam olarak bilemeyebilirsiniz. Şu özelliklere sahip olabilirsiniz: çalışma zamanında dizinin boyutunu değiştirme. Dinamik bir dizi türünü bildirir, ancak boyutunu bildirmez. Dinamik bir dizinin gerçek boyutu, çalışma zamanında SetLength prosedür.

 var Öğrenciler: dizi; 

tek boyutlu dinamik dizeler oluşturur. Beyan, Öğrenciler için bellek ayırmaz. Bellekte dizi oluşturmak için SetLength yordamını çağırırız. Örneğin, yukarıdaki açıklama göz önüne alındığında,

 SetLength (Öğrenciler, 14); 

0 ile 13 arasında dizinlenmiş 14 dizeden oluşan bir dizi ayırır. Dinamik diziler her zaman tamsayı dizine eklenir, her zaman öğelerdeki boyutlarından 0'dan bire daha az başlar.

İki boyutlu bir dinamik dizi oluşturmak için aşağıdaki kodu kullanın:

 var Matrix: Çift dizi dizi;
başla
SetLength (Matris, 10, 20)
son;

iki boyutlu, 10 x 20'lik bir dizi Çift kayan nokta değeri için yer ayırır.

Dinamik bir dizinin bellek alanını kaldırmak için dizi değişkenine nil atayın, örneğin:

 Matris: = sıfır; 

Çoğu zaman, programınız derleme sırasında kaç öğeye ihtiyaç duyulacağını bilmez; bu sayı çalışma zamanına kadar bilinmeyecektir. Dinamik dizilerle, belirli bir zamanda yalnızca gerektiği kadar depolama alanı ayırabilirsiniz. Başka bir deyişle, dinamik dizilerin boyutu, dinamik dizilerin temel avantajlarından biri olan çalışma zamanında değiştirilebilir.

Sonraki örnek, bir tamsayı değerleri dizisi oluşturur ve diziyi yeniden boyutlandırmak için Kopyala işlevini çağırır.

 var
Vektör: Tamsayı dizisi;
k: tam sayı;
başla
SetLength (Vektör, 10);
k için: = Düşük (Vektör) ila Yüksek (Vektör)
Vektör [k]: = i * 10;
...
// şimdi daha fazla alana ihtiyacımız var
SetLength (Vektör, 20);
// burada, Vector dizisi en fazla 20 öğe içerebilir // (zaten 10 tanesi vardır) sonu;

SetLength işlevi daha büyük (veya daha küçük) bir dizi oluşturur ve varolan değerleri yeni dizi. Düşük ve Yüksek fonksiyonları, doğru alt ve üst dizin değerleri için kodunuza geri bakmadan her dizi öğesine erişmenizi sağlar.