[RISOLTO]Somma tutte le diagonali di una matrice?

di il
28 risposte

28 Risposte - Pagina 2

  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    StandardOil ha scritto:


    ...
    tu vuoi N*2-1 somme delle N*2-1 possibili diagonali, anche non complete.

    naturalemte la matrice è quadrata e di dimensione N
    ...

    StandardOil ha scritto:


    Non capisco:
    trattandosi di diagonali di matrici le matrici sono quadrate
    cosa vuol dire:
    #define R 3
    #define C 4
    Io invece non capisco perché per una consegna del genere ritieni tanto importante distinguere il caso di matrice quadrata da quello di matrice generica?!
    In ogni caso lo stesso @Ultimo00 utilizza due parametri r e c per le varie funzioni...
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Perché il concetto di diagonale di una matrice esiste solo per matrici quadrate
    piuttosto ho notato una cosa strana, indicatami dal mio adorato nipote
    è possibile usare in una chiamata di funzione anche delle matrici non completamente formate, basta che siano un argomento successivo al passaggio delle colonne
    dopo posto esempio
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    A parziale correzione di quello che ho scritto prima
    ho trovato nella documentazione di gcc
    è un'estensione di gcc, che accetta il passaggio di VLA anche non in forma di puntatore a oggetto, ma proprio di VLA
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Nippolo ha scritto:


    Nippolo ha scritto:


    Io rifletterei sul seguente output:
    #include <stdio.h>
    
    #define R 4
    #define C 7
    
    int main()
    {
        for(int i = 0; i < R; ++i)
        {
            for(int j = 0; j < C; ++j)
            {
                printf("%d\t", j - i);
            }
            printf("\n");
        }
        return 0;
    }
    Dal momento che il mio input è passato completamente inosservato, giusto per chiarezza mi riferivo ad una soluzione del genere:
    #include <stdio.h>
    
    #define R 3
    #define C 4
    
    int main()
    {
        int m[R][C] = {{1, 2, 3, 4},
                       {5, 6, 7, 8},
                       {9, 0, 5, 2}};
        int v[R + C - 1] = {0};
    
        unsigned int k;
        for(unsigned int i = 0; i < R; ++i)
        {
            for(unsigned int j = 0; j < C; ++j)
            {
                if(j >= i)
                {
                    k = j - i;
                }
                else
                {
                    k = C + i - j - 1;
                }
                v[k] += m[i][j];
            }
        }
    
        for(unsigned int i = 0; i < R + C - 1; ++i)
        {
            printf("%d ", v[i]);
        }
    
        return 0;
    }
    Ciao, ho provato il tuo codice con una matrice 4x4, però ha lo stesso mio problema, ovvero non esegue tutte le somme oppure alcune sono sbagliate
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Per riassumere (e avere conferma di aver capito bene)
    noi stiamo cercando un programma cha faccia una cosa del genere:
    Stampo una matrice di 5 righe e 5 colonne: 
     0  1  2  3  4 
     5  6  7  8  9 
    10 11 12 13 14 
    15 16 17 18 19 
    20 21 22 23 24 
    La diagonale  1 fa una somma di:   4
    La diagonale  2 fa una somma di:  12
    La diagonale  3 fa una somma di:  24
    La diagonale  4 fa una somma di:  40
    La diagonale  5 fa una somma di:  60
    La diagonale  6 fa una somma di:  56
    La diagonale  7 fa una somma di:  48
    La diagonale  8 fa una somma di:  36
    La diagonale  9 fa una somma di:  20
    programma terminato
    giusto?
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    StandardOil ha scritto:


    Perché il concetto di diagonale di una matrice esiste solo per matrici quadrate
    Ad essere precisi, in algebra lineare, in riferimento a matrici quadrate, esistono solo la diagonale principale e secondaria.
    Nel caso specifico mi sembra ovvio che con il termine diagonale ci si sta riferendo a qualcosa di diverso. Inoltre tu stesso nei precedenti post avevi considerato "diagonali improprie".

    Ultimo00 ha scritto:


    Ciao, ho provato il tuo codice con una matrice 4x4, però ha lo stesso mio problema, ovvero non esegue tutte le somme oppure alcune sono sbagliate
    Sicuro di aver capito cosa fa il mio codice?
    In ogni caso posta la matrice e l'output del programma.

    StandardOil ha scritto:


    Per riassumere (e avere conferma di aver capito bene)
    noi stiamo cercando un programma cha faccia una cosa del genere:
    Stampo una matrice di 5 righe e 5 colonne: 
     0  1  2  3  4 
     5  6  7  8  9 
    10 11 12 13 14 
    15 16 17 18 19 
    20 21 22 23 24 
    La diagonale  1 fa una somma di:   4
    La diagonale  2 fa una somma di:  12
    La diagonale  3 fa una somma di:  24
    La diagonale  4 fa una somma di:  40
    La diagonale  5 fa una somma di:  60
    La diagonale  6 fa una somma di:  56
    La diagonale  7 fa una somma di:  48
    La diagonale  8 fa una somma di:  36
    La diagonale  9 fa una somma di:  20
    programma terminato
    giusto?
    Esattamente, cosa che il mio programma fa, anche se numerando diversamente le diagonali.
    D'altronde visto il tuo precedente post

    StandardOil ha scritto:


    Spiega bene bene

    Nella matrice che dai come esempio tu vuoi avere 5 risultati?
    Ovvero
    4
    5+8 13
    3+7+5 13
    2×2 4
    1

    O qualcosa di differente?
    credevo ti fosse già chiaro!
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Nippolo ha scritto:


    StandardOil ha scritto:


    Perché il concetto di diagonale di una matrice esiste solo per matrici quadrate
    Ad essere precisi, in algebra lineare, in riferimento a matrici quadrate, esistono solo la diagonale principale e secondaria.
    Nel caso specifico mi sembra ovvio che con il termine diagonale ci si sta riferendo a qualcosa di diverso. Inoltre tu stesso nei precedenti post avevi considerato "diagonali improprie".

    Ultimo00 ha scritto:


    Ciao, ho provato il tuo codice con una matrice 4x4, però ha lo stesso mio problema, ovvero non esegue tutte le somme oppure alcune sono sbagliate
    Sicuro di aver capito cosa fa il mio codice?
    In ogni caso posta la matrice e l'output del programma.

    StandardOil ha scritto:


    Per riassumere (e avere conferma di aver capito bene)
    noi stiamo cercando un programma cha faccia una cosa del genere:
    Stampo una matrice di 5 righe e 5 colonne: 
     0  1  2  3  4 
     5  6  7  8  9 
    10 11 12 13 14 
    15 16 17 18 19 
    20 21 22 23 24 
    La diagonale  1 fa una somma di:   4
    La diagonale  2 fa una somma di:  12
    La diagonale  3 fa una somma di:  24
    La diagonale  4 fa una somma di:  40
    La diagonale  5 fa una somma di:  60
    La diagonale  6 fa una somma di:  56
    La diagonale  7 fa una somma di:  48
    La diagonale  8 fa una somma di:  36
    La diagonale  9 fa una somma di:  20
    programma terminato
    giusto?
    Esattamente, cosa che il mio programma fa, anche se numerando diversamente le diagonali.
    D'altronde visto il tuo precedente post

    StandardOil ha scritto:


    Spiega bene bene

    Nella matrice che dai come esempio tu vuoi avere 5 risultati?
    Ovvero
    4
    5+8 13
    3+7+5 13
    2×2 4
    1

    O qualcosa di differente?
    credevo ti fosse già chiaro!
    La mia matrice è :
    1 2 3 3
    4 5 6 3
    7 8 9 3
    2 2 2 2
    e mi restituisce : 17 11 6 3 14 9 2
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    StandardOil ha scritto:


    Per riassumere (e avere conferma di aver capito bene)
    noi stiamo cercando un programma cha faccia una cosa del genere:
    Stampo una matrice di 5 righe e 5 colonne: 
     0  1  2  3  4 
     5  6  7  8  9 
    10 11 12 13 14 
    15 16 17 18 19 
    20 21 22 23 24 
    La diagonale  1 fa una somma di:   4
    La diagonale  2 fa una somma di:  12
    La diagonale  3 fa una somma di:  24
    La diagonale  4 fa una somma di:  40
    La diagonale  5 fa una somma di:  60
    La diagonale  6 fa una somma di:  56
    La diagonale  7 fa una somma di:  48
    La diagonale  8 fa una somma di:  36
    La diagonale  9 fa una somma di:  20
    programma terminato
    giusto?
    si
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Nippolo ha scritto:


    ...
    credevo ti fosse già chiaro!
    oh calmino, piglia meno caffe'.......
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Bella soluzione,
    tu in pratica scorri tutti gli elementi della matrice e decidi guardando la coppia di indicie riga e colonna a quale diagonale appartiene
    praticamente determini la diagonale invece di scorrerla
    mica male
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Ultimo00 ha scritto:


    La mia matrice è :
    1 2 3 3
    4 5 6 3
    7 8 9 3
    2 2 2 2
    e mi restituisce : 17 11 6 3 14 9 2

    StandardOil ha scritto:


    Nippolo ha scritto:


    ...
    credevo ti fosse già chiaro!
    oh calmino, piglia meno caffe'.......
    Figurati sono calmissimo, più che altro non capivo quale fosse il problema!
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Nippolo ha scritto:


    Ultimo00 ha scritto:


    La mia matrice è :
    1 2 3 3
    4 5 6 3
    7 8 9 3
    2 2 2 2
    e mi restituisce : 17 11 6 3 14 9 2

    StandardOil ha scritto:


    Nippolo ha scritto:


    ...
    credevo ti fosse già chiaro!
    oh calmino, piglia meno caffe'.......
    Figurati sono calmissimo, più che altro non capivo quale fosse il problema!
    Si è vero, ero io che vedevo male scusa ahahah. Grazie mille!
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Semplificato il codice e "aggiustato" l'ordine delle diagonali:
    #include <stdio.h>
    
    #define R 5
    #define C 5
    
    int main()
    {
        int m[R][C] = {{ 0,  1,  2,  3,  4},
                       { 5,  6,  7,  8,  9},
                       {10, 11, 12, 13, 14},
                       {15, 16, 17, 18, 19},
                       {20, 21, 22, 23, 24}};
        int v[R + C - 1] = {0};
    
        for(unsigned int i = 0; i < R; ++i)
        {
            for(unsigned int j = 0; j < C; ++j)
            {
                v[R + j - i - 1] += m[i][j];
            }
        }
    
        for(unsigned int i = 0; i < R + C - 1; ++i)
        {
            printf("%d ", v[i]);
        }
    
        return 0;
    }
  • Re: [RISOLTO]Somma tutte le diagonali di una matrice?

    Nippolo ha scritto:


    Semplificato il codice e "aggiustato" l'ordine delle diagonali:
    #include <stdio.h>
    
    #define R 5
    #define C 5
    
    int main()
    {
        int m[R][C] = {{ 0,  1,  2,  3,  4},
                       { 5,  6,  7,  8,  9},
                       {10, 11, 12, 13, 14},
                       {15, 16, 17, 18, 19},
                       {20, 21, 22, 23, 24}};
        int v[R + C - 1] = {0};
    
        for(unsigned int i = 0; i < R; ++i)
        {
            for(unsigned int j = 0; j < C; ++j)
            {
                v[R + j - i - 1] += m[i][j];
            }
        }
    
        for(unsigned int i = 0; i < R + C - 1; ++i)
        {
            printf("%d ", v[i]);
        }
    
        return 0;
    }
    Grazie!!
Devi accedere o registrarti per scrivere nel forum
28 risposte