Pochopenie a implementácia typov dát poľa v Delphi

Polia nám umožňujú odkazovať na sériu premenných s rovnakým názvom a použiť číslo (index) na vyvolanie jednotlivých prvkov v tejto sérii. Polia majú hornú aj dolnú hranicu a prvky poľa sú v rámci týchto hraníc susediace.

Prvky poľa sú hodnoty, ktoré sú všetky rovnakého typu (reťazec, celé číslo, záznam, vlastný objekt).

V Delphi existujú dva typy polí: pole s pevnou veľkosťou, ktoré vždy zostáva rovnakou veľkosťou - statické pole - a dynamické pole, ktorého veľkosť sa môže za behu meniť.

Statické polia

Predpokladajme, že píšeme program, ktorý umožňuje používateľovi zadávať niektoré hodnoty (napr. Počet stretnutí) na začiatku každého dňa. Informácie by sme chceli uložiť do zoznamu. Tento zoznam by sme mohli nazvať schôdzkya každé číslo sa môže uložiť ako udalosti [1], udalosti [2] atď.

Aby sme mohli tento zoznam použiť, musíme ho najprv prehlásiť. Napríklad:

 var Udalosti: pole [0..6] Integer; 

deklaruje premennú s názvom Schôdzky, ktorá obsahuje jednorozmerné pole (vektor) 7 celočíselných hodnôt. Vzhľadom na toto vyhlásenie menovania [3] označujú štvrté celé číslo v menovaní. Číslo v zátvorkách sa nazýva index.

instagram viewer

Ak vytvoríme a statické pole ale nepriradia hodnoty všetkým svojim prvkom, nepoužité prvky obsahujú náhodné údaje; sú ako neinicializované premenné. Nasledujúci kód sa dá použiť na nastavenie všetkých prvkov v poli Schôdzky na 0.

 pre k: = 0 až 6 do Udalosti [k]: = 0; 

Niekedy potrebujeme sledovať súvisiace informácie v poli. Napríklad, ak chcete sledovať každý pixel na obrazovke počítača, musíte sa pozrieť na jeho súradnice X a Y pomocou a mnohorozmerný pole na uloženie hodnôt.

S Delphi môžeme deklarovať polia viacerých dimenzií. Napríklad nasledujúce vyhlásenie deklaruje dvojrozmerné pole 7 po 24:

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

Ak chcete vypočítať počet prvkov vo viacrozmernom poli, vynásobte počet prvkov v každom indexe. Premenná DayHour, uvedená vyššie, vyhradzuje 168 (7 * 24) prvkov v 7 riadkoch a 24 stĺpcoch. Na získanie hodnoty z bunky v treťom riadku a siedmom stĺpci by sme použili: DayHour [3,7] alebo DayHour [3] [7]. Nasledujúci kód sa dá použiť na nastavenie všetkých prvkov v poli DayHour na 0.

 pre i: = 1 až 7
pre j: = 1 až 24 urobiť
DayHour [i, j]: = 0;

Dynamické polia

Možno neviete presne, aké veľké je pole na vytvorenie poľa. Možno budete chcieť mať schopnosť zmena veľkosti poľa za behu. Dynamické pole deklaruje svoj typ, ale nie jeho veľkosť. Skutočnú veľkosť dynamického poľa je možné zmeniť za behu pomocou setlength Postup.

 Študenti: pole s reťazcami; 

vytvára jednorozmerné dynamické pole reťazcov. Vyhlásenie neprideľuje študentom pamäť. Na vytvorenie poľa v pamäti voláme procedúru SetLength. Napríklad, vzhľadom na vyššie uvedené vyhlásenie,

 SetLength (študenti, 14); 

alokuje pole 14 reťazcov, indexovaných 0 až 13. Dynamické polia sú vždy indexované celočíselne a vždy začínajú od 0 do jedného menšieho ako je ich veľkosť v elementoch.

Ak chcete vytvoriť dvojrozmerné dynamické pole, použite nasledujúci kód:

 var Matrix: array of Double;
začať
SetLength (Matrix, 10, 20)
koniec;

ktorá prideľuje priestor pre dvojrozmerné pole hodnôt s dvojitou desatinnou čiarkou s veľkosťou 10 bodov po 20.

Ak chcete odstrániť pamäťový priestor dynamického poľa, priraďte nulovej premennej poľa, napríklad:

 Matica: = nula; 

Váš program veľmi často nevie, kedy je potrebné zostaviť, koľko prvkov bude potrebných; toto číslo bude známe až za behu. Pomocou dynamických polí môžete prideliť iba toľko úložiska, koľko je potrebné v danom čase. Inými slovami, veľkosť dynamických polí sa môže meniť za behu, čo je jednou z hlavných výhod dynamických polí.

Nasledujúci príklad vytvorí pole celočíselných hodnôt a potom zavolá funkciu kopírovania, aby zmenila veľkosť poľa.

 var
Vector: array of Integer;
k: celé číslo;
začať
SetLength (Vector, 10);
pre k: = Low (Vector) až High (Vector) do
Vektor [k]: = i * 10;
...
// Teraz potrebujeme viac miesta
SetLength (Vector, 20);
// tu môže vektorové pole pojať až 20 prvkov // (má už 10 z nich) koniec;

Funkcia SetLength vytvorí väčšie (alebo menšie) pole a skopíruje existujúce hodnoty do nové pole. Funkcie Low a High zaisťujú prístup ku všetkým prvkom poľa bez toho, aby ste sa vo svojom kóde museli obzerať za správne dolné a horné hodnoty indexu.