Nizovi nam omogućuju upućivanje na niz varijabli istog naziva i korištenje broja (indeksa) za pozivanje pojedinih elemenata u tom nizu. Nizovi imaju i gornju i donju granicu, a elementi niza su unutar tih granica.
Elementi matrice su vrijednosti koje su sve iste vrste (niz, cijeli broj, zapis, prilagođeni objekt).
U Delphiju postoje dvije vrste nizova: niz fiksne veličine koji uvijek ostaje iste veličine - statički niz - i dinamički niz čija se veličina može mijenjati tijekom izvođenja.
Statički nizovi
Pretpostavimo da pišemo program koji korisniku omogućuje da unese neke vrijednosti (npr. Broj obveza) na početku svakog dana. Odlučili bismo podatke pohraniti na popis. Mogli bismo nazvati ovaj popis imenovanja, a svaki se broj može pohraniti kao Obveze [1], Obveze [2], i tako dalje.
Da bismo koristili popis, prvo ga moramo proglasiti. Na primjer:
var Obveze: niz [0..6] od Integer;
deklarira varijablu zvanu Appointments koja sadrži jednodimenzionalni niz (vektor) od 7 cjelobrojnih vrijednosti. S obzirom na ovu deklaraciju, Imenovanja [3] označava četvrtu cjelobrojnu vrijednost u imenovanju. Broj u zagradama naziva se indeksom.
Ako stvorimo a statički niz ali ne dodijelite vrijednosti svim njegovim elementima, neiskorišteni elementi sadrže slučajne podatke; oni su poput neinicijalizirane varijable. Sljedeći kôd može se koristiti za postavljanje svih elemenata u nizu imenovanja na 0.
za k: = 0 do 6 obaviti sastanke [k]: = 0;
Ponekad trebamo pratiti povezane podatke u nizu. Na primjer, da biste na ekranu svog računala pratili svaki piksel, morate se uputiti na njegove X i Y koordinate koristeći a multidimenzionalan niz za pohranjivanje vrijednosti.
Pomoću Delphija možemo objaviti niz više dimenzija. Na primjer, sljedeća izjava proglašava dvodimenzionalni niz 7 po 24:
var DayHour: niz [1..7, 1..24] od Reala;
Da biste izračunali broj elemenata u višedimenzionalnom nizu, pomnožite broj elemenata u svakom indeksu. Promjena DayHour, gore navedena, izdvaja 168 (7 * 24) elemenata u 7 redaka i 24 stupca. Za dobivanje vrijednosti iz ćelije u trećem redu i sedmom stupcu koristili bismo: DayHour [3,7] ili DayHour [3] [7]. Sljedeći kôd može se koristiti za postavljanje svih elemenata u DayHour nizu na 0.
za i: = 1 do 7 učiniti
za j: = 1 do 24 učiniti
DanHour [i, j]: = 0;
Dinamički nizovi
Možda ne znate točno koliko je moguće napraviti niz. Možda želite imati sposobnost za mijenjanje veličine polja tijekom izvođenja. Dinamički niz označava vrstu, ali ne i veličinu. Stvarna veličina dinamičkog niza može se tijekom izvođenja mijenjati upotrebom SetLength postupak.
var Studenti: niz niza;
stvara jednodimenzionalni dinamički niz struna. Izjava ne raspoređuje memoriju za studente. Da bismo stvorili niz u memoriji, zovemo postupak SetLength. Na primjer, s obzirom na gornju deklaraciju,
SetLength (Studenti, 14);
raspoređuje niz od 14 nizova indeksiranih od 0 do 13. Dinamički nizi uvijek su indeksirani cijelim brojevima, uvijek počinjući od 0 do jedan manji od njihove veličine u elementima.
Da biste stvorili dvodimenzionalni dinamički niz, upotrijebite sljedeći kôd:
var Matrix: niz nizova Double;
početi
SetLength (Matrix, 10, 20)
kraj;
koji raspoređuje prostor za dvodimenzionalni niz od 10 do 20 dvostrukih vrijednosti s pomičnim zarezom.
Da biste uklonili memorijski prostor dinamičke matrice, dodijelite nilu varijabli matrice, poput:
Matrica: = nula;
Vrlo često vaš program ne zna u trenutku sastavljanja koliko će elemenata biti potrebno; taj broj neće biti poznat do izvršavanja. Pomoću dinamičkih nizova možete dodijeliti samo onoliko prostora za pohranu koliko vam je potrebno u određeno vrijeme. Drugim riječima, veličina dinamičkih nizova može se mijenjati tijekom izvođenja, što je jedna od ključnih prednosti dinamičkih nizova.
Sljedeći primjer stvara niz cijelih vrijednosti, a zatim poziva funkciju Kopiranje da promijeni veličinu polja.
var
Vektor: niz Integer-a;
k: cijeli broj;
početi
SetLength (Vektor, 10);
za k: = Nizak (vektor) do visok (vektor)
Vektor [k]: = i * 10;
...
// sada nam treba više prostora
SetLength (Vektor, 20);
// ovdje, Vector array može sadržavati do 20 elemenata // (već ih ima 10) kraj;
Funkcija SetLength stvara veći (ili manji) niz i kopira postojeće vrijednosti u novi niz. Funkcije Low i High osiguravaju pristup svakom elementu polja bez gledanja u kod za ispravne vrijednosti donjeg i gornjeg indeksa.