Programma con matrice

di il
17 risposte

Programma con matrice

Dovevo svolgere in un programma, data la matrice, la somma dei valori di tutte le sue diagonali destre, mi hanno suggerito di scrivere in questo modo , ma non ho avuto tempo di farmi spiegare il perchè
Codice sorgente - presumibilmente C++
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 = somma;
somma = 0;
}}


ciò che non capisco è la scritta :
Codice sorgente - presumibilmente Plain Text
somma += m[j][(i+j) % (r)];

so il significato di % ma non capisco come lo usino in questo contesto

17 Risposte

  • Re: Programma con matrice

    Ti spiego la parte + difficile da capire.
    (i+j) % r -> significa (fai in modo che la somma di i+j cadi sempre nello spazio d 0 a r-1. Questo spazio non a caso è la dimensione delle colone della tua matrice. Quindi si fa x essere certi che venga pescato un elemento valido all'interno della matrice. Ti faccio un esempio coi numeri.
    Prendi r = 8
    i = 5 e j = 6;
    M[(i+j) % (r)] = M[5][(5+6) % (8)]
    (5+6) % (8) = 11 % 8 = 3;
    quindi il risultato sarà:
    somma += M[5][3];
    Chiaro?
  • Re: Programma con matrice

    Sì il meccanismo l'avevo capito, infatti ho visto che riporta, è che io non ci sarei mai arrivata a scriverlo così!:) adesso sto vedendo come fare per le diagonali sinistre, volevo scrivere una cosa del genere:for ( int j = 0, j<d ; j--) && for ( int i = 0; i<d; i++), perchè ho visto che nelle diagonali sinistre j diminuisce di un punto a ogni casella mentre i aumenta di un punto a ogni casella, ma naturalmente a me dà errore
  • Re: Programma con matrice

    Non disperarti
    
    for ( int j = 0, j<d ; j--) && for ( int i = 0; i<d; i++)
    
    non è un metodo valido.
    perche non provi così?
    
    int i = 0;
    int j = 0;
    for (j = d - 1, j>= 0 ; j--) 
        for (i = 0; i<d; i++)
    ....
    
    oppure così dipende da ciò che vuoi fare
    for(i = 0, j = d-1; i < d && j >= 0; i++, j--)
    
  • Re: Programma con matrice

    Come hai scritto tu non mi dà errore ma non porta poi!
  • Re: Programma con matrice

    Non ho la palla di vetro per sapere in anticipo le tue mosse. Dimmi cosa hai intenzione di fare?
  • Re: Programma con matrice

    Volevo scrivere la somma dei valori di tutte le diagonali sinistre della matrice, ad esempio, se ho la matrice di dimensione 3:
    1 2 3
    4 5 6
    7 8 9 vorrei scrivere:
    2+4
    3+5+7
    6+8
  • Re: Programma con matrice

    Ma anche il primo esempio non riporta. quello del calcolo delle diagonali destre. Non è che è un algoritmo sbagliato?
  • Re: Programma con matrice

    No quello dovrebbe portare, ho fatto il calcolo a mano, poi l'ha scritto il prof
  • Re: Programma con matrice

    Allora l'hai scritto tu male perche a me da 15 x ogni v.
    Questo è il tuo codice
    
    for(i=0; i<r; i++)
    	{ 
    		for (j=0; j<r; j++)
    			somma += m[j][(i+j) % (r)];
    		v[i] = somma;
    		somma = 0;
    	}
    
    è questo è il risultato:
    
    v[0] = 15
    v[1] = 15
    v[2] = 15
    
  • Re: Programma con matrice

    Caso i = 0;
    j = 0;
    somma += m[0][0+0 % 3]; = 1
    j = 1;
    somma += m[1][0+1 % 3]; = 1+5 = 6
    j = 2
    somma += m[2][0+2 % 3]; = 1+5+9 = 15
    v[0] = 15;

    caso i = 1
    j = 0;
    somma += m[0][1+0 % 3]; = 2
    j = 1;
    somma += m[1][1+1 % 3]; = 2+6 = 8
    j = 2
    somma += m[2][1+2 % 3]; = 2+6+7 = 15
    v[1] = 15

    caso i = 2
    j = 0;
    somma += m[0][2+0 % 3]; = 3
    j = 1;
    somma += m[1][2+1 % 3]; = 3+4 = 7
    j = 2
    somma += m[2][2+2 % 3]; = 3+4+8 = 15
    v[2] = 15
  • Re: Programma con matrice

    No è proprio così:
    void somma_diagonale_destra(int r, int M[][10], int v[])
    {
    int somma = 0
    for (int i = 0; i<r;i++){
    for (int j=0; j<r;j++)
    somma += M[j][(i+j)%(r)];
    v= somma;
    somma = 0;
    }}
    è esattamente come ha scritto lui,comunque anche a me dà come te
  • Re: Programma con matrice

    Secondo me devi fare un po di ripasso al capitolo 1. Sono due modi di scrittura identiche. Nei for se non metti le parentesi significa che dentro il ciclo ci sta solo l'istruzione sottostante quindi
    
    void somma_diagonale_destra(int r, int M[][10], int v[])
    {
    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;
    }}
    
    è identico a questo
    
    void somma_diagonale_destra(int r, int M[][10], int v[])
    {
    for(i=0; i<r; i++)
    	{ 
    		for (j=0; j<r; j++)
    			somma += m[j][(i+j) % (r)];
    		v[i] = somma;
    		somma = 0;
    	}
    }
    
    che è identico a questo
    
    void somma_diagonale_destra(int r, int M[][10], int v[])
    	{
    
    		for(i=0; i<r; i++)
    		{ 
    			for (j=0; j<r; j++)
    			{
    				somma += m[j][(i+j) % (r)];
    			}
    			v[i] = somma;
    			somma = 0;
    		}
    	}
    
  • Re: Programma con matrice

    R è la variabile che usa lui,noi avevamo scelto d mentre lui usa una variabile r
  • Re: Programma con matrice

    Sì ma infatti è la stessa cosa che avevo scritto all'inzio della domanda , l'ho riscritta per farti vedere che non ho sbagliato io a ricopiare ma proprio il prof ha scritto così e anche a me dà 15 15 15
Devi accedere o registrarti per scrivere nel forum
17 risposte