Oppure

Loading
21/10/10 17:24
ciao888
dovevo svolgere questo compito in un programma, mi hanno suggerito di scrivere in questo modo , ma non ho avuto tempo di farmi spiegare il perchè
void somma_diagonale(int r, int M[][10], int v[]) // r è la dimensione della matrice che puo' essere max10
{
int somma = 0
for(int i=0; i<r; i++)
{ for (int j=0; j<r; j++)
 somma += m[j][(i+j) % (r)];
v[i] = somma; 
somma = 0;
}}


ciò che non capisco è la scritta :
somma += m[j][(i+j) % (r)];

so il significato di % ma non capisco come lo usino in questo contesto
aaa
21/10/10 18:25
breath
devi ricordare che la somma è diagonale , non di ogni posizione di M .
comunque manca un ";" in somma=0 e hai messo la matrice M minuscola
aaa
21/10/10 18:35
ciao888
sì ma il programma parte, è tutto a posto, l'unica cosa che non capisco è perchè ha fatto in quel modo cioè utilizzando %, non ci sarei mai arrivata a fare così, conoscete per caso un metodo alternativo?
aaa
22/10/10 2:18
HeDo
Postato originariamente da ciao888:

sì ma il programma parte, è tutto a posto, l'unica cosa che non capisco è perchè ha fatto in quel modo cioè utilizzando %, non ci sarei mai arrivata a fare così, conoscete per caso un metodo alternativo?


l'operatore % calcola il resto di una divisione, se ti manca quello la vedo veramente dura programmare alcunchè
aaa
22/10/10 10:29
ciao888
no non mi manca quello, infatti io ho chiesto se ci poteva essere un metodo alternativo visto che a me non sarebbe venuto in mente di calcolarla in quel modo.Inoltre ho visto che scritta in quel modo vi è il calcolo solo della somma di una diagonale, quindi volevo chiedervi se per caso conoscete un metodo migliore per il calcolo della somma dei valori di tutte le diagonali destre
aaa
22/10/10 15:27
Pitagora
controlla le parti in grassetto, forse non hai notato che [(i+j) % r] prenderà la colonna dell'estrema destra!

somma += m[j][(i+j) % (r)];
Ultima modifica effettuata da Pitagora 22/10/10 15:28
aaa