Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni6 pagine

Mat Rice

Il documento tratta delle matrici in informatica, descrivendo le loro caratteristiche, gestione, e operazioni fondamentali come somma, trasposizione e ricerca di elementi. Viene fornito un indice dettagliato e esempi di codice in C++ per illustrare il caricamento, la stampa e la scansione delle matrici. Inoltre, è inclusa una tabella della complessità computazionale per le operazioni sulle matrici.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni6 pagine

Mat Rice

Il documento tratta delle matrici in informatica, descrivendo le loro caratteristiche, gestione, e operazioni fondamentali come somma, trasposizione e ricerca di elementi. Viene fornito un indice dettagliato e esempi di codice in C++ per illustrare il caricamento, la stampa e la scansione delle matrici. Inoltre, è inclusa una tabella della complessità computazionale per le operazioni sulle matrici.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

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.

Potrebbero piacerti anche