Storan data

Katakan anda telah membangunkan permainan komputer yang dipanggil "User Hostile" di mana pemain bersaing dengan antara muka komputer yang rumit dan tidak mesra. Kini anda perlu menulis program yang menjejaki jualan bulanan permainan ini dalam tempoh lima tahun. Atau katakan anda perlu menginventori Kad Dagangan Hero Penggodam.
Tidak lama lagi anda akan membuat kesimpulan bahawa anda memerlukan lebih daripada jenis data asas yang mudah untuk menyimpan dan memproses maklumat.
 

Tatasusunan (senarai). Pengenalan

Untuk memudahkan kerja dengan sejumlah besar data, sekumpulan sel diberi nama biasa. Kumpulan sel sedemikian dipanggil array
Array – ia adalah sekumpulan sel memori daripada jenis yang sama, terletak bersebelahan dan mempunyai nama yang sama. Setiap sel dalam kumpulan mempunyai nombor unik.

Apabila bekerja dengan tatasusunan, anda perlu mempelajari cara menyelesaikan tiga tugas:
x memperuntukkan memori saiz yang diperlukan untuk tatasusunan
x tulis data ke sel yang dikehendaki
x membaca data dari sel


Tatasusunan dalam Pascal


Secara tradisinya Pascal menggunakan tatasusunan statik seperti

var a: tatasusunan [1..10] integer;

Sempadan tatasusunan mesti ditetapkan oleh pemalar dan anda tidak boleh menukar saiz tatasusunan semasa operasi atur cara. Tetapi anda boleh membuat indeks bukan sahaja daripada integer, tetapi juga, katakan, daripada aksara atau jenis terbilang. Contohnya, untuk mengira kejadian setiap huruf, anda boleh menggunakan tatasusunan

var LettersCount: tatasusunan ['a'..'z'] integer;

dan bekerja dengannya sepuas hati anda:

LettersCount['z'] := 1; LettersCount['d'] := LettersCount['d'] + 1;

Kelemahan tatasusunan sedemikian diketahui: jika tidak diketahui terlebih dahulu berapa banyak elemen yang perlu digunakan, maka memori saiz maksimum diperuntukkan untuk tatasusunan. Akibatnya, dalam kebanyakan kes kami "menyimpan untuk masa depan", dan kadangkala "rizab" ini ternyata tidak cukup. Itulah sebabnya tatasusunan sedemikian dipanggil  statik: saiznya adalah statik dan mesti ditetapkan pada peringkat penyusunan atur cara. Walau bagaimanapun, dalam Pascal terdapat  tatasusunan dinamik, saiznya bukan sahaja boleh ditetapkan, tetapi juga diubah dalam perjalanan program. Tatasusunan ini dan kelebihan menggunakannya yang akan dibincangkan lebih lanjut.

Membuat tatasusunan

Apabila mencipta tatasusunan, ruang diperuntukkan dalam ingatan (sebilangan sel) 1) Tatasusunan boleh dicipta dengan hanya menyenaraikan elemen: var a: tatasusunan integer; SetLength(a, 3); a[0] := 1; a[1] := 2; a[2] := 3;
2) Tatasusunan boleh terdiri daripada data apa-apa jenis - integer atau nombor nyata, rentetan aksara  var a: tatasusunan char; SetLength(a, 3); a[0] := 'a'; a[1] := 'b'; a[2] := 'c'; 3) Tatasusunan sentiasa "tahu" saiz anda. Fungsi  length digunakan untuk menentukan saiz tatasusunan. Selalunya saiz tatasusunan disimpan dalam pembolehubah yang berasingan supaya atur cara boleh ditukar dengan mudah untuk berfungsi dengan saiz tatasusunan yang berbeza. Contoh: N := 10; // dalam pembolehubah N kita menyimpan saiz tatasusunan SetLength(a, N); // tetapkan tatasusunan dan saiz N writeln(panjang(a)); //paparkan saiz tatasusunan Saiz tatasusunan boleh ditetapkan dari papan kekunci.

Merujuk elemen tatasusunan

Kebanyakan kegunaan tatasusunan datang daripada fakta bahawa elemennya boleh diakses secara individu.
Cara untuk melakukan ini adalah dengan menggunakan indeks untuk menomborkan elemen.
Indeks ialah nilai yang menunjuk kepada elemen tatasusunan tertentu div>

