19. Array bidimensionali: Matrici
Nel capitolo precedente abbiamo iniziato il discorso sugli array monodimensionali, chiamati anche vettori. Abbiamo visto come, strutturalmente, il vettore possa essere accumunato ad una lista, che gode di alcune proprietà. Nell’ultimo capitolo della guida, ovvero questo, parleremo degli array bidimensionali o anche conosciute come Matrici. Nel capitolo vedremo come strutturalmente appaiono le matrici, e come si utilizzano. Parleremo poi delle logiche che sono alla base dei principali algoritmi sulle matrici.
19. Array bidimensionali: matrici
Voglio iniziare il nostro cammino nelle matrici, dando la definizione:
Def: Una matrice è un insieme di dati dello stesso tipo organizzati in una griglia. Ogni elemento della griglia è caratterizzato da due indici (riga e colonna). Es:
riga colonna
| 1 1 | 1 2 | 1 3 | 1 4 |
| 2 1 | 2 2 | 2 3 | 2 4 |
| 3 1 | 3 2 | 3 3 | 3 4 |
Nell’esempio sovrastante (la tabella), abbiamo realizzato graficamente una matrice che ha come elementi, le posizioni delle celle. Ogni elemento, infatti, è contenuto in una cella che è caratterizzata da due indici: l’indice riga e l’indice colonna. E’ chiaro, quindi, che un solo ciclo for non basterà per scorrere o lavorare su una matrice. Ne serviranno due. L’area della matrice è calcolata come l’area del rettangolo, e ci dirà quanti elementi potrà contenere. Vediamo ora le operazioni principali su una matrice e la loro struttura logica. Per gli algoritmi, come nel caso degli array, rimando all’appendice.
Dichiarazione
Essendo una matrice, dovremo dichiarare due dimensioni. Quindi:
Dichiaro Mat [riga][colonna] : tipo
Vi ricordo sempre che il contatore parte da 0. Quindi una matrice 4*3 avrà, in realtà, queste posizioni:
| 0 0 | 0 1 | 0 2 | 0 3 |
| 1 0 | 1 1 | 1 2 | 1 3 |
| 2 0 | 2 1 | 2 2 | 2 3 |
Questo accade nella stragrande maggioranza dei linguaggi, anche se alcuni fanno eccezione alla regola (tra i quali Visual Basic).
Assegnazione
Per assegnare 1 1 alla cella 1 1 faremo così:
Mat [1][1] = “1 1″
Per riempire tutta la matrice, utlizzeremo l’algoritmo di inserimento che è il seguente:
INIZIO
Chiedi (riga)
Chiedi (colonna)Dichiaro Mat1[riga][colonna] : stringa
For (i=0; i<riga; i++)
{
For (j=0; j<riga; j++)
{
Mat1[i][j] = “Elemento”
}
}FINE
Algoritmo di ricerca
Come nei vettori, anche le matrici hanno l’algoritmo di ricerca, che viene spesso utlizzato. Alla base dell’algoritmo di ricerca c’è un confronto. Ciò che dobbiamo fare noi, con questo algoritmo, è cercare un determinato elemento in un array. Quindi con un ciclo for scorreremo tutto il vettore e, ad ogni posizione, controlleremo se l’elemento c’è oppure no. Questo, generalmente si può controllare con un IF. Ma tutta la ricerca la si può fare anche con un while. Tuttavia per un maggiore ordine si preferisce spesso utilizzare FOR e IF insieme.
Una volta trovato l’elemento possiamo fare ciò che vogliamo. Salvarne la posizione, contarne le occorrenze ecc… Per l’algoritmo si rimanda all’appendice.
Chiudo qui il capitolo conclusivo della guida alla programmazione. A breve verranno pubblicate le appendici e l’ultimo capitolo, quello conclusivo della guida. Per ogni problema, indicazione o richiesta, lasciaci un commento.
Tags: Programmazione








