[RISOLTO]Copia di una riga di una matrice

di il
1 risposte

[RISOLTO]Copia di una riga di una matrice

EDIT:alla fine ho risolto usando il double al posto del float

Ciao a tutti, sto cercando di creare un programma che elimini le linee con la somma=0 da una matrice e le salvi in un altra matrice, il problema è che il programma le elimina correttamente, ma non le riesco a salvare correttamente sull altra matrice perche praticamente mi salva soltanto la prima riga con somma=0 che incontra
int main()
{
    int i;
    int j;
    riga struttura[NMAX];
    int riga;
    int colonna;
    float mat[NMAX][NMAX];
    FILE *fp = fopen("input.txt", "r");

    if(fp == NULL)
    {
        perror("Error: ");
        return 1;
    }
    if(fp != NULL)
    {
        fscanf(fp,"%d",&riga);
        fscanf(fp,"%d",&colonna);
            for( i=0; i<riga; i++)
                for( j=0; j<colonna; j++)
                    fscanf(fp,"%G",&mat[i][j]);
                }
        fclose(fp);
int somma;
int k;
int x=0;
int n=0;
float buff[NMAX][NMAX];

        for(i=0;i<riga;i++)
    { somma=0;
        for(j=0;j<colonna;j++)
        {
            somma=somma+mat[i][j];
        }
        if(somma==0)
        {   for(j=0;j<colonna;j++)
                buff[x][j]=mat[i][j];
            for(k=i;k<riga;k++)
            for(j=0;j<colonna;j++)
                mat[i][j]=mat[i+1][j];
        }
            riga--;
            x++;
    }
    int rigacopia=x;

    for(i=0;i<riga;i++){
        printf("\n");
        for(j=0;j<colonna;j++)
            printf("%G ",mat[i][j]);
    }
        printf("\n\n");
        for(x=0;x<rigacopia;x++){
        printf("\n");
        for(j=0;j<colonna;j++)
            printf("%G ",buff[x][j]);
    }

    return 0;
}
il contenuto del file di input è questo:

5
4

-1 0 0 3.2
-1 0 0 1
3.2 0 0 3.2
-4.3 2.3 1 1
0 -3 2 1
L'output che ottengo è questo:
-1 0 0 3.2
3.2 0 0 3.2
^^La matrice viene modificata correttamente

0 0 0 0
-1 0 0 1
0 0 0 0
^^Solo 1 riga su 3 viene copiata correttamente

1 Risposte

  • Re: [RISOLTO]Copia di una riga di una matrice

    Ok, ho modificato il codice in modo da copiare solo sulla matrice buff(senza eliminare)perche ho pensato ci potessero essere probelmi con gli indici e ho modificato anche il tipo di variabile somma da int a float, solo che nonostante sia somma che le 2 matrici siano di tipo float ho problemi se inserisco numeri con la virgola, mentre se inserisco solo gli interi ora copia correttamente.
    La parte di codice che ho modificato è questa:
        float somma;
        int x=0;
        float buff[NMAX][NMAX];
    
        for(i=0; i<riga; i++)
        {   somma=0;
            for(j=0; j<colonna; j++)
                somma=somma+mat[i][j];
        if(somma==0)
            {for(j=0; j<colonna; j++)
                buff[x][j]=mat[i][j];
                x++;
                }
        }
    
    
    //STAMPA MATRICE
        for(i=0; i<riga; i++)
        {
            printf("\n");
            for(j=0; j<colonna; j++)
                printf("%G ",mat[i][j]);
        }
    
    //STAMPA BUFFER
        printf("\n\n");
        for(i=0; i<x; i++)
        {
            printf("\n");
            for(j=0; j<colonna; j++)
                printf("%G ",buff[i][j]);
        }
Devi accedere o registrarti per scrivere nel forum
1 risposte