Matrice quadrata
Matrici 4x4
Ho iniziato da poco a programmare con c++
Non riesco nella somma delle le diagonali della matrice qualcuno può dirmi come fare a sommare nei modi diversi?
Ho iniziato da poco a programmare con c++
Non riesco nella somma delle le diagonali della matrice qualcuno può dirmi come fare a sommare nei modi diversi?
Risposte
guarda è semplice, non ho ben capito il tuo problema, però se vuoi sommare qualsiasi parte della matrice basta che trovi la legge analitica che descrive la posizione degli elementi in termini di i e j.
Cioè , esempio somma degli almenti della diagonale principale
....
int traccia=0;
for (int i=0; i<4; i++)
for(int j=0; j<4; j++)
if i==j traccia+=matrice[j];
in " if i==j" viene fuori dal fatto che la diagonale principale sta sulla retta x=y......
vediamo ad esempio la diagonale secondaria:
la retta sulla quale stanno gli elementi la ottieni imponendo che passi per (dim,0) e (0,dim):
(i-dim)/(0-dim)=(j-0)/(dim)
dim - i=j
questa è la condizione che accomuna gli elementi ulla diagonale secondaria....quindi:
....
int traccia=0;
for (int i=0; i<=dim; i++)
for(int j=0; j<=dim; j++)
if j==(dim-i) traccia+=matrice[j];
Cioè , esempio somma degli almenti della diagonale principale
....
int traccia=0;
for (int i=0; i<4; i++)
for(int j=0; j<4; j++)
if i==j traccia+=matrice[j];
in " if i==j" viene fuori dal fatto che la diagonale principale sta sulla retta x=y......
vediamo ad esempio la diagonale secondaria:
la retta sulla quale stanno gli elementi la ottieni imponendo che passi per (dim,0) e (0,dim):
(i-dim)/(0-dim)=(j-0)/(dim)
dim - i=j
questa è la condizione che accomuna gli elementi ulla diagonale secondaria....quindi:
....
int traccia=0;
for (int i=0; i<=dim; i++)
for(int j=0; j<=dim; j++)
if j==(dim-i) traccia+=matrice[j];
Il metodo che ti ha suggerito il Conte è concettualmente corretto.
Posso solo aggiungere un esempio di implementazione efficiente, e sperabilmente comprensibile.
Nota per l'eventuale lettore un po' meno smaliziato: questo è solo un esempio. Per ottenere numeri realmente random, mai fidarsi troppo del generatore lineare congruenziale implementato nelle RTL C dei compilatori standard. Provate a cercare qualcosa sugli iperpiani di Marsaglia, ad esempio...
Posso solo aggiungere un esempio di implementazione efficiente, e sperabilmente comprensibile.
/* Esempio compilato con Borland C/C++ 5.5.1 */ #include <stdio.h> #include <stdlib.h> const unsigned int ASIZE = 4; int main() { int my_array[ASIZE][ASIZE]; unsigned int i, j; int dp, ds; srand(time(NULL)); /* Popolazione dell'array */ for (i = 0; i < ASIZE; ++i) { for (j = 0; j < ASIZE; ++j) { /* Si genera arbitrariamente un valore in [10, 99] */ my_array[i][j] = rand() % 90 + 10; } } /* Somma diagonale principale */ dp = 0; for (i = 0; i < ASIZE; ++i) { /* Notare l'indicizzazione */ dp += my_array[i][i]; } /* Somma diagonale secondaria */ ds = 0; for (i = 0; i < ASIZE; ++i) { /* Anche qui, notare l'indicizzazione */ ds += my_array[i][ASIZE -i -1]; } /* Visualizzazione risultati */ for (i = 0; i < ASIZE; ++i) { for (j = 0; j < ASIZE; ++j) { printf("%2d ", my_array[i][j]); } printf("\n"); } printf("> Somma diagonale principale = %d\n", dp); printf("> Somma diagonale secondaria = %d\n", ds); return (0); }
Nota per l'eventuale lettore un po' meno smaliziato: questo è solo un esempio. Per ottenere numeri realmente random, mai fidarsi troppo del generatore lineare congruenziale implementato nelle RTL C dei compilatori standard. Provate a cercare qualcosa sugli iperpiani di Marsaglia, ad esempio...