13 Vettori e Matrici

Di cosa si tratta?
Chiamato più comunemente array in ambito informatico, formalmente possiamo definire un vettore come una struttura dati complessa, statica ed omogenea.
In parole povere, è una sequenza di celle dove andremo a salvare variabili dello stesso tipo e accederemo a ciascuna di queste celle tramite un indice che le distingue in maniera univoca.
Vediamo meglio le definizioni che abbiamo dato al vettore. È una struttura dati:
Complessa perché non composta da una sola variabile.
Statica perché, quando dichiariamo un vettore di una certa dimensione, verrà occupato in memoria uno spazio fisso che non cambierà in base ai valori che avranno le varie celle del valore.
Omogenea perché nelle celle di un vettore salvo tutte variabili dello stesso tipo (int, string o altro).

DICHIARAZIONE e INIZIALIZZAZIONE
La sintassi generale per dichiarare e inizializzare un vettore è la seguente:

tipovaliabile [] nomevariabile=new tipovariabile[lunghezzavettore];

Ad esempio:

int [] n=new int[5];
String [] s=new String[5];

Possiamo rappresentare graficamente un vettore nel seguente modo:

13.1

Dimensioni variabili
Al contrario di C, possiamo dare le dimensioni al nostro vettore runtime, quindi la lunghezza di un vettore può dipendere da una varibile purché sia intera.
Esempio:

//creo un vettore la cui lunghezza è scelta dall'utente runtime
Scanner sca=new Scanner(System.in);
int n=sca.nextInt();
String [] vettore_stringhe= new String[n];

ACCESSO ALLE CELLE
Per modificare la cella i-esima di un vettore scriviamo:

vettore[indice]=valore;

nb: indice dev’essere un valore compreso tra 0 e la lunghezza del vettore – 1.
cioè indice_prima_cella=0, indice_ultima_cella=lunghezza_vettore-1

Ad esempio, creiamo un vettore di 10 elementi e usiamo un ciclo for per riempire ciascuna cella con il numero del proprio indice. Infine stampiamo il tutto per vedere il risultato del programma.

        int[]vettore=new int[10];
        for(int i=0;i<10;i++)//riempo il vettore
        {
            vettore[i]=i;
        }
        for(int i=0;i<10;i++)//stampo il vettore
        {
            if(i<9)
                System.out.print(vettore[i]+"-");
            else
                System.out.println(vettore[i]);//dopo l'ultimo valore non voglio il trattino e vado a capo
        }
        System.out.println(vettore);//stampo l'indirizzo del vettore

Indirizzo di un vettore
Come avrete notato facendo partire il codice qui sopra, se stampate “vettore” vedrete una stringa di caratteri generici (perlopiù numeri e lettere). Questa stringa rappresenta l’indirizzo di memoria dove il programma ha salvato il vettore.
Ordine celle in un vettore
Come ho già detto sopra la prima cella di un vettore è la numero 0, quindi partiamo a contare da 0 invece che da 1. Tenete bene a mente questa cosa perché nel mondo dell’informatica si parte sempre a contare da 0.

ARRAY MULTIDIMENSIONALI
Nel titolo abbiamo detto che questo articolo tratterà di vettori e matrici. I primi li abbiamo già visti, adesso tocca ai secondi.
Cos’è una matrice?
Non è altro che un vettore a 2 dimensioni: ciascuna cella quindi sarà identificata da una coppia di valori anziché da un solo indice.
Esempio:

int [][]matrice=new int[x][y];//di solito per le matrici si usano i termini riga e colonna per distinguere la coppia di indici

Il resto delle cose viste sopra vale sempre per le matrici.
Graficamente una matrice può essere rappresentata così:

13.2

Com’è facile immaginare, se dovessimo ripetere il riempimento e la stampa fatta prima per il vettore, anche per la matrice, avremmo due cicli for, uno dentro l’altro. Un ciclo si occuperà di scorrere le righe, mentre un altro le colonne.
Cos’è quindi un array multidimensionale?
Sono sicuro che a questo punto ci sarete già arrivati.
I vettori distinguono ciascuna cella attraverso 1 indice. Le matrici attraverso 2.
Quindi nulla mi vieta di poter creare array a 3, 4, 1000 dimensioni in cui ciascuna cella è identificata attraverso i valori di 3, 4, 1000 indici. Tra l’altro, fino a 3 dimensioni sono in grado di immaginare l’array in “modo grafico”, da 4 in poi no, in quanto noi conosciamo soltanto le 3 dimensioni nelle quali ci spostiamo e viviamo tutti i giorni.

Overflow
È un errore che si verifica quando provate ad accedere ad una cella che esce dai limiti del vostro vettore. Ad esempio se dichiarate un vettore di lunghezza 10 e provate ad accedere alla cella 11 il vostro programma terminerà in maniera imprevista causando l’errore di overflow

ALGORITMI DI INSERIMENTO E ORDINAMENTO
In informatica esiste un grande gruppo di algoritmi più o meno efficenti, che si occupano di come ordinare o riempire un vettore.
Alcuni sono molto semplici, altri veramente complessi e che fanno uso della ricorsione.
Tuttavia, per il momento non li vedremo, volevo giusto spoilerarvi un argomento futuro al quale probabilmente dedicherò più di un articolo, data la pesantezza e importanza.

Ho cercato di essere il più chiaro possibile ma sono conscio che, se è la prima volta che vi avvicinate al mondo dell’informatica, magari avete ancora le idee un po’ confuse. In questo caso non esitate a chiedere nei commenti e vi risponderò con piacere.
Alla prossima!

Please follow and like us: