utfcode
[Link] 3.10 UTF-8 input encoding 13.06.2000
scanner for code UTF-8 installed.
1
Le Matrici in Informatica
Strutture Dati Bidimensionali, Algoritmi e Operazioni
Appunti di Informatica
21 luglio 2026
Indice
1 Caratteristiche di una Matrice 3
1.1 Matrici Quadrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Controllo della Dimensione e Allocazione 3
3 Caricamento e Stampa di una Matrice 4
4 Gestione e Scansione di una Matrice 4
5 Operazioni Fondamentali sulle Matrici 5
5.1 1. Somma di due Matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2 2. Trasposizione di una Matrice . . . . . . . . . . . . . . . . . . . . . . . . 5
5.3 3. Ricerca di un Elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.4 4. Operazioni sulle Diagonali (Matrici Quadrate) . . . . . . . . . . . . . . 6
6 Tabella della Complessità Computazionale 6
2
1 Caratteristiche di una Matrice
Una matrice (o array bidimensionale) è una struttura dati omogenea, permanente e ad
accesso diretto, organizzata secondo una griglia di righe e colonne.
• Omogeneità: Tutti gli elementi della matrice sono dello stesso tipo di dato.
• Indicizzazione bidimensionale: Ogni elemento è identificato in modo univoco
da una coppia ordinata di indici (i, j), dove i rappresenta l’indice di riga e j l’indice
di colonna.
• Accesso Diretto: L’accesso ad un qualsiasi elemento M [i][j] avviene con comples-
sità temporale costante O(1).
Formale matematicamente, una matrice M di dimensioni R × C (R righe e C colonne)
è definita come una funzione:
M : {0, 1, . . . , R − 1} × {0, 1, . . . , C − 1} → TipoDati
Un elemento generico si indica con Mi,j oppure M [i][j], dove:
0≤i<R e 0≤j<C
1.1 Matrici Quadrate
Se R = C = N , la matrice si dice quadrata di ordine N . Nelle matrici quadrate si
distinguono due diagonali fondamentali:
• Diagonale Principale: Insieme degli elementi con indici uguali, {M [i][j] | i = j}.
• Diagonale Secondaria: Insieme degli elementi per cui la somma degli indici è
costante, {M [i][j] | i + j = N − 1}.
2 Controllo della Dimensione e Allocazione
In C++, la dimensione fisica massima delle righe (M AX R) e delle colonne (M AX C)
deve essere definita staticamente, mentre le dimensioni logiche R e C vengono convalidate
a runtime.
1 const int MAX_R = 50;
2 const int MAX_C = 50;
3 int M [ MAX_R ][ MAX_C ];
4 int R , C ;
5
6 // Input controllato per righe e colonne
7 do {
8 cout << " Inserisci numero di righe (1 - " << MAX_R << " ) : " ;
9 cin >> R ;
10 } while ( R < 1 || R > MAX_R ) ;
11
3
12 do {
13 cout << " Inserisci numero di colonne (1 - " << MAX_C << " ) : "
;
14 cin >> C ;
15 } while ( C < 1 || C > MAX_C ) ;
Listing 1: Dichiarazione e input controllato delle dimensioni
—
3 Caricamento e Stampa di una Matrice
Il popolamento e la visualizzazione di una matrice si effettuano attraverso due cicli ni-
dificati: il ciclo esterno scorre le righe, quello interno scorre le colonne. La complessità
temporale è proporzionale al numero totale di elementi: O(R · C).
1 // Caricamento per righe
2 for ( int i = 0; i < R ; i ++) {
3 for ( int j = 0; j < C ; j ++) {
4 cout << " M [ " << i << " ][ " << j << " ] = " ;
5 cin >> M [ i ][ j ];
6 }
7 }
8
9 // Stampa in forma matriciale
10 for ( int i = 0; i < R ; i ++) {
11 for ( int j = 0; j < C ; j ++) {
12 cout << M [ i ][ j ] << " \ t " ;
13 }
14 cout << endl ; // A capo alla fine di ogni riga
15 }
Listing 2: Caricamento e Stampa
—
4 Gestione e Scansione di una Matrice
A seconda dell’algoritmo, la scansione della matrice può avvenire secondo diverse moda-
lità:
1. Scansione per Righe: Il ciclo esterno varia l’indice i (riga), quello interno l’indice
j (colonna).
2. Scansione per Colonne: Il ciclo esterno varia l’indice j (colonna), quello interno
l’indice i (riga).
3. Scansione di una Singola Riga (r): Si fissa l’indice i = r e si varia j da 0 a
C − 1.
4. Scansione di una Singola Colonna (c): Si fissa l’indice j = c e si varia i da 0 a
R − 1.
4
1 int colonnaScelta = 2;
2 int sommaColonna = 0;
3
4 for ( int i = 0; i < R ; i ++) {
5 sommaColonna += M [ i ][ colonnaScelta ];
6 }
Listing 3: Somma dei valori di una specifica colonna c
—
5 Operazioni Fondamentali sulle Matrici
5.1 1. Somma di due Matrici
Date due matrici A e B delle stesse dimensioni R × C, la matrice somma S = A + B è
tale che:
S[i][j] = A[i][j] + B[i][j], ∀i ∈ {0, . . . , R − 1}, ∀j ∈ {0, . . . , C − 1}
1 int S [ MAX_R ][ MAX_C ];
2
3 for ( int i = 0; i < R ; i ++) {
4 for ( int j = 0; j < C ; j ++) {
5 S [ i ][ j ] = A [ i ][ j ] + B [ i ][ j ];
6 }
7 }
Listing 4: Somma elemento per elemento di due matrici
5.2 2. Trasposizione di una Matrice
La **matrice trasposta** T di una matrice M di dimensione R × C ha dimensione C × R
ed è ottenuta scambiando le righe con le colonne:
T [j][i] = M [i][j]
1 int T [ MAX_C ][ MAX_R ];
2
3 for ( int i = 0; i < R ; i ++) {
4 for ( int j = 0; j < C ; j ++) {
5 T [ j ][ i ] = M [ i ][ j ];
6 }
7 }
Listing 5: Calcolo della matrice trasposta
5.3 3. Ricerca di un Elemento
Ricerca di un valore target all’interno della matrice con interruzione anticipata appena
trovato:
5
1 int target = 42;
2 bool trovato = false ;
3 int rigaTrovata = -1 , colTrovata = -1;
4
5 for ( int i = 0; i < R && ! trovato ; i ++) {
6 for ( int j = 0; j < C && ! trovato ; j ++) {
7 if ( M [ i ][ j ] == target ) {
8 trovato = true ;
9 rigaTrovata = i ;
10 colTrovata = j ;
11 }
12 }
13 }
Listing 6: Ricerca di un valore target
5.4 4. Operazioni sulle Diagonali (Matrici Quadrate)
Sia M una matrice quadrata di ordine N :
1 // Triangolare inferiore : pone a 0 gli elementi con j > i
2 for ( int i = 0; i < N ; i ++) {
3 for ( int j = i + 1; j < N ; j ++) {
4 M [ i ][ j ] = 0;
5 }
6 }
Listing 7: Azzera elementi al di sopra della diagonale principale
—
6 Tabella della Complessità Computazionale
Operazione Complessità Temporale
Accesso al singolo elemento M [i][j] O(1)
Caricamento / Stampa completa O(R · C)
Somma di due matrici R × C O(R · C)
Trasposizione di una matrice R × C O(R · C)
Ricerca esaustiva (Caso Peggiore) O(R · C)
Scansione Diagonale Principale (Matrice N × N ) O(N )
Tabella 1: Complessità temporale delle principali operazioni sulle matrici.