Argomenti dell’articolo
- Dichiarazione delle librerie
- Caricamento di una matrice
- Stampa della matrice
- Somma degli elementi della matrice
- Somma di matrici
- Prodotto di matrici
- Calcolo del determinante
- Il menù principale
- Il codice sorgente
- Video della Lezione Pratica C++ -12
Operazioni sulle matrici in C++: teoria e implementazione completa
Nel precedente articolo abbiamo visto come il file opmatrici2.cpp realizzi una calcolatrice matriciale tramite un menu interattivo.
In questa estensione entriamo nel cuore del codice, analizzando l’implementazione concreta delle funzioni e il modo in cui la matematica viene tradotta in C++.
Dichiarazione delle librerie e delle variabili
Il programma utilizza librerie standard fondamentali:
#include <iostream>
#include <iomanip>
using namespace std;
iostream→ input/outputiomanip→ formattazione dell’outputusing namespace std→ semplifica la sintassi
Le matrici vengono dichiarate come array bidimensionali statici:
int m1[100][100], m2[100][100], m3[100][100];
Questo approccio è semplice e adatto a scopi didattici.
Caricamento di una matrice
La funzione che permette all’utente di inserire i valori è:
void caricamatrice(int x[][100], int p, int q)
{
for (int i = 0; i < p; i++)
for (int j = 0; j < q; j++)
{
cout << "Elemento [" << i << "][" << j << "]: ";
cin >> x[i][j];
}
}
Cosa succede:
p→ numero di righeq→ numero di colonne- Due cicli annidati permettono di scorrere l’intera matrice
- Ogni elemento viene inserito manualmente
Stampa della matrice
Per visualizzare correttamente i dati:
void stampamatrice(int x[][100], int p, int q)
{
for (int i = 0; i < p; i++)
{
for (int j = 0; j < q; j++)
cout << setw(5) << x[i][j];
cout << endl;
}
}
L’uso di setw(5) rende l’output allineato e leggibile, migliorando l’esperienza dell’utente.
Somma di tutti gli elementi
int MatriceSomma(int x[][100], int p, int q)
{
int s = 0;
for (int i = 0; i < p; i++)
for (int j = 0; j < q; j++)
s += x[i][j];
return s;
}
Questa funzione mostra:
- uso di una variabile accumulatore
- ritorno di un valore calcolato
Somma tra due matrici
void MatriceTotale(int x[][100], int y[][100], int z[][100], int p, int q)
{
for (int i = 0; i < p; i++)
for (int j = 0; j < q; j++)
z[i][j] = x[i][j] + y[i][j];
}
📌 Nota importante:
le matrici devono avere le stesse dimensioni, condizione verificata nel menu principale.
Prodotto tra due matrici
void ProdottoMatrici(int x[][100], int y[][100], int z[][100],
int l1, int l2, int l3, int l4)
{
for (int i = 0; i < l1; i++)
for (int j = 0; j < l4; j++)
{
z[i][j] = 0;
for (int k = 0; k < l2; k++)
z[i][j] += x[i][k] * y[k][j];
}
}
Qui avviene la magia matematica:
- Triplo ciclo
for - Traduzione diretta della formula del prodotto matriciale
z[i][j]è la somma dei prodotti riga × colonna
Calcolo del determinante
void stampa2matrice(int x[2][2])
{
int i,j;
printf("\n");
for (i=0;i<2;i++)
{ cout << setw(4);
for (j=0;j<2;j++)
{
cout << "|";
cout <<x[i][j]<<"\t";
cout << "|";
}
cout <<"\n";
}}
void determinante(int z[][100],int &d,int p,int q)
{ int i,j;
int r,sr,sc;
int sub[2][2];
if ((p==q) and (q==3)){
for (r=0;r<3;r++) {
for (i=0;i<2;i++)
for (j=0;j<2;j++)
{
sr=(i< r ? i : i+1);
sc=j+1;
sub[i][j]=z[sr][sc];
}
stampa2matrice(sub);
if (r % 2==0)
d=d+z[r][0]*det2(sub);
else
d=d-z[r][0]*det2(sub);
}}
else
if (p==q and q==2)
d=z[0][0]*z[1][1]-z[1][0]*z[0][1];
else
{
cout <<"\nNon posso calcolare il Determinante !\n";
}
}
}
Il determinante viene calcolato con la regola di Laplace il cui algoritmo è questo sotto riprotato.

Nell’algoritmo sono presenti due sotto algoritmi uno per la stampa dei complementi algebrici e l’altro molto semplice per il calcolo di un determinante di una matrice 2 x 2.
Aspetti interessanti:
- Uso del passaggio per riferimento
- Applicazione diretta delle formule matematiche
- Controllo sulle dimensioni della matrice
Il menu principale
Il main() utilizza un ciclo do-while con switch:
do {
cout << "1) Carica matrice\n";
cout << "2) Somma elementi\n";
cout << "3) Determinante\n";
cout << "4) Prodotto matrici\n";
cout << "5) Somma matrici\n";
cout << "0) Esci\n";
cin >> scelta;
switch (scelta)
{
case 1: caricamatrice(m1, r, c); break;
case 2: cout << MatriceSomma(m1, r, c); break;
...
}
} while (scelta != 0);
Questo rende il programma:
- interattivo
- chiaro
- facilmente ampliabile
Considerazioni finali
Questo progetto è un ottimo esempio di programmazione procedurale in C++, perfetto per:
- comprendere array bidimensionali
- consolidare funzioni e cicli
- applicare matematica e informatica insieme
Il Codice completo
Per approfondire iscrivi al corso
“Dall’Algoritmo al C++ Base”
Sorgente C++
Video della lezione
In questa pagina sono presenti link di affiliazione che garantiscono a questo sito una piccola quota di ricavi, senza variazione del prezzo per l'acquirente.











