Inversione righe matrice su c

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Inversione righe matrice su c

    [#include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main()
    {int r = 4,c = 4;
    int mat [r][c];
    int nr, nc;
    printf("\nInseriamo i dati nella matrice \n");
    srand( time(NULL) );
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = 0+rand()%2;
    }
    }
    printf("\nmatrice stampata\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    int temp;
    printf ("\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = temp;
    mat[nr][nc] = mat[nr+1][nc];
    mat[nr+1][nc] = temp;
    }
    }
    printf("\nmatrice stampata inversa\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    }]
    Non credo di essere riucita a mettere a posto lo scambio
  • Re: Inversione righe matrice su c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main()
    {int r = 4,c = 4;
    int mat [r][c];
    int nr, nc;
    printf("\nInseriamo i dati nella matrice \n");
    srand( time(NULL) );
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = 0+rand()%2;
    }
    }
    printf("\nmatrice stampata\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    int temp;
    printf ("\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = temp;
    mat[nr][nc] = mat[nr+1][nc];
    mat[nr+1][nc] = temp;
    }
    }
    printf("\nmatrice stampata inversa\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    }
    Non credo di esssere riucita a sistemare l'errore che c'è nello scambio perchè fondamentalmente non risco a trovarlo
  • Re: Inversione righe matrice su c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main()
    {int r = 4,c = 4;
    int mat [r][c];
    int nr, nc;
    printf("\nInseriamo i dati nella matrice \n");
    srand( time(NULL) );
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = 0+rand()%2;
    }
    }
    printf("\nmatrice stampata\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    int temp;
    printf ("\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    mat[nr][nc] = temp;
    mat[nr][nc] = mat[nr+1][nc];
    mat[nr+1][nc] = temp;
    }
    }
    printf("\nmatrice stampata inversa\n");
    for (nr=0;nr<r;nr++)
    {
    for (nc=0;nc<c;nc++)
    {
    printf("%3d", mat[nr][nc]);
    }
    printf ("\n");
    }
    }
  • Re: Inversione righe matrice su c

    Perchè tre post?

    Perchè ancora non usi i tag CODE, anche dopo che ti ho postato un'immagine per spiegarti come fare?

    Perchè quel 0+ è ancora lì?

    Perchè
    for (nr=0;nr<r-1;nr++)
    è diventato
    for (nr=0;nr<r;nr++)
    ??

    Com'è possibile non riuscire a capire quale sia l'errore in 3 semplici righe di codice?
    mat[nr][nc] = temp;
    mat[nr][nc] = mat[nr+1][nc];
    mat[nr+1][nc] = temp;
    Sinceramente non vedo molta buona volontà da parte tua o quantomeno stai procedendo senza sapere precisamente quello che stai facendo, probabilmente prendendo pezzi di codice trovati in rete.
  • Re: Inversione righe matrice su c

    Tre post perchè non avevo capito che cambiasse la pagina hahahahaha
    i tag CODE non capisco come usarli cioè metti il codice dentro le quadre e poi però a me non diventa verde.
    Il codice l'ho scritto tutto io! il punto è che l'inversione di una riga si fa cosi :
    mat[0][0] = temp;
    mat[0][0] = mat[1][0];
    mat[1][0] = temp;
    questa inverte solo due righe e il mio problema è non riuscire a capire dove sia l'errore perchè se così inverte due righe non riesco a capire perchè non possa invertire tutte le righe della matrice!
    e di sicuro il problema non è nel come è scritto lo scambio, poi il punto è che nel ciclo non è quindi non so dove possa essere, forse in nr+1 ma se non scrivo nr+1 lui come fa a invetire una riga con la riga successiva? ( nel essempio io inverto riga 0 con riga 1)
  • Re: Inversione righe matrice su c

    bat02 ha scritto:


    Tre post perchè non avevo capito che cambiasse la pagina hahahahaha
    i tag CODE non capisco come usarli cioè metti il codice dentro le quadre e poi però a me non diventa verde.
    Non trovo l'emoticon FACEPALM DOPPIO se no ce lo metterei...
    Se premi il pulsante che c'è nell'editor, ti mette DUE tag CODE: il codice lo devi mettere tra i due tag, non tra due parentesi quadre! Hai mai visto una pagina html? Il concetto è esattamente lo stesso, invece di usare due tag html quali <body>Corpo della pagina</body>, usa due tag con le parentesi quadre: [ code ] e [/ code]. Il tuo codice lo devi mettere nel mezzo.
    Il codice l'ho scritto tutto io! il punto è che l'inversione di una riga si fa cosi :
    mat[0][0] = temp;
    mat[0][0] = mat[1][0];
    mat[1][0] = temp;
    questa inverte solo due righe e il mio problema è non riuscire a capire dove sia l'errore perchè se così inverte due righe non riesco a capire perchè non possa invertire tutte le righe della matrice!
    e di sicuro il problema non è nel come è scritto lo scambio, poi il punto è che nel ciclo non è quindi non so dove possa essere, forse in nr+1 ma se non scrivo nr+1 lui come fa a invetire una riga con la riga successiva? ( nel essempio io inverto riga 0 con riga 1)
    Invece il problema è proprio in come hai scritto lo scambio. Facciamo un debug mentale delle tre righe che hai scritto; ricorda che l'assegnazione avviene da destra verso sinistra:
  • Re: Inversione righe matrice su c

    bat02 ha scritto:


    i tag CODE non capisco come usarli cioè metti il codice dentro le quadre e poi però a me non diventa verde.
    Ecco un'immagine dell'editor completo:


    bat02 ha scritto:


    Il codice l'ho scritto tutto io! il punto è che l'inversione di una riga si fa cosi :
    mat[0][0] = temp;
    mat[0][0] = mat[1][0];
    mat[1][0] = temp;
    questa inverte solo due righe e il mio problema è non riuscire a capire dove sia l'errore perchè se così inverte due righe non riesco a capire perchè non possa invertire tutte le righe della matrice!
    e di sicuro il problema non è nel come è scritto lo scambio,
    Prova a lanciare il seguente codice:
    #include <stdio.h>
    
    int main()
    {
        int temp = 0;
        int a = 1;
        int b = 2;
    
        a = temp;
        a = b;
        b = temp;
    
        printf("%d\n%d", a, b);
    
        return 0;
    }
    se quello che hai scritto fosse corretto, l'output dovrebbe essere
    2
    1
    invece ottengo
    2
    0
    Ti sei convinta adesso che lo scambio è sbagliato?

    In ogni caso ancora non mi hai risposto alla seguente domanda:

    Nippolo ha scritto:


    Perchè
    for (nr=0;nr<r-1;nr++)
    è diventato
    for (nr=0;nr<r;nr++)
    ??
  • Re: Inversione righe matrice su c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {int r = 4,c = 4;
    int mat [r][c];
    int nr, nc; 
        printf("\nInseriamo i dati nella matrice \n");
        srand( time(NULL) );
        for (nr=0;nr<r;nr++)
        { 
            for (nc=0;nc<c;nc++) 
            {
                mat[nr][nc] = 0+rand()%2;
            }
        }
        printf("\nmatrice stampata\n");
        for (nr=0;nr<r;nr++)
        { 
            for (nc=0;nc<c;nc++) 
            {
                printf("%3d", mat[nr][nc]);
            }
            printf ("\n");
        }
        int temp;
        printf ("\n");
        for (nr=0;nr<r-1;nr++)
        { 
            for (nc=0;nc<c;nc++)
            {
               temp = mat[nr][nc];             
               mat[nr][nc] = mat[nr+1][nc];    
               mat[nr+1][nc] = temp;          
            }
        }
       printf("\nmatrice stampata inversa\n");
        for (nr=0;nr<r;nr++)
        { 
            for (nc=0;nc<c;nc++) 
            {
                printf("%3d", mat[nr][nc]);
            }
            printf ("\n");
        }
    }
    Evviva funziona!!!!! Sono contentisisma!!! garzie mille !!!
    Ho tolto quel -1 per erroreperchè ero e sono convinta vada messo.
    Ho proato ad usare i CODE speriamo di vercela fatta hahahaahaahahha
Devi accedere o registrarti per scrivere nel forum
22 risposte