Tipi di dati array in Delphi

Le matrici ci consentono di fare riferimento a una serie di variabili con lo stesso nome e di utilizzare un numero (un indice) per richiamare singoli elementi in quella serie. Le matrici hanno limiti superiore e inferiore e gli elementi della matrice sono contigui all'interno di tali limiti.

Gli elementi dell'array sono valori dello stesso tipo (stringa, numero intero, record, oggetto personalizzato).

In Delphi esistono due tipi di array: un array di dimensioni fisse che rimane sempre della stessa dimensione - un array statico - e un array dinamico le cui dimensioni possono cambiare in fase di esecuzione.

Matrici statiche

Supponiamo di scrivere un programma che consenta all'utente di immettere alcuni valori (ad es. Il numero di appuntamenti) all'inizio di ogni giorno. Vorremmo scegliere di memorizzare le informazioni in un elenco. Potremmo chiamare questo elenco appuntamenti, e ogni numero potrebbe essere memorizzato come Appointments [1], Appointments [2] e così via.

Per utilizzare l'elenco, dobbiamo prima dichiararlo. Per esempio:

 var Appuntamenti: Vettore[0… 6] di Numero intero; 

dichiara una variabile chiamata Appointments che contiene un array monodimensionale (vettore) di 7 valori interi. Data questa dichiarazione, Appointments [3] indica il quarto valore intero in Appointments. Il numero tra parentesi si chiama indice.

Se creiamo un array statico ma non assegniamo valori a tutti i suoi elementi, gli elementi inutilizzati contengono dati casuali; sono come variabili non inizializzate. Il seguente codice può essere utilizzato per impostare tutti gli elementi dell'array Appointments su 0.

 per k: = 0 per 6 fare Appuntamenti [k]: = 0; 

A volte è necessario tenere traccia delle informazioni correlate in un array. Ad esempio, per tenere traccia di ciascun pixel sullo schermo del computer, è necessario fare riferimento alle sue coordinate X e Y utilizzando a multidimensionale array per memorizzare i valori.

Con Delphi, possiamo dichiarare matrici di più dimensioni. Ad esempio, la seguente istruzione dichiara un array bidimensionale 7 per 24:

 var DayHour: Vettore[1 ... 7, 1 ... 24] di Vero; 

Per calcolare il numero di elementi in un array multidimensionale, moltiplicare il numero di elementi in ciascun indice. La variabile DayHour, dichiarata sopra, mette da parte 168 (7 * 24) elementi, in 7 righe e 24 colonne. Per recuperare il valore dalla cella nella terza riga e nella settima colonna dovremmo usare: DayHour [3,7] o DayHour [3] [7]. Il seguente codice può essere utilizzato per impostare tutti gli elementi dell'array DayHour su 0.

 per i: = 1 a 7 do per j: = 1 a 24 do DayHour [i, j]: = 0; 

Matrici dinamiche

Potresti non sapere esattamente quanto è grande per creare un array. Potresti voler avere la capacità di modificando la dimensione dell'array in fase di esecuzione. Un array dinamico dichiara il suo tipo, ma non le sue dimensioni. La dimensione effettiva di un array dinamico può essere modificata in fase di esecuzione mediante la procedura SetLength.

 var Studenti : matrice di stringhe; 

crea una matrice dinamica unidimensionale di stringhe. La dichiarazione non alloca memoria per gli studenti. Per creare l'array in memoria, chiamiamo la procedura SetLength. Ad esempio, data la dichiarazione sopra,

 SetLength (Studenti, 14); 

alloca un array di 14 stringhe, indicizzate da 0 a 13. Le matrici dinamiche sono sempre indicizzate per intero, a partire sempre da 0 a una in meno della loro dimensione in elementi.

Per creare un array dinamico bidimensionale, utilizzare il seguente codice:

 var Matrice: matrice di matrice di Doppio; inizio SetLength (Matrix, 10, 20) fine; 

che alloca spazio per una matrice bidimensionale 10 per 20 di valori a virgola mobile doppi.

Per rimuovere lo spazio di memoria di un array dinamico, assegnare zero alla variabile array, come:

 Matrice: = zero; 

Molto spesso, il tuo programma non sa in fase di compilazione quanti elementi saranno necessari; quel numero non sarà noto fino al runtime. Con gli array dinamici, è possibile allocare solo lo spazio di archiviazione necessario in un determinato momento. In altre parole, la dimensione delle matrici dinamiche può essere modificata in fase di esecuzione, il che è uno dei vantaggi chiave delle matrici dinamiche.

L'esempio seguente crea una matrice di valori interi e quindi chiama la funzione Copia per ridimensionare la matrice.

 var Vettore: matrice di Numero intero; k: intero; inizio SetLength (Vector, 10); per k: = Basso (Vector) per Alta (Vector) fare Vettore [k]: = i * 10;… // ora abbiamo bisogno di più spazio  SetLength (Vector, 20); // qui, l'array Vector può contenere fino a 20 elementi // (ne ha già 10)fine; 

La funzione SetLength crea un array più grande (o più piccolo) e copia i valori esistenti nel nuovo array. Le funzioni Low e High garantiscono l'accesso a tutti gli elementi dell'array senza guardare indietro nel codice per i valori di indice inferiore e superiore corretti.