ERRORE NELLA LETTURA

di il
7 risposte

ERRORE NELLA LETTURA

Salve, potreste dirmi dove è che sbaglio, devo mettere in ordine crescente le righe positive, mentre quelle negative in ordine decrescente, fin quando leggo dal file 3x3 mi funziona e ordina come deve, mentre se aumento ad esempio 4x4 mi sballa tutto. 


int main()
{
   int mat[N][N];
   int riga;
   int colonna;
   struct my_struct vettore[N];


   lettura(mat, &riga, &colonna);
   stampa(mat, riga, colonna);
   ordina(mat, riga, colonna);
   diagonale (vettore, mat, riga, colonna);
}
void lettura (int mat[][N], int *riga, int*colonna){
    FILE*fp=fopen("input.txt", "r");

    int r, c;
    fscanf(fp,"%d", &r);
    fscanf(fp,"%d", &c);
printf("%d %d\n", r, c);
    *riga=r;
    *colonna=c;

    for (int i=0; i<r; i++){
         for (int j=0; j<c; j++){
            fscanf(fp,"%d", &mat[i][j]);
         }
    }
    fclose(fp);
}

void stampa(int mat[][N], int riga, int colonna){
        for (int i=0; i<riga; i++){
         for (int j=0; j<colonna; j++){
            printf("%d ", mat[i][j]);
         }
         printf("\n");
    }

}

void ordina(int mat[][N], int riga, int colonna){
   int  temp=0;
   int  min=0;
    for (int i=0; i<riga; i++){
         for (int j=0; j<colonna-1; j++){
           if (i%2==0){
                if(mat[i][j]>mat[i][j+1]){
                    temp=mat[i][j];
                    mat[i][j]=mat[i][j+1];
                    mat[i][j+1]=temp;
                }
          }
           if (i%2!=0){
           if (mat[i][j]<mat[i][j+1]){
                    temp=mat[i][j];
                    mat[i][j]=mat[i][j+1];
                    mat[i][j+1]=temp;
                }
       }
    }
    }
printf ("\n");
     for (int i=0; i<=riga-1; i++){
         for (int j=0; j<colonna; j++){
                printf("%d ", mat[i][j]);
}
printf ("\n");
}

}

7 Risposte

  • Re: ERRORE NELLA LETTURA

    Mi sa che hai tralasciato qualche informazione utile per poterti rispondere, tipo come è fatto il tuo file “input.x”? E cos'è my_struct?

    Poi vedo che nel programma passi alle tue funzioni gli argomenti riga e colonna senza prima assegnarli un valore.
    E qual è il valore della variabile N?

  • Re: ERRORE NELLA LETTURA

    07/02/2023 - euscar ha scritto:


    Mi sa che hai tralasciato qualche informazione utile per poterti rispondere, tipo come è fatto il tuo file “input.x”? E cos'è my_struct?

    Poi vedo che nel programma passi alle tue funzioni gli argomenti riga e colonna senza prima assegnarli un valore.
    E qual è il valore della variabile N?

    My struct non è importante per il problema, riga e colonna prendono i valori e le dimensioni dal file ed N sta solo a definire il numero limite di caratteri. 

    Il problema è nell'ordinare la matrice.. se ho una matrice con dimensioni 3x3 ad esempio 

    5 4 7 
    3 2 6 
    7 0 2 
    Me li ordina bene. Invece se la matrice è ad esempio 4x4

    5 4 7 9
    3 2 6 4
    7 0 2 4
    7 3 8 0

    Mi ordina solo i primi 2 per ogni riga

  • Re: ERRORE NELLA LETTURA

    Edit.

    Deduco che oltre ai dati della matrice inserisci nel file di testo anche il numero di righe e di colonne.

    Posso provare più tardi a far girare il tuo codice, ora non ho più tempo ;)

  • Re: ERRORE NELLA LETTURA

    07/02/2023 - euscar ha scritto:


    Mi sa che hai tralasciato qualche informazione utile per poterti rispondere, tipo come è fatto il tuo file “input.x”? E cos'è my_struct?

    Poi vedo che nel programma passi alle tue funzioni gli argomenti riga e colonna senza prima assegnarli un valore.
    E qual è il valore della variabile N?

    My struct non è importante per il problema, riga e colonna prendono i valori e le dimensioni dal file ed N sta solo a definire il numero limite di caratteri. 

    Il problema è nell'ordinare la matrice.. se ho una matrice con dimensioni 3x3 ad esempio 

    5 4 7 
    3 2 6 
    7 0 2 
    Me li ordina bene. Invece se la matrice è ad esempio 4x4

    5 4 7 9
    3 2 6 4
    7 0 2 4
    7 3 8 0

    Mi ordina solo i primi 2 per ogni riga

  • Re: ERRORE NELLA LETTURA

    07/02/2023 - euscar ha scritto:


    Edit.

    Deduco che oltre ai dati della matrice inserisci nel file di testo anche il numero di righe e di colonne.

    Posso provare più tardi a far girare il tuo codice, ora non ho più tempo ;)

    Sisi, giusto. Ti ringrazio

  • Re: ERRORE NELLA LETTURA

    Ho testato il tuo programma.
    In pratica stai eseguendo l'ordinamento in modo sbagliato.

    Io ho provato ad esempio con il metodo di "Ordinamento a bolle". Se non lo conosci, cerca in rete come funziona.
    Lavora con i vettori. Quindi su ogni riga della tua matrice.


    Non mi è chiaro cosa intendi per “mettere in ordine crescente le righe positive, mentre quelle negative in ordine decrescente”.
    Io ho considerato righe pari in ordine decrescente e righe dispari in ordine crescente.

    Di seguito il codice relativo all'ordinamento.
    Il ciclo più esterno (quello con l'indice i) cicla sulle righe della matrice (i vettori da ordinare).
    I due cilci (indice j e indice k) servono per eseguire l'ordinamento a bolle.

    for(int i=0; i<riga; i++)
    	{
    		if(i%2==0)
    		{
    	        for(int j=0; j<colonna-1; j++)
    			{
    				for(int k=0; k<colonna-1-j; k++)
    				{
    					if(mat[i][k]>mat[i][k+1])
    					{
    						temp=mat[i][k];
    	                    mat[i][k]=mat[i][k+1];
    	                    mat[i][k+1]=temp;
    	                }
    	        	}
    	    	}
    		}
            
    		if(i%2!=0)
    		{
    	        for(int j=0; j<colonna-1; j++)
    			{
    				for(int k=0; k<colonna-1-j; k++)
    				{
    					if(mat[i][k]<mat[i][k+1])
    					{
    						temp=mat[i][k];
    	                    mat[i][k]=mat[i][k+1];
    	                    mat[i][k+1]=temp;
    	                }
    	        	}
    	    	}
    		}
    	}
  • Re: ERRORE NELLA LETTURA

    07/02/2023 - euscar ha scritto:


    Ho testato il tuo programma.
    In pratica stai eseguendo l'ordinamento in modo sbagliato.

    Io ho provato ad esempio con il metodo di "Ordinamento a bolle". Se non lo conosci, cerca in rete come funziona.
    Lavora con i vettori. Quindi su ogni riga della tua matrice.


    Non mi è chiaro cosa intendi per “mettere in ordine crescente le righe positive, mentre quelle negative in ordine decrescente”.
    Io ho considerato righe pari in ordine decrescente e righe dispari in ordine crescente.

    Di seguito il codice relativo all'ordinamento.
    Il ciclo più esterno (quello con l'indice i) cicla sulle righe della matrice (i vettori da ordinare).
    I due cilci (indice j e indice k) servono per eseguire l'ordinamento a bolle.

    for(int i=0; i<riga; i++)
    	{
    		if(i%2==0)
    		{
    	        for(int j=0; j<colonna-1; j++)
    			{
    				for(int k=0; k<colonna-1-j; k++)
    				{
    					if(mat[i][k]>mat[i][k+1])
    					{
    						temp=mat[i][k];
    	                    mat[i][k]=mat[i][k+1];
    	                    mat[i][k+1]=temp;
    	                }
    	        	}
    	    	}
    		}
            
    		if(i%2!=0)
    		{
    	        for(int j=0; j<colonna-1; j++)
    			{
    				for(int k=0; k<colonna-1-j; k++)
    				{
    					if(mat[i][k]<mat[i][k+1])
    					{
    						temp=mat[i][k];
    	                    mat[i][k]=mat[i][k+1];
    	                    mat[i][k+1]=temp;
    	                }
    	        	}
    	    	}
    		}
    	}

    GRAZIE MILLE, ADESSO VA.  MI HAI SALVATA!! 

Devi accedere o registrarti per scrivere nel forum
7 risposte