A tömbtípusok megértése és megvalósítása Delphiben

A tömbök lehetővé teszik, hogy egy azonos nevű változó sorozatra hivatkozzunk, és egy számot (indexet) használjunk az adott sorozat egyes elemeinek kihívására. A tömböknek mind a felső, mind az alsó határai vannak, és a tömb elemei egymással szomszédosak.

A tömb elemei olyan értékek, amelyek mind azonos típusúak (karakterlánc, egész szám, rekord, egyedi objektum).

A Delphi-ben kétféle tömb létezik: egy rögzített méretű tömb, amely mindig azonos méretű marad - egy statikus tömb - és egy dinamikus tömb, amelynek mérete futás közben megváltozhat.

Statikus tömbök

Tegyük fel, hogy olyan programot írunk, amely lehetővé teszi a felhasználó számára, hogy minden nap elején megadjon bizonyos értékeket (például a találkozók számát). Az információkat egy listában tároljuk. Felhívhatjuk ezt a listát kinevezések, és minden szám tárolható mint Találkozók [1], Találkozók [2] stb.

A lista használatához először ki kell deklarálnunk. Például:

 var kinevezések: egész szám [0..6] tömbje; 

kijelenti az Appointments nevű változót, amely 7 egész számból álló egydimenziós tömböt (vektort) tart. Ezen nyilatkozat alapján a Kinevezések [3] a Kinevezések negyedik egész értékét jelöli. A zárójelben szereplő számot indexnek nevezik.

instagram viewer

Ha létrehozunk egy statikus tömb de ne rendeljen értéket minden eleméhez, a fel nem használt elemek véletlenszerű adatokat tartalmaznak; olyanok, mint az inicializálatlan változók. A következő kód használható az Találkozók tömb összes elemének 0-ra állításához.

 k esetén: = 0-tól 6-ig: kinevezések [k]: = 0; 

Időnként a kapcsolódó információkat tömbön kell nyomon követni. Például ahhoz, hogy nyomon tudja követni az egyes képpontokat a számítógép képernyőjén, a a segítségével kell hivatkoznia annak X és Y koordinátáira többdimenziós tömb az értékek tárolására.

A Delphi-vel többdimenziós tömböket deklarálhatunk. Például a következő állítás egy kétdimenziós 7x24 tömböt deklarál:

 var DayHour: tömb [1..7, 1..24] a Real-ból; 

A többdimenziós tömbben lévő elemek számának kiszámításához szorozzuk meg az indexekben szereplő elemek számát. A DayHour fent megadott változója 168 (7 * 24) elemet 7 sorban és 24 oszlopban tárol. Az érték kinyeréséhez a harmadik sor és a hetedik oszlop cellájából a következőket használjuk: DayHour [3,7] vagy DayHour [3] [7]. A következő kód használható a DayHour tömb összes elemének 0-ra állításához.

 az i esetében: = 1-7
j esetében: = 1–24
DayHour [i, j]: = 0;

Dinamikus tömbök

Lehet, hogy nem tudja pontosan, mekkora lehet egy tömb elkészítése. Érdemes lehet a a tömb méretének megváltoztatása futás közben. A dinamikus tömb deklarálja a típusát, de nem a méretét. A dinamikus tömb tényleges mérete futási időben megváltoztatható a SetLength eljárást.

 var hallgatók: húr tömb; 

egydimenziós dinamikus vonósort hoz létre. A nyilatkozat nem oszt ki memóriát a hallgatók számára. A tömb memóriában történő létrehozásához SetLength eljárást hívunk. Például, tekintettel a fenti nyilatkozatra,

 SetLength (hallgatók, 14 év); 

14 karakterlánc tömböt oszt fel, 0-tól 13-ig indexelve. A dinamikus tömbök mindig egész számba kerülnek, mindig 0-ról egyre kezdve, mint az elemek méretük.

Kétdimenziós dinamikus tömb létrehozásához használja a következő kódot:

 var mátrix: a kettős tömb tömbje;
kezdődik
SetLength (Matrix, 10, 20)
végén;

amely helyet foglal el a kettős lebegőpontos értékek kétdimenziós, 10-szeres 20-as tömbje számára.

A dinamikus tömb memóriaterületének eltávolításához nullát rendeljen a tömbváltozóhoz, például:

 Mátrix: = nulla; 

Nagyon gyakran a program nem tudja, hogy összeállításakor hány elemre lesz szükség; ez a szám csak futásidőig lesz ismert. A dinamikus tömbökkel csak annyi tárhelyet foglalhat el, amennyire egy adott időben szükség van. Más szavakkal: a dinamikus tömbök mérete futás közben megváltoztatható, ami a dinamikus tömbök egyik legfontosabb előnye.

A következő példa egész számok tömbjét hoz létre, majd meghívja a Másolás funkciót a tömb átméretezéséhez.

 var
Vektor: egész szám tömb;
k: egész szám;
kezdődik
SetLength (Vector, 10);
k esetében: = alacsony (vektor) - magas (vektor) csinál
Vektor [k]: = i * 10;
...
// most több helyre van szükségünk
SetLength (Vector, 20);
// itt a Vector tömb legfeljebb 20 elemet képes tárolni // (ezekből már tíz is van);

A SetLength függvény egy nagyobb (vagy kisebb) tömböt hoz létre, és a meglévő értékeket átmásolja a új tömb. Az Alacsony és a Magas funkciók lehetővé teszik, hogy minden tömb elemhez hozzáférjen, anélkül hogy visszanézné a kódjában a helyes alsó és felső értéket.

instagram story viewer