· Andrea Pollini · programmazione · 14 min read

20 Esercizi svolti sulle matrici in C++

Una raccolta di esercizi svolti sulle matrici in C++ per aiutarti a consolidare le tue conoscenze e a prepararti per gli esami di informatica.

Una raccolta di esercizi svolti sulle matrici in C++ per aiutarti a consolidare le tue conoscenze e a prepararti per gli esami di informatica.

In questa raccolta di esercizi svolti, affronteremo una serie di problemi relativi alle matrici in C++. Gli esercizi sono suddivisi in diversi livelli di difficoltà, dal più semplice al più complesso, per aiutarti a consolidare le tue conoscenze e a prepararti per gli esami di informatica.

Esercizio 1: Dichiarazione e Inizializzazione di una Matrice

Scrivi un programma in C++ che dichiara una matrice 3x3 di interi e la inizializza con valori forniti dall’utente.

Soluzione all’esercizio 1

Esercizio 2: Stampa di una Matrice

Scrivi un programma che legge una matrice 4x4 di interi e stampa la matrice a schermo.

Soluzione all’esercizio 2

Esercizio 3: Somma di Due Matrici

Scrivi un programma che legge due matrici 2x2 di interi, calcola la loro somma e stampa il risultato.

Soluzione all’esercizio 3

Esercizio 4: Prodotto di Due Matrici

Scrivi un programma che legge due matrici 2x2 di interi, calcola il loro prodotto e stampa il risultato.

Soluzione all’esercizio 4

Esercizio 5: Trasposizione di una Matrice

Scrivi un programma che legge una matrice 3x3 di interi, calcola la sua trasposta e la stampa.

Soluzione all’esercizio 5

Esercizio 6: Determinante di una Matrice 2x2

Scrivi un programma che legge una matrice 2x2 di interi e calcola il suo determinante.

Esercizio 7: Ricerca di un Elemento

Scrivi un programma che legge una matrice 4x4 di interi e un valore, quindi verifica se il valore è presente nella matrice.

Esercizio 8: Massimo e Minimo di una Matrice

Scrivi un programma che legge una matrice 3x3 di interi e trova il massimo e il minimo valore presenti nella matrice.

Esercizio 9: Somma degli Elementi di una Matrice

Scrivi un programma che legge una matrice 3x3 di interi e calcola la somma di tutti i suoi elementi.

Esercizio 10: Somma degli Elementi di una Riga

Scrivi un programma che legge una matrice 4x4 di interi e calcola la somma degli elementi di una riga specifica, fornita dall’utente.

Esercizio 11: Somma degli Elementi di una Colonna

Scrivi un programma che legge una matrice 4x4 di interi e calcola la somma degli elementi di una colonna specifica, fornita dall’utente.

Esercizio 12: Matrice Identità

Scrivi un programma che crea e stampa una matrice identità 4x4.

Esercizio 13: Moltiplicazione per uno Scalare

Scrivi un programma che legge una matrice 3x3 di interi e un valore scalare, quindi moltiplica ogni elemento della matrice per lo scalare e stampa il risultato.

Esercizio 14: Verifica di una Matrice Simmetrica

Scrivi un programma che legge una matrice 3x3 di interi e verifica se la matrice è simmetrica.

Esercizio 15: Calcolo della Traccia di una Matrice

Scrivi un programma che legge una matrice 3x3 di interi e calcola la traccia della matrice (la somma degli elementi della diagonale principale).

Esercizio 16: Rotazione di una Matrice 90 Gradi

Scrivi un programma che legge una matrice 3x3 di interi e la ruota di 90 gradi in senso orario, quindi stampa la matrice risultante.

Esercizio 17: Calcolo della Matrice Inversa (2x2)

Scrivi un programma che legge una matrice 2x2 di interi, verifica se è invertibile e, in tal caso, calcola e stampa la matrice inversa.

Esercizio 18: Somma degli Elementi della Diagonale Principale e Secondaria

Scrivi un programma che legge una matrice 3x3 di interi e calcola la somma degli elementi della diagonale principale e della diagonale secondaria.

Esercizio 19: Conversione di una Matrice in un Vettore

Scrivi un programma che legge una matrice 3x3 di interi e converte la matrice in un vettore, quindi stampa il vettore risultante.

Esercizio 20: Confronto di Due Matrici

Scrivi un programma che legge due matrici 3x3 di interi e verifica se le due matrici sono uguali.

Soluzioni degli Esercizi

Soluzione Esercizio 1

Obiettivo

Scrivere un programma in C++ che dichiara una matrice 3x3 di interi e la inizializza con valori forniti dall’utente.

Teoria

