Buono sconto 4% su Toner e Cartucce agli utenti AZpoint. SU Iomiricarico.it!!
Uno dei vantaggi degli array e delle matrici rispetto alle liste è che è possibile accedere ad un elemento qualunque semplicemente usando l'indice. Questo però comporta uno svantaggio che consiste nella dimensione fissa definita in fase di progettazione degli array cosa che non avviene invece per le liste in quanto sono create e ridimensionate a run-time.
In questo script vedremo come creare degli array o matrici in modo dinamico mantenendo il vantaggio di poter accedere direttamente agli elementi tramite indice e la possibilità di ridimensionare l'array o matrice.
Delphi permette infatti di definire un array dinamico semplicemente omettendo di scrivere la sua lunghezza:
var
// Array a dimensione fisssa
ArrayFisso:array [0..9] of integer;
// Array a dimensione dinamica
ArrayDinamico: array of integer;
// Matrice a dimensione fissa
MatriceDinamica: array of array of integer;
Come possiamo notare nella seconda e terza dichiarazione non abbiamo indicato la dimensione. Le matrici inoltre si dichiarano come array di array, questo permette di creare matrici rettangolari/quadrate o a dimensione indipendente per ogni colonna. Ma vediamo adesso come inizializzare questi array ad una dimensione voluta a run-time:
var Dimensione:integer;
...
Dimensione:=33;
SetLength(ArrayDinamico,Dimensione);
...
Dimensione:=58;
SetLength(ArrayDinamico,Dimensione);
...
Dimensione:=10;
SetLength(ArrayDinamico,Dimensione);
Con l'istruzione SetLength abbiamo allocato dinamicamente un array di 33 elementi. E' possibile ridimensionare successivamente l'array richiamando nuovamente la funzione SetLength con un nuovo valore. Nel caso la nuova dimensione sia maggiore di quella precedente, gli elementi già presenti verranno conservati, se si tratta di un ridimensionamento verso il basso gli elementi oltre il nuovo indice non saranno più accessibili tramite l'array.
Vediamo ora come allocare le matrici in modo dinamico:
...
Dimensione:=10;
SetLength(MatriceDinamica,Dimensione,Dimensione*2);
In questo modo abbiamo allocato una matrice con 10 colonne e 20 righe ma è anche possibile allocare una matrice con un numero di righe diverse per ogni colonna:
...
SetLength(MatriceDinamica,4);
SetLength(MatriceDinamica[1],2);
SetLength(MatriceDinamica[2],4);
SetLength(MatriceDinamica[3],8);
SetLength(MatriceDinamica[4],16);
In questo modo abbiamo prima creato le 4 colonne e poi abbiamo allocato per ogni colonna (tramite utilizzando la posizione MatriceDinamica[i]) un valore diverso di righe.
Una volta allocati, gli array e le matrci dinamiche vengono utilizzati come normali array o matrici accedendo all'elemento nel solito modo.
|