Matriisitietotyyppien ymmärtäminen ja toteuttaminen Delphissä

Matriisien avulla voimme viitata saman nimen muuttujasarjaan ja käyttää numeroa (hakemistoa) kyseisen sarjan yksittäisten elementtien kutsumiseen. Ryhmillä on sekä ylä- että alarajat ja taulukon elementit ovat vierekkäisiä noissa rajoissa.

Taulukon elementit ovat arvoja, jotka ovat samantyyppisiä (merkkijono, kokonaisluku, tietue, mukautettu objekti).

Delphissä on kahden tyyppisiä taulukkoja: kiinteän koon taulukko, joka pysyy aina samana kokoisena - staattinen taulukko - ja dynaaminen taulukko, jonka koko voi muuttua suorituksen aikana.

Staattiset ryhmät

Oletetaan, että kirjoitamme ohjelman, jonka avulla käyttäjä voi kirjoittaa joitain arvoja (esim. Tapaamisten määrä) kunkin päivän alussa. Haluaisimme tallentaa tiedot luetteloon. Voimme kutsua tätä luetteloa nimitykset, ja jokainen numero voidaan tallentaa nimityksinä [1], nimityksinä [2] ja niin edelleen.

Jotta luetteloa voitaisiin käyttää, meidän on ensin julistettava se. Esimerkiksi:

 var nimitykset: kokonaisluvun matriisi [0..6]; 

julistaa muuttujan nimeltä Appointments, jolla on 7-kokonaislukuarvoinen yhden ulottuvuuden matriisi (vektori). Tämän ilmoituksen perusteella nimitykset [3] merkitsevät nimitysten neljättä kokonaislukuarvoa. Suluissa olevaa numeroa kutsutaan hakemistoksi.

instagram viewer

Jos luomme staattinen taulukko mutta älä anna arvoa kaikille sen elementeille, käyttämättömät elementit sisältävät satunnaista tietoa; ne ovat kuin aloittamattomia muuttujia. Seuraavaa koodia voidaan käyttää asettamaan kaikki nimitysmatriisin elementit arvoon 0.

 k: = 0 - 6 tehdä nimitykset [k]: = 0; 

Joskus meidän on pidettävä kirjaa liittyvistä tiedoista ryhmässä. Esimerkiksi, jotta voit seurata jokaista pikseliä tietokoneen näytöllä, sinun on viitattava sen X- ja Y-koordinaateihin painikkeella a moniulotteinen taulukko arvojen tallentamiseksi.

Delphin avulla voimme julistaa moniulotteisia taulukkoja. Esimerkiksi seuraava lause julistaa kaksiulotteisen 7: 24-taulukon:

 var DayHour: ryhmä [1..7, 1..24] Realista; 

Laskeaksesi moniulotteisen taulukon elementtien lukumäärän, kerrota elementtien lukumäärä jokaisessa hakemistossa. Edellä ilmoitettu DayHour-muuttuja kumoaa 168 (7 * 24) elementtiä 7 rivissä ja 24 sarakkeessa. Käytämme arvon noutamiseksi kolmannen rivin ja seitsemännen sarakkeen solusta: DayHour [3,7] tai DayHour [3] [7]. Seuraavaa koodia voidaan käyttää asettamaan kaikki DayHour-taulukon elementit arvoon 0.

 i: lle = 1 - 7 tehdä
j: lle = 1 - 24 do
DayHour [i, j]: = 0;

Dynaamiset taulukot

Et ehkä tiedä tarkalleen kuinka suuri on taulukon tekeminen. Haluat ehkä olla kyky taulukon koon muuttaminen suorituksen aikana. Dynaaminen taulukko ilmoittaa tyypin, mutta ei koon. Dynaamisen taulukon todellista kokoa voidaan muuttaa ajon aikana setlength menettely.

 var Opiskelijat: jonojono; 

luo yhden ulotteisen dynaamisen joukon merkkijonoja. Ilmoituksessa ei varata muistia opiskelijoille. Luodaksesi taulukon muistiin kutsumme SetLength-menettelytapaa. Esimerkiksi ottaen huomioon edellä olevan ilmoituksen,

 SetLength (Opiskelijat, 14); 

allokoi joukon 14 merkkijonoa, indeksoituna 0 - 13. Dynaamiset taulukot indeksoidaan aina kokonaislukuina, aina alkaen nollasta yhteen pienemmäksi kuin niiden koko elementeissä.

Luo kaksiulotteinen dynaaminen taulukko seuraavalla koodilla:

 var Matrix: ryhmä kaksinkertaisen taulukon;
alkaa
SetLength (Matrix, 10, 20)
end;

joka varaa tilaa kaksiulotteiselle, 10 -20-ryhmälle kaksinkertaisen liukulukuarvon arvoja.

Voit poistaa dynaamisen taulukon muistitilan määrittämällä taulukkomuuttujalle nolla, kuten:

 Matriisi: = nolla; 

Hyvin usein ohjelmasi ei tiedä kerättäessä, kuinka monta elementtiä tarvitaan; numeroa ei tiedetä ennen ajonaikaa. Dynaamisissa ryhmissä voit varata vain niin paljon tallennustilaa kuin tietyllä hetkellä vaaditaan. Toisin sanoen dynaamisten taulukkojen kokoa voidaan muuttaa ajon aikana, mikä on yksi dynaamisten taulukkojen tärkeimmistä eduista.

Seuraava esimerkki luo joukon kokonaislukuarvoja ja kutsuu sitten Kopioi-toimintoa muuttamaan taulukon kokoa.

 var
Vektori: kokonaislukumäärä;
k: kokonaisluku;
alkaa
SetLength (vektori, 10);
k: = Matala (Vector) - korkea (Vector) tehdä
Vektori [k]: = i * 10;
...
// Tarvitsemme nyt enemmän tilaa
SetLength (vektori, 20);
// täällä vektorimatriisi voi sisältää jopa 20 elementtiä // (siinä on jo 10 niistä) loppu;

SetLength-toiminto luo suuremman (tai pienemmän) taulukon ja kopioi olemassa olevat arvot uusi ryhmä. Matala ja korkea toiminnot takaavat pääsyn jokaiseen matriisielementtiin etsimättä takaisin koodiin oikeita ala- ja ylemmän indeksin arvoja.