· 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.](/_astro/marek-piwnicki-joxXZhefnhk-unsplash.6IZEsTF_.jpg)
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.
Esercizio 2: Stampa di una Matrice
Scrivi un programma che legge una matrice 4x4 di interi e stampa la matrice a schermo.
Esercizio 3: Somma di Due Matrici
Scrivi un programma che legge due matrici 2x2 di interi, calcola la loro somma e stampa il risultato.
Esercizio 4: Prodotto di Due Matrici
Scrivi un programma che legge due matrici 2x2 di interi, calcola il loro prodotto e stampa il risultato.
Esercizio 5: Trasposizione di una Matrice
Scrivi un programma che legge una matrice 3x3 di interi, calcola la sua trasposta e la stampa.
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:
Durante la dichiarazione:
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};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
- Dichiarare la matrice.
- Utilizzare due cicli
for
annidati per iterare su righe e colonne. - Chiedere all’utente di inserire un valore per ciascun elemento della matrice.
- 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
Inclusione della Libreria:
#include <iostream>Viene inclusa la libreria
iostream
per l’input e l’output standard.Dichiarazione dello Spazio dei Nomi:
using namespace std;Questo permette di utilizzare direttamente
cin
ecout
senza dover scriverestd::
.Funzione
main()
: Il punto di ingresso del programma.Dichiarazione della Matrice:
int matrix[3][3];Viene dichiarata una matrice 3x3 di interi.
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.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
- Dichiarazione della matrice: Dichiara una matrice di dimensioni 4x4.
- Lettura dei valori: Utilizza cicli
for
annidati per leggere i valori della matrice forniti dall’utente. - 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
Inclusione della libreria
iostream
: Questa libreria permette l’uso di input e output in C++.Uso del
namespace std
: Evita di dover scriverestd::
prima di ogni operazione di input/output.Dichiarazione della matrice:
int matrice[4][4];
dichiara una matrice di interi con 4 righe e 4 colonne.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.
- Viene utilizzato un doppio ciclo
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.
- Un altro doppio ciclo
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 e di dimensioni , la matrice risultante sarà anch’essa di dimensioni e avrà elementi dati dalla somma degli elementi corrispondenti di e .
Dove:
È importante che le matrici e abbiano la stessa dimensione per poter essere sommate.
Esempio
Consideriamo due matrici :
La loro somma (C = A + B) è:
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
- Dichiarazione delle Matrici: Sono dichiarate tre matrici 2x2 (
A
,B
eC
). - Input dell’Utente: Si richiede all’utente di inserire i valori per le matrici
A
eB
. - Somma degli Elementi: Si calcola la somma degli elementi corrispondenti delle matrici
A
eB
e si memorizza il risultato nella matriceC
. - 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 e è definito solo se il numero di colonne della matrice è uguale al numero di righe della matrice . Se è una matrice di dimensioni e è una matrice di dimensioni , il prodotto sarà una matrice di dimensioni .
Gli elementi della matrice risultante sono calcolati come segue:
dove:
- è l’elemento nella riga e colonna della matrice risultante .
- è l’elemento nella riga e colonna della matrice .
- è l’elemento nella riga e colonna della matrice .
- è il numero di colonne della matrice (e il numero di righe della matrice ).
Passaggi del Calcolo
Consideriamo due matrici 2x2:
Il prodotto sarà:
dove gli elementi di sono calcolati come segue:
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
- Dichiarazione delle Matrici: Dichiarazione delle matrici , e di dimensioni 2x2.
- Input: Lettura degli elementi delle matrici e dall’utente.
- Calcolo del Prodotto:
- Utilizzo di tre cicli
for
:- Il primo ciclo scorre le righe di .
- Il secondo ciclo scorre le colonne di .
- Il terzo ciclo calcola la somma dei prodotti degli elementi corrispondenti.
- Utilizzo di tre cicli
- Output: Stampa della matrice risultante .
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 di dimensioni , la sua trasposta sarà una matrice di dimensioni . Formalmente, se è l’elemento della matrice alla riga e colonna , allora l’elemento della matrice trasposta alla riga e colonna sarà . In altre parole:
Passaggi
- Dichiarazione e Inizializzazione della Matrice: Creiamo una matrice 3x3 e la riempiamo con valori forniti dall’utente.
- Creazione della Matrice Trasposta: Dichiarare una nuova matrice per memorizzare la trasposta.
- Calcolo della Trasposta: Utilizziamo due cicli annidati per copiare gli elementi dalla matrice originale alla matrice trasposta scambiando righe e colonne.
- 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
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 matriciA
eAT
, entrambe di dimensioni 3x3.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
.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 matriceAT
.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.