Razumevanje in izvajanje matričnih podatkovnih vrst v Delphiju

Niz nam omogočajo sklicevanje na vrsto spremenljivk z istim imenom in uporabo številke (indeksa) za priklic posameznih elementov v tej seriji. Nizi imajo zgornji in spodnji rob, elementi matrike pa so v teh mejah.

Elementi matrike so vrednosti iste vrste (niz, celo število, zapis, predmet po meri).

V Delphi obstajata dve vrsti nizov: matrika fiksne velikosti, ki vedno ostane enake velikosti - statični niz - in dinamična matrika, katere velikost se lahko med izvajanjem spreminja.

Statični nizi

Recimo, da pišemo program, ki uporabniku omogoča, da v začetku vsakega dne vnese nekatere vrednosti (npr. Število sestankov). Informacije bi izbrali za shranjevanje na seznamu. Ta seznam bi lahko poklicali Sestanki, in vsaka številka je lahko shranjena kot sestanki [1], sestanki [2] in tako naprej.

Za uporabo seznama ga moramo najprej prijaviti. Na primer:

 var Imenovanja: matrika [0..6] od Integer; 

razglasi spremenljivko, imenovano Appointments, ki ima enodimenzionalni niz (vektor) 7 celih vrednosti. Glede na to izjavo Appointments [3] označuje četrto celoštevilčno vrednost v sestankih. Število v oklepaju se imenuje indeks.

instagram viewer

Če ustvarimo a statični niz vendar ne dodelite vrednosti vsem njegovim elementom, neuporabljeni elementi vsebujejo naključne podatke; so kot neinicializirane spremenljivke. Naslednjo kodo lahko uporabite za nastavitev vseh elementov v matriki sestankov na 0.

 za k: = 0 do 6 naredite imenovanja [k]: = 0; 

Včasih moramo spremljati povezane podatke v polju. Na primer, da lahko na zaslonu računalnika spremljate vsak piksel, se morate s pomočjo a obrniti na njegove koordinate X in Y večdimenzionalno matrika za shranjevanje vrednosti.

Z Delphi lahko razglasimo matrike več dimenzij. Naslednji stavek na primer razglasi dvodimenzionalni niz 7 po 24:

 var DayHour: niz [1..7, 1..24] od Reala; 

Če želite izračunati število elementov v večdimenzionalnem polju, pomnožite število elementov v vsakem indeksu. Spremenljivka DayHour, navedena zgoraj, vsebuje 168 (7 * 24) elementov v 7 vrsticah in 24 stolpcih. Za pridobitev vrednosti iz celice v tretji vrstici in sedmem stolpcu bi uporabili: DayHour [3,7] ali DayHour [3] [7]. Z naslednjo kodo lahko vse elemente v polju DayHour nastavite na 0.

 za i: = 1 do 7 naredim
za j: = 1 do 24 narediti
DanHour [i, j]: = 0;

Dinamični nizi

Morda ne veste natančno, kako velik je treba narediti niz. Morda boste želeli imeti sposobnost spreminjanje velikosti matrike med izvajanjem. Dinamični niz označuje svoj tip, ne pa tudi njegove velikosti. Dejansko velikost dinamičnega niza je mogoče med izvajanjem spremeniti z uporabo SetLength postopek.

 var Študentje: niz nizov; 

ustvari enodimenzionalni dinamični niz strun. Deklaracija ne dodeli spomina za študente. Če želite ustvariti matriko v pomnilniku, pokličemo postopek SetLength. Na primer, glede na zgoraj navedeno izjavo,

 SetLength (Študentje, 14 let); 

dodeli matriko 14 nizov, indeksiranih od 0 do 13. Dinamični nizi so vedno indeksirani na celo število in se vedno začnejo od 0 do enega manjši od njihove velikosti v elementih.

Če želite ustvariti dvodimenzionalni dinamični niz, uporabite to kodo:

 var Matrix: matrika matrike Double;
začeti
SetLength (Matrica, 10, 20)
konec;

ki dodeli prostor za dvodimenzionalni niz 10 z 20 dvojnih vrednosti s plavajočo vejico.

Če želite odstraniti pomnilniški prostor dinamičnega polja, dodelite nič spremenljivki matrike, na primer:

 Matrica: = nič; 

Vaš program v času prevajanja ne ve, koliko elementov bo potrebnih; ta številka ne bo znana do izvajanja. Z dinamičnimi nizi lahko dodelite samo toliko prostora, kot je potrebno v določenem času. Z drugimi besedami, velikost dinamičnih nizov se lahko spreminja med izvajanjem, kar je ena ključnih prednosti dinamičnih nizov.

Naslednji primer ustvari matriko celih vrednosti in nato pokliče funkcijo Kopiraj, da spremeni velikost matrike.

 var
Vektor: niz celote;
k: celo število;
začeti
SetLength (Vektor, 10);
za k: = Nizka (vektorska) do visoka (vektorska)
Vektor [k]: = i * 10;
...
// zdaj potrebujemo več prostora
SetLength (Vektor, 20);
// tukaj, Vector array lahko vsebuje do 20 elementov // (ima jih že 10) konec;

Funkcija SetLength ustvari večji (ali manjši) niz in kopira obstoječe vrednosti v nov niz. Funkcije Low in High zagotavljata dostop do vseh elementov matrike, ne da bi se v kodi ozrli za pravilnimi vrednostmi spodnjega in zgornjega indeksa.