In C++, una matrice (o array bidimensionale) è una struttura che consente di memorizzare dati in righe e colonne. La dichiarazione di una matrice richiede la specificazione del tipo di dato degli elementi, il numero di righe e il numero di colonne.

Dichiarazione di una Matrice

Per dichiarare una matrice 3x3 di interi in C++, si utilizza la seguente sintassi:

int matrix[3][3];

Inizializzazione della Matrice

La matrice può essere inizializzata in diversi modi:

  1. Durante la dichiarazione:

    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    
  2. Tramite input dell’utente: Si utilizza un ciclo annidato per iterare attraverso le righe e le colonne, chiedendo all’utente di inserire un valore per ciascun elemento.

Passaggi per Risolvere l’Esercizio

  1. Dichiarare la matrice.
  2. Utilizzare due cicli for annidati per iterare su righe e colonne.
  3. Chiedere all’utente di inserire un valore per ciascun elemento della matrice.
  4. Stampare la matrice per verificare l’inserimento corretto dei dati.

Codice C++

Ecco il codice C++ per l’esercizio:

#include <iostream>

using namespace std;

int main() {
    // Dichiarazione della matrice 3x3
    int matrix[3][3];

    // Inizializzazione della matrice con input dell'utente
    cout << "Inserisci i valori per una matrice 3x3:" << endl;
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            cout << "Inserisci il valore per matrix[" << i << "][" << j << "]: ";
            cin >> matrix[i][j];
        }
    }

    // Stampa della matrice per verificare l'inserimento
    cout << "La matrice inserita è:" << endl;
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Spiegazione del Codice

  1. Inclusione della Libreria:

    #include <iostream>
    

    Viene inclusa la libreria iostream per l’input e l’output standard.

  2. Dichiarazione dello Spazio dei Nomi:

    using namespace std;
    

    Questo permette di utilizzare direttamente cin e cout senza dover scrivere std::.

  3. Funzione main(): Il punto di ingresso del programma.

  4. Dichiarazione della Matrice:

    int matrix[3][3];
    

    Viene dichiarata una matrice 3x3 di interi.

  5. Inserimento dei Valori da Parte dell’Utente:

    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            cout << "Inserisci il valore per matrix[" << i << "][" << j << "]: ";
            cin >> matrix[i][j];
        }
    }
    

    Vengono utilizzati due cicli for annidati per iterare su righe e colonne. L’utente inserisce un valore per ciascun elemento della matrice.

  6. Stampa della Matrice:

    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    

    Si utilizzano di nuovo due cicli for annidati per stampare la matrice. Ciascun elemento è seguito da uno spazio e ogni riga è seguita da una nuova linea.

Questo codice permette di dichiarare, inizializzare e stampare una matrice 3x3 di interi in C++ con valori forniti dall’utente.

Soluzione Esercizio 2

Teoria

Una matrice è una struttura di dati bidimensionale costituita da righe e colonne. In C++, una matrice può essere rappresentata come un array di array. Per leggere e stampare una matrice, è necessario utilizzare cicli annidati: il ciclo esterno itera attraverso le righe, mentre il ciclo interno itera attraverso le colonne.

Passaggi

  1. Dichiarazione della matrice: Dichiara una matrice di dimensioni 4x4.
  2. Lettura dei valori: Utilizza cicli for annidati per leggere i valori della matrice forniti dall’utente.
  3. Stampa della matrice: Utilizza cicli for annidati per stampare i valori della matrice.

Codice in C++

Ecco un esempio di codice C++ che legge una matrice 4x4 di interi e la stampa a schermo:

#include <iostream>
using namespace std;

