18/04/2008
C++: Calcolare somma, media e diagonale principale di una matrice 3x3
Ecco un semplice programmino per calcolare somma, media e diagonale principale di una matrice 3x3 (vista come vettore bidimensionale):
#include <iostream.h>
void main()
{
int v[3][3], somma, diagonale, i, j, n;
float media;
somma = 0;
diagonale = 0;
n = 0;
for (i=0; i<3; i++) //inserisco gli elementi nella matrice
for (j=0;j<3;j++)
{
cout << "inserisci l'elemento di posizione: " << i << j << endl;
cin >> v[i][j];
}
for (i=0; i<3; i++) //calcolo somma e diagonale principale
for (j=0;j<3;j++)
{
somma += v[i][j];
if (i==j)
diagonale += v[i][j];
}
for (i=0;i<3;i++)
for(j=0;j<3;j++)
n++;
cout << "La somma è: " << somma << endl;
media = ((float)somma)/n; //calcolo la media
cout << "La media è: " << media << endl;
cout << "La diagonale principale è: " << diagonale << endl;
}
Facciamo adesso alcune osservazioni. Come potete notare se non avessi utilizzato la conversione esplicita, cioè ((float)somma), nonostante la variabile media sia di tipo float, il risultato che avrei ottenuto sarebbe stato un int, poichè a monte vi è una somma di tipo intero. Avrei potuto ovviare a tale situazione semplicemente dichiarando la variabile somma non più come int ma come float:
#include <iostream.h>
void main()
{
int v[3][3], diagonale, i, j, n;
float media, somma;
somma = 0;
diagonale = 0;
n = 0;
for (i=0; i<3; i++) //inserisco gli elementi nella matrice
for (j=0;j<3;j++)
{
cout << "inserisci l'elemento di posizione: " << i << j << endl;
cin >> v[i][j];
}
for (i=0; i<3; i++) //calcolo somma e diagonale principale
for (j=0;j<3;j++)
{
somma += v[i][j];
if (i==j)
diagonale += v[i][j];
}
for (i=0;i<3;i++)
for(j=0;j<3;j++)
n++;
cout << "La somma è: " << somma << endl;
media = somma/n; //calcolo la media
cout << "La media è: " << media << endl;
cout << "La diagonale principale è: " << diagonale << endl ;
}
A presto!
19:29 Scritto da: nazarenolatella in Programmazione | Link permanente | Commenti (4) | Segnala | OKNOtizie |
Facebook















Commenti
Egregio signore,
volevo sapere, perché l'agoritmo per ricercare la diagonale si fa in tale modo ?
cioè
for(i=0;i
Scritto da: GENNARO | 18/03/2011
Ciao Gennaro. Nel codice da me riportato ho utilizzato due cicli for annidati per "scorrere" tutti gli elementi che costituiscono la matrice. In particolare, il primo ciclo for (che utilizza come indice i) serve per scorrere le righe, mentre il secondo (che utilizza come indice j) serve per scorrere le colonne.
La condizione if(i == j) serve invece ad individuare gli elementi che fanno parte della diagonale principale (ovvero quelli il cui indice riga ed il cui indice colonna corrispondono).
Spero di esserti stato utile, ciao.
Scritto da: Nazareno | 18/03/2011
Vorrei sapere come calcolare la diagonale secondaria e il triangolo superiore sinistro e il triangolo inferiore destro,ovvero in una matrice 3x3 per esempio la posizione 1,2 e 4 grazie.
Scritto da: Marco | 18/03/2011
Ciao Marco. Per sommare gli elementi della diagonale secondaria di una matrice 3X3 ti basta lavorare con gli indici di riga e di colonna. In particolare, gli indici degli elementi dovrebbero essere i seguenti:
00 01 02
10 11 12
20 21 22
Come puoi facilmente notare, la diagonale secondaria è caratterizzata dagli indici 02, 11 e 20. La somma di questi indici è sempre uguale a 2, quindi potresti usare due cicli annidati e scrivere come condizione che la somma degli indici sia uguale a 2.
Seguendo una logica simile potresti calcolare il triangolo superiore sinistro, sommando alla diagonale secondaria gli elementi della matrice la cui somma degli indici è minore uguale a 1.
Per il triangolo inferiore destro alla diagonale secondaria devi sommare gli elementi i cui indici sono compresi tra 3 e 4 (estremi inclusi).
Ciao.
Scritto da: Nazareno | 18/03/2011
Scrivi un commento