Veri depolama

Diyelim ki oyuncuların karmaşık ve dostça olmayan bir bilgisayar arayüzüne karşı yarıştığı "User Hostile" adlı bir bilgisayar oyunu geliştirdiniz. Şimdi bu oyunun beş yıllık periyotta aylık satışlarını takip eden bir program yazmanız gerekiyor. Ya da Hacker Hero Koleksiyon Kartlarının envanterini çıkarmanız gerektiğini varsayalım.
Çok yakında, bilgileri depolamak ve işlemek için basit temel veri türlerinden daha fazlasına ihtiyacınız olduğu sonucuna varacaksınız.
 

Diziler (listeler). Giriş

Büyük miktarda veri ile çalışmayı kolaylaştırmak için bir grup hücreye ortak bir ad verilir. Böyle bir hücre grubuna dizi denir
Dizi – aynı türden, yan yana yerleştirilmiş ve ortak bir isme sahip bir grup hafıza hücresidir. Gruptaki her hücrenin benzersiz bir numarası vardır.

Dizilerle çalışırken üç görevi nasıl çözeceğinizi öğrenmeniz gerekir:
X bir dizi için gerekli boyutta bellek ayırın
X istenen hücreye veri yaz
X hücreden veri oku


Pascal'da Diziler


Geleneksel olarak Pascal,

gibi statik diziler kullanır.
var a: tamsayı dizisi [1..10];

Bir dizinin sınırları sabitlerle ayarlanmalıdır ve programın çalışması sırasında dizinin boyutunu değiştiremezsiniz. Ancak, yalnızca bir tam sayıdan değil, aynı zamanda örneğin bir karakterden veya numaralandırılmış türden bir dizin oluşturabilirsiniz. Örneğin, her harfin tekrarını saymak için bir dizi kullanabilirsiniz

var LettersCount: tamsayı dizisi ['a'..'z'];

ve onunla dilediğiniz gibi çalışın:

HarfSayı['z'] := 1;
HarfSayı['d'] := HarfSayı['d'] + 1;

Bu tür dizilerin dezavantajları bilinmektedir: Kaç öğenin kullanılması gerektiği önceden bilinmiyorsa, dizi için maksimum bellek boyutu ayrılır. Sonuç olarak, çoğu durumda "gelecek için stok yaparız" ve bazen bu "rezerv" yetmediği ortaya çıkıyor. Bu tür dizilere  statik denmesinin nedeni budur: boyutları statiktir ve program derleme aşamasında ayarlanmalıdır. Bununla birlikte, Pascal   boyutu yalnızca ayarlanamayan, aynı zamanda programın akışı içinde değiştirilebilen  dinamik diziler vardır. Daha ayrıntılı olarak ele alınacak olan, bu diziler ve bunları kullanmanın avantajlarıdır.

Bir dizi oluşturma

Bir dizi oluştururken, bellekte yer ayrılır (belirli sayıda hücre)
1) Diziler şunlar olabilir: öğeleri basitçe listeleyerek oluşturulur:
var a: tamsayı dizisi;
Uzunluğu Ayarla(a, 3);
a[0] := 1;
a[1] := 2;
a[2] := 3;

2) Diziler herhangi bir türden veriden oluşabilir - tamsayı veya gerçek sayılar, karakter dizileri 
var a: char dizisi;
Uzunluğu Ayarla(a, 3);
a[0] := 'a';
a[1] := 'b';
a[2] := 'c';
3) Bir dizi her zaman "bilir" senin bedenin  uzunluk işlevi, bir dizinin boyutunu belirlemek için kullanılır. Genellikle dizinin boyutu ayrı bir değişkende saklanır, böylece program farklı bir dizi boyutuyla çalışacak şekilde kolayca değiştirilebilir. Örnek:
N := 10; // N değişkeninde dizinin boyutunu saklıyoruz
Uzunluğu Ayarla(a, N); // diziyi ve N boyutunu ayarla
writeln(uzunluk(a)); // dizinin boyutunu göster
Bir dizinin boyutu klavyeden ayarlanabilir.

Bir dizi öğesine başvurma

Dizilerin kullanışlılığının çoğu, öğelerine ayrı ayrı erişilebilmesi gerçeğinden gelir.
Bunu yapmanın yolu, elemanları numaralandırmak için bir dizin kullanmaktır.
Dizin , belirli bir dizi öğesine işaret eden bir değerdir