INGAT!
PENBIMBANGAN ARRAY DALAM PASCAL BERMULA DARI SIFAR!

(Ini adalah wajib — anda mesti bermula dari awal. Ini amat penting untuk diingati)

Contoh mengakses tatasusunan A: x := (A[3] + 5) * A[1] // baca nilai A[3] dan A[1] A[0] := x + 6 // tulis nilai baharu kepada A[0] Mari kita analisis atur cara untuk bekerja dengan elemen tatasusunan. var i: integer; a: tatasusunan integer; bermula     i := 1;     panjang set(a, 5); //buat tatasusunan 5 elemen      a[0] := 23; // kepada setiap 5 elemen tatasusunan (indeks dari 0 hingga 4)     a[1] := 12; // tulis nilai tertentu     a[2] := 7;     a[3] := 43;     a[4] := 51;     a[2] := a[i] + 2 * a[i - 1] + a[2 * i]; // tukar nilai elemen dengan indeks 2 kepada hasil ungkapan     // kerana i=1, kemudian menggantikan nilai pembolehubah i ke dalam ungkapan yang kita dapat     // ungkapan seterusnya  a[2] := a[1] + 2*a[0] + a[2];     writeln(a[2] + a[4]); tamat.
Akibat daripada larian atur cara ini nilai jumlah elemen tatasusunan dengan indeks 2 dan dengan indeks 4 bersamaan dengan 116 akan muncul pada skrin.Seperti yang anda lihat daripada contoh, kami boleh mengakses mana-mana elemen tatasusunan . Dan juga mengira bilangan elemen yang diperlukan menggunakan pelbagai formula (contohnya, seperti dalam program A[i-1] atau A[2*i], dalam kes ini, indeks elemen akan dikira dan bergantung pada nilai i.)

Mari kita lihat contoh program var a: tatasusunan integer; bermula     panjang set(a, 5);     a[5] := 5; a[-1] := 0; tamat.

Sebab tatasusunan diisytiharkan dengan 5 elemen, jadi elemen akan diberi nombor dari 0 hingga 4. Kami melihat bahawa atur cara dalam baris ke-6 merujuk kepada elemen yang tidak wujud а [5] dan pada baris ke-7 ke yang juga tidak wujud a[-1].

Ternyata program itu melangkaui batas tatasusunan
Array di luar sempadan sedang mengakses elemen dengan indeks yang tidak wujud dalam tatasusunan.
Dalam kes sedemikian, program biasanya ranap dengan ralat masa jalan


 
 

Apabila bekerja dengan tatasusunan, anda biasanya perlu bekerja dengan semua elemen tatasusunan sekaligus.
Lelaran melalui elemen: kami melihat melalui semua elemen tatasusunan dan, jika perlu, melakukan beberapa operasi pada setiap satu daripadanya.
Untuk ini, gelung dengan pembolehubah paling kerap digunakan, yang berubah daripada 0 kepada N-1, dengan N ialah bilangan elemen tatasusunan.
Di bawah N kita akan mempertimbangkan saiz semasa tatasusunan, iaitu
N := panjang(A) ... untuk i := 0 hingga n - 1 bermula // di sini kita bekerja dengan [i] akhir; ... Dalam gelung yang ditentukan, pembolehubah i akan mengambil nilai 0, 1, 2, ..., N-1.  Oleh itu, pada setiap langkah gelung, kami mengakses elemen khusus tatasusunan dengan nombor i.
Oleh itu, sudah cukup untuk menerangkan perkara yang perlu dilakukan dengan satu elemen tatasusunan a[i] dan meletakkan tindakan ini di dalam kitaran sedemikian.

Mari tulis atur cara yang mengisi tatasusunan dengan nombor asli N & nbsp; pertama, iaitu, pada penghujung atur cara, elemen tatasusunan harus menjadi sama a[0] = 1 a[1] = 2 a[2] = 3 ... a[N - 1] = N Ia adalah mudah untuk melihat corak: nilai elemen tatasusunan mestilah lebih besar sebanyak 1 daripada indeks elemen.
Gelung akan kelihatan seperti ini untuk i := 1 hingga n - 1 lakukan a[i] := i + 1; Selesaikan tugasan.