Schițele ne permit să ne referim la o serie de variabile cu același nume și să folosim un număr (un index) pentru a chema elemente individuale din acea serie. Schițele au limitele superioare și inferioare, iar elementele tabloului sunt contigua în aceste limite.
Elementele tabloului sunt valori de același tip (șir, număr întreg, înregistrare, obiect personalizat).
În Delphi, există două tipuri de tablouri: un tablou cu dimensiuni fixe, care rămâne întotdeauna aceeași dimensiune - un tablou static - și un tablou dinamic a cărui dimensiune se poate modifica în timp de rulare.
Arrayuri statice
Să presupunem că scriem un program care permite utilizatorului să introducă anumite valori (de exemplu, numărul de întâlniri) la începutul fiecărei zile. Am alege să stocheze informațiile într-o listă. Am putea numi această listă Numiriși fiecare număr ar putea fi stocat ca numiri [1], numiri [2] și așa mai departe.
Pentru a utiliza lista, trebuie să o declaram mai întâi. De exemplu:
var Nume: tablou [0..6] de număr întreg;
declară o variabilă numită Numiri care deține un tablou unidimensional (vector) cu 7 valori întregi. Având în vedere această declarație, numiri [3] denotă a patra valoare integrală în numiri. Numărul din paranteze se numește index.
Dacă creăm un matrice statică dar nu alocați valori tuturor elementelor sale, elementele neutilizate conțin date aleatorii; sunt ca niște variabile neinicializate. Următorul cod poate fi utilizat pentru a seta toate elementele din tabloul de numiri la 0.
pentru k: = 0 până la 6 faceți numiri [k]: = 0;
Uneori trebuie să urmărim informațiile aferente într-un tablou. De exemplu, pentru a urmări fiecare pixel pe ecranul computerului, trebuie să vă referiți la coordonatele sale X și Y folosind un multidimensională matrice pentru a stoca valorile.
Cu Delphi, putem declara tablouri cu dimensiuni multiple. De exemplu, următoarea declarație declară un tablou bidimensional 7 cu 24:
var DayHour: array [1..7, 1..24] din Real;
Pentru a calcula numărul de elemente dintr-un tablou multidimensional, înmulțiți numărul de elemente din fiecare index. Variabila DayHour, declarată mai sus, pune deoparte 168 (7 * 24) elemente, în 7 rânduri și 24 coloane. Pentru a prelua valoarea din celula din al treilea rând și a șaptea coloană, am folosi: DayHour [3,7] sau DayHour [3] [7]. Codul următor poate fi utilizat pentru a seta toate elementele din tabloul DayHour la 0.
pentru i: = 1 până la 7 do
pentru j: = 1 până la 24 do
DayHour [i, j]: = 0;
Schițe dinamice
Este posibil să nu știți exact cât de mare să faceți un tablou. Poate doriți să aveți capacitatea de schimbarea dimensiunii tabloului la timpul de execuție. Un tablou dinamic declară tipul său, dar nu și dimensiunea acestuia. Mărimea reală a unui tablou dinamic poate fi modificată la runtime prin utilizarea funcției setlength procedură.
var Studenți: șir de șiruri;
creează o serie dinamică unidimensională de șiruri. Declarația nu alocă memorie pentru studenți. Pentru a crea tabloul în memorie, apelăm la procedura SetLength. De exemplu, având în vedere declarația de mai sus,
SetLength (Studenți, 14);
alocă un tablou de 14 șiruri, indexat de la 0 la 13. Matricele dinamice sunt întotdeauna indexate întregi, începând întotdeauna de la 0 la unul mai puțin decât dimensiunea lor în elemente.
Pentru a crea un tablou dinamic bidimensional, utilizați următorul cod:
var Matrix: tablou de game de Double;
începe
SetLength (Matrice, 10, 20)
Sfârșit;
care alocă spațiu pentru un tablou bidimensional, 10 -20, cu valori duble în virgulă flotantă.
Pentru a elimina spațiul de memorie al unui tablou dinamic, alocați nul variabilei matrice, cum ar fi:
Matrice: = nil;
Foarte des, programul dvs. nu știe la momentul compilării câte elemente vor fi necesare; acest număr nu va fi cunoscut până la execuție. Cu ajutorul tablelor dinamice, puteți aloca doar atât spațiu de stocare cât este necesar la un moment dat. Cu alte cuvinte, dimensiunea tablourilor dinamice poate fi modificată la timpul de rulare, acesta fiind unul dintre avantajele cheie ale matricelor dinamice.
Următorul exemplu creează un tablou de valori întregi și apoi apelează funcția Copiere pentru redimensionarea tabloului.
var
Vector: tablou de întregi;
k: număr întreg;
începe
SetLength (Vector, 10);
pentru k: = Low (Vector) până la High (Vector) do
Vector [k]: = i * 10;
...
// acum avem nevoie de mai mult spațiu
SetLength (Vector, 20);
// aici, tabloul vectorial poate reține până la 20 de elemente // (are deja 10 dintre ele);
Funcția SetLength creează un tablou mai mare (sau mai mic) și copiază valorile existente în noul tablou. Funcțiile Low și High vă asigură accesarea fiecărui element de tablă fără a privi înapoi codul pentru valorile indexului inferior și superior corecte.