Unutmayın!
PASCAL'DA DİZİLERİN NUMARALANDIRILMASI SIFIRDAN BAŞLAR!

(Bu zorunludur — sıfırdan başlamalısınız. Bunu unutmamak özellikle önemlidir)

A dizisine erişim örnekleri:
x := (A[3] + 5) * A[1] // A[3] ve A[1] değerlerini oku
A[0] := x + 6 // A[0]'a yeni değer yaz
Dizi öğeleriyle çalışmak için programı analiz edelim.
var i: tamsayı;
a: tamsayı dizisi;

başlamak
    ben := 1;
    ayar uzunluğu(a, 5); //5 elemanlı bir dizi oluştur 
    a[0] := 23; // dizinin 5 öğesinin her birine (0'dan 4'e kadar dizinler)
    a[1] := 12; // belirli bir değer yaz
    a[2] := 7;
    a[3] := 43;
    a[4] := 51;
    a[2] := a[i] + 2 * a[i - 1] + a[2 * i]; // indeksi 2 olan elemanın değerini ifadenin sonucuna değiştir
    // çünkü i=1, sonra i değişkeninin değerini elde ettiğimiz ifadede değiştiriyoruz
    // sonraki ifade  a[2] := a[1] + 2*a[0] + a[2];
    writeln(a[2] + a[4]);
son.


Çalışma sonucunda bu program 116'ya eşit indeks 2 ve indeks 4'e sahip dizinin elemanlarının toplamının değeri ekranda görünecektir. Örnekten de görebileceğiniz gibi dizinin herhangi bir elemanına ulaşabiliyoruz. . Ayrıca gerekli eleman sayısını çeşitli formüller kullanarak hesaplayın (örneğin, A[i-1] veya A[2*i] programında olduğu gibi, bu durumlarda elemanların indeksleri hesaplanacak ve i'nin değeri.)

Örnek bir programa bakalım
var a: tamsayı dizisi;

başlamak
    ayar uzunluğu(a, 5);
    a[5] := 5;
    bir[-1] := 0;
son.

Çünkü dizi 5 öğeyle bildirildiği için öğeler 0'dan 4'e kadar numaralandırılacaktır. 6. satırdaki programın var olmayan bir öğeye gönderme yaptığını görüyoruz а [5] ve 7. satırda yine var olmayan a[-1].

Programın dizinin sınırlarını aştığı ortaya çıktı
Dizi sınırların dışında, dizide olmayan bir dizine sahip bir öğeye erişiyor.
Bu gibi durumlarda, program genellikle çalışma zamanı hatası
vererek çöker.

 
 

Dizilerle çalışırken genellikle dizinin tüm öğeleriyle aynı anda çalışmanız gerekir.
Öğeler arasında yineleme: dizinin tüm öğelerine bakarız ve gerekirse her biri üzerinde bazı işlemler yaparız.
Bunun için, çoğunlukla değişkenli bir döngü kullanılır ve 0'dan N-1'e değişir; burada N, dizi öğelerinin sayısıdır.
N altında, dizinin mevcut boyutunu dikkate alacağız, yani
N := uzunluk(A)
...
i için := 0 - n - 1 başlar
     // burada a[i] ile çalışıyoruz
son;
...
Belirtilen döngüde i değişkeni 0, 1, 2, ..., N-1 değerlerini alacaktır.  Böylece, döngünün her adımında, dizinin i numaralı belirli bir elemanına erişiriz.
Bu nedenle a[i] dizisinin bir elemanı ile yapılması gerekenleri anlatmak ve bu işlemleri böyle bir döngü içerisine yerleştirmek yeterlidir.

Diziyi ilk N & nbsp; doğal sayılarla dolduran, yani programın sonunda dizinin elemanları eşit hale gelen bir program yazalım.
bir[0] = 1
bir[1] = 2
bir[2] = 3
...
a[N - 1] = N
Kalıbı görmek kolaydır: bir dizi öğesinin değeri, öğenin dizininden 1 daha büyük olmalıdır.
Döngü şöyle görünecek
i için := 1 - n - 1 yap
    a[i] := ben + 1;

Görevi tamamlayın.