int main() {
    // Dichiarazione della matrice 4x4
    int matrice[4][4];

    // Lettura dei valori della matrice
    cout << "Inserisci i valori della matrice 4x4:" << endl;
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            cout << "Elemento [" << i << "][" << j << "]: ";
            cin >> matrice[i][j];
        }
    }

    // Stampa della matrice
    cout << "La matrice inserita è:" << endl;
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            cout << matrice[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Spiegazione del Codice

  1. Inclusione della libreria iostream: Questa libreria permette l’uso di input e output in C++.

  2. Uso del namespace std: Evita di dover scrivere std:: prima di ogni operazione di input/output.

  3. Dichiarazione della matrice: int matrice[4][4]; dichiara una matrice di interi con 4 righe e 4 colonne.

  4. Lettura dei valori:

    • Viene utilizzato un doppio ciclo for per iterare attraverso tutte le posizioni della matrice.
    • cin >> matrice[i][j]; legge il valore inserito dall’utente e lo memorizza nella posizione [i][j] della matrice.
  5. Stampa della matrice:

    • Un altro doppio ciclo for viene utilizzato per iterare attraverso tutte le posizioni della matrice.
    • cout << matrice[i][j] << " "; stampa il valore nella posizione [i][j], seguito da uno spazio.
    • cout << endl; viene utilizzato per andare a capo dopo ogni riga, in modo da mantenere la struttura a matrice.

Questo programma consente di inserire i valori per una matrice 4x4 e quindi di visualizzarla in formato tabellare, rendendo chiara la disposizione degli elementi in righe e colonne.

Soluzione Esercizio 3

Teoria

La somma di due matrici è ottenuta sommando gli elementi corrispondenti di ciascuna matrice. Se abbiamo due matrici AA e BB di dimensioni m×nm \times n, la matrice risultante CC sarà anch’essa di dimensioni m×nm \times n e avrà elementi dati dalla somma degli elementi corrispondenti di AA e BB.

C=A+BC = A + B

cij=aij+bijc_{ij} = a_{ij} + b_{ij}

Dove:

  • A=[aij]A = [a_{ij}]
  • B=[bij]B = [b_{ij}]
  • C=[cij]C = [c_{ij}]

È importante che le matrici AA e BB abbiano la stessa dimensione per poter essere sommate.

Esempio

Consideriamo due matrici 2×22 \times 2:

A=[1234]A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

B=[5678]B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}

La loro somma (C = A + B) è:

C=[1+52+63+74+8]=[681012]C = \begin{bmatrix} 1+5 & 2+6 \\ 3+7 & 4+8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix}

Implementazione in C++

Ecco come puoi scrivere un programma in C++ per calcolare la somma di due matrici 2x2 di interi:

#include <iostream>
using namespace std;

int main() {
    // Dichiarazione delle matrici
    int A[2][2], B[2][2], C[2][2];

    // Lettura degli elementi della matrice A
    cout << "Inserisci gli elementi della matrice A (2x2):" << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> A[i][j];
        }
    }

    // Lettura degli elementi della matrice B
    cout << "Inserisci gli elementi della matrice B (2x2):" << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "B[" << i << "][" << j << "] = ";
            cin >> B[i][j];
        }
    }

    // Calcolo della somma delle matrici A e B
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            C[i][j] = A[i][j] + B[i][j];
        }
    }

    // Stampa della matrice risultante C
    cout << "La matrice risultante C (somma di A e B) è:" << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            cout << C[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Spiegazione del Codice

  1. Dichiarazione delle Matrici: Sono dichiarate tre matrici 2x2 (A, B e C).
  2. Input dell’Utente: Si richiede all’utente di inserire i valori per le matrici A e B.
  3. Somma degli Elementi: Si calcola la somma degli elementi corrispondenti delle matrici A e B e si memorizza il risultato nella matrice C.
  4. Stampa del Risultato: Si stampa la matrice risultante C.

Il programma segue passo dopo passo il processo teorico per sommare due matrici, assicurandosi che l’utente fornisca gli input necessari e producendo l’output corretto.

Soluzione Esercizio 4

Teoria del Prodotto di Matrici

Il prodotto di due matrici AA e BB è definito solo se il numero di colonne della matrice AA è uguale al numero di righe della matrice BB. Se AA è una matrice di dimensioni m×nm \times n e BB è una matrice di dimensioni n×pn \times p, il prodotto C=ABC = AB sarà una matrice di dimensioni m×pm \times p.

Gli elementi della matrice risultante CC sono calcolati come segue:

cij=k=1naikbkjc_{ij} = \sum_{k=1}^{n} a_{ik} \cdot b_{kj}

dove:

  • cijc_{ij} è l’elemento nella riga ii e colonna jj della matrice risultante CC.
  • aika_{ik} è l’elemento nella riga ii e colonna kk della matrice AA.
  • bkjb_{kj} è l’elemento nella riga kk e colonna jj della matrice BB.
  • nn è il numero di colonne della matrice AA (e il numero di righe della matrice BB).

Passaggi del Calcolo

Consideriamo due matrici 2x2:

A=(a11a12a21a22)A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} B=(b11b12b21b22)B = \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix}

Il prodotto C=ABC = AB sarà:

C=(c11c12c21c22)C = \begin{pmatrix} c_{11} & c_{12} \\ c_{21} & c_{22} \end{pmatrix}

dove gli elementi di CC sono calcolati come segue:

c11=a11b11+a12b21c_{11} = a_{11} \cdot b_{11} + a_{12} \cdot b_{21} c12=a11b12+a12b22c_{12} = a_{11} \cdot b_{12} + a_{12} \cdot b_{22} c21=a21b11+a22b21c_{21} = a_{21} \cdot b_{11} + a_{22} \cdot b_{21} c22=a21b12+a22b22c_{22} = a_{21} \cdot b_{12} + a_{22} \cdot b_{22}

Implementazione in C++

Ecco il programma in C++ che esegue il prodotto di due matrici 2x2:

#include <iostream>

using namespace std;

int main() {
    // Dichiarazione delle matrici 2x2
    int A[2][2], B[2][2], C[2][2];
    
    // Lettura della matrice A
    cout << "Inserisci gli elementi della matrice A (2x2):" << endl;
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            cin >> A[i][j];
        }
    }
    
    // Lettura della matrice B
    cout << "Inserisci gli elementi della matrice B (2x2):" << endl;
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            cin >> B[i][j];
        }
    }
    
    // Calcolo del prodotto delle matrici A e B
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            C[i][j] = 0;
            for(int k = 0; k < 2; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    
    // Stampa del risultato
    cout << "Il prodotto delle matrici A e B è:" << endl;
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            cout << C[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}

Spiegazione del Codice

  1. Dichiarazione delle Matrici: Dichiarazione delle matrici AA, BB e CC di dimensioni 2x2.
  2. Input: Lettura degli elementi delle matrici AA e BB dall’utente.
  3. Calcolo del Prodotto:
    • Utilizzo di tre cicli for:
      • Il primo ciclo scorre le righe di AA.
      • Il secondo ciclo scorre le colonne di BB.
      • Il terzo ciclo calcola la somma dei prodotti degli elementi corrispondenti.
  4. Output: Stampa della matrice risultante CC.

Soluzione Esercizio 5

Teoria per la Trasposizione di una Matrice

La trasposizione di una matrice è un’operazione che scambia le righe con le colonne della matrice. Se abbiamo una matrice AA di dimensioni m×nm \times n, la sua trasposta ATA^T sarà una matrice di dimensioni n×mn \times m. Formalmente, se A[i][j]A[i][j] è l’elemento della matrice AA alla riga ii e colonna jj, allora l’elemento della matrice trasposta ATA^T alla riga jj e colonna ii sarà A[i][j]A[i][j]. In altre parole:

AT[j][i]=A[i][j]A^T[j][i] = A[i][j]

Passaggi

  1. Dichiarazione e Inizializzazione della Matrice: Creiamo una matrice 3x3 e la riempiamo con valori forniti dall’utente.
  2. Creazione della Matrice Trasposta: Dichiarare una nuova matrice per memorizzare la trasposta.
  3. Calcolo della Trasposta: Utilizziamo due cicli annidati per copiare gli elementi dalla matrice originale alla matrice trasposta scambiando righe e colonne.
  4. Stampa della Matrice Trasposta: Stampiamo la matrice trasposta.

Codice

#include <iostream>
using namespace std;

int main() {
    const int N = 3;
    int A[N][N], AT[N][N];

    // Input della matrice originale
    cout << "Inserisci i valori della matrice 3x3:" << endl;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cin >> A[i][j];
        }
    }

    // Calcolo della trasposta
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            AT[j][i] = A[i][j];
        }
    }

    // Output della matrice trasposta
    cout << "La matrice trasposta è:" << endl;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cout << AT[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Spiegazione del Codice

  1. Dichiarazione delle Matrici:

    const int N = 3;
    int A[N][N], AT[N][N];
    

    Qui, definiamo una costante N per rappresentare la dimensione della matrice e dichiariamo due matrici A e AT, entrambe di dimensioni 3x3.

  2. Input della Matrice Originale:

    cout << "Inserisci i valori della matrice 3x3:" << endl;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cin >> A[i][j];
        }
    }
    

    Questo blocco di codice legge i valori forniti dall’utente per popolare la matrice A.

  3. Calcolo della Trasposta:

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            AT[j][i] = A[i][j];
        }
    }
    

    Utilizziamo due cicli for annidati per scambiare le righe con le colonne, memorizzando il risultato nella matrice AT.

  4. Output della Matrice Trasposta:

    cout << "La matrice trasposta è:" << endl;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cout << AT[i][j] << " ";
        }
        cout << endl;
    }
    

    Infine, stampiamo la matrice trasposta AT.

Questo codice consente di inserire i valori di una matrice 3x3, calcolarne la trasposta e stamparla a schermo.

    Back to Blog

    Related Posts

    View All Posts »
    Funzioni in C++

    Funzioni in C++

    Le funzioni in C++ rappresentano un costrutto fondamentale per la programmazione. Vediamo come si definiscono e come si utilizzano