Porozumění a implementace typů dat pole v Delphi

click fraud protection

Pole nám umožňují odkazovat na řadu proměnných se stejným názvem a použít číslo (index) k vyvolání jednotlivých prvků v této sérii. Pole mají horní i dolní mez a prvky pole jsou v těchto mezích sousedící.

Prvky pole jsou hodnoty, které jsou všechny stejného typu (řetězec, celé číslo, záznam, vlastní objekt).

V Delphi existují dva typy polí: pole pevné velikosti, které vždy zůstává stejné velikosti - statické pole - a dynamické pole, jehož velikost se může za běhu měnit.

Statická pole

Předpokládejme, že píšeme program, který uživateli umožní zadat některé hodnoty (např. Počet schůzek) na začátku každého dne. Rozhodli bychom se uložit informace do seznamu. Tento seznam bychom mohli nazvat Schůzkya každé číslo může být uloženo jako události [1], události [2] atd.

Chcete-li použít seznam, musíme jej nejprve prohlásit. Například:

 var Appointments: array [0..6] of Integer; 

deklaruje proměnnou nazvanou Schůzky, která obsahuje jednorozměrné pole (vektor) 7 celočíselných hodnot. Vzhledem k tomuto prohlášení označuje událost [3] čtvrtou celočíselnou hodnotu v událostech. Číslo v závorce se nazývá index.

instagram viewer

Pokud vytvoříme statické pole ale nepřiřazují hodnoty všem svým prvkům, nepoužité prvky obsahují náhodná data; jsou jako neinicializované proměnné. Následující kód lze použít k nastavení všech prvků v poli Události na 0.

 pro k: = 0 až 6 do Schůzky [k]: = 0; 

Někdy musíme sledovat související informace v poli. Chcete-li například sledovat každý pixel na obrazovce počítače, musíte se odkazovat na jeho souřadnice X a Y pomocí a vícerozměrné pole pro uložení hodnot.

S Delphi můžeme deklarovat pole více dimenzí. Například následující příkaz deklaruje dvourozměrné pole 7 po 24:

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

Chcete-li vypočítat počet prvků ve vícerozměrném poli, vynásobte počet prvků v každém indexu. Proměnná DayHour, deklarovaná výše, vyhrazuje 168 (7 * 24) prvků v 7 řádcích a 24 sloupcích. Pro načtení hodnoty z buňky ve třetím řádku a sedmém sloupci bychom použili: DayHour [3,7] nebo DayHour [3] [7]. Následující kód lze použít k nastavení všech prvků v poli DayHour na 0.

 pro i: = 1 až 7 ano
pro j: = 1 až 24 dělat
DayHour [i, j]: = 0;

Dynamická pole

Možná nevíte přesně, jak velké je vytvoření pole. Možná budete chtít mít schopnost změna velikosti pole za běhu. Dynamické pole deklaruje jeho typ, ale ne jeho velikost. Skutečnou velikost dynamického pole lze změnit za běhu pomocí SetLength postup.

 var Studenti: řada řetězců; 

vytvoří jednorozměrné dynamické pole řetězců. Prohlášení nepřiděluje paměť studentům. Pro vytvoření pole v paměti voláme proceduru SetLength. Například vzhledem k výše uvedenému prohlášení

 SetLength (studenti, 14); 

přiděluje pole 14 řetězců indexovaných 0 až 13. Dynamická pole jsou vždy indexována celočíselně, vždy začínají od 0 do jednoho menší než jejich velikost v prvcích.

Chcete-li vytvořit dvourozměrné dynamické pole, použijte následující kód:

 var Matrix: pole matice Double;
začít
SetLength (Matrix, 10, 20)
konec;

který přiděluje prostor pro dvourozměrné pole s dvojitou desetinnou čárkou o velikosti 10 x 20.

Chcete-li odebrat paměťový prostor dynamického pole, přiřaďte nulové proměnné pole, například:

 Matice: = nula; 

Váš program velmi často neví v době kompilace, kolik prvků bude potřeba; toto číslo bude známo až za běhu. Díky dynamickým polím můžete přidělit pouze tolik úložiště, kolik je v daném okamžiku požadováno. Jinými slovy, velikost dynamických polí se může měnit za běhu, což je jedna z klíčových výhod dynamických polí.

Následující příklad vytvoří pole celočíselných hodnot a poté zavolá funkci Kopírovat a změní velikost pole.

 var
Vector: array of Integer;
k: celé číslo;
začít
SetLength (Vector, 10);
pro k: = Low (Vector) až High (Vector) do
Vektor [k]: = i * 10;
...
// nyní potřebujeme více místa
SetLength (Vector, 20);
// zde může vektorové pole pojmout až 20 prvků // (má již 10 z nich) konec;

Funkce SetLength vytvoří větší (nebo menší) pole a zkopíruje stávající hodnoty do nové pole. Funkce Low a High zajišťují přístup ke všem prvkům pole, aniž byste se v kódu dívali zpět na správné dolní a horní hodnoty indexu.

instagram story viewer