[C] Problema con la stampa

Zeldic
Salve. Ho un problema (purtroppo urgente) con la stampa di una matrice, dopo averne fatto la trasposta, la funzione di stampa mi stampa solo una riga di zeri ed il compilatore non mi fa eseguire il debug, per cui non riesco ad individuare l'errore.
Spero tantissimo qualcuno mi possa aiutare ! Ecco le parti di codice interessate :

 

typedef struct {
        int righe;
        int colonne;
        float valori[][DIM];
        } Matrice;


int leggiRighe (Matrice m){
    return m.righe;
    }
    
int leggiColonne (Matrice m){
    return m.colonne;
    }

float leggiMatrice (Matrice m, int i, int j){
      return m.valori[i][j];
      }

void trasposta(Matrice m, Matrice m_t) {
     int i, j; 
     
     for(i = 0; i < leggiRighe(m); i++) { 
          for(j = 0; j < leggiColonne(m); j++) { 
                scriviMatrice(&m_t, i, j, leggiMatrice(m, j, i) ); 
          } 
     }   
} 

void stampaMatrice(Matrice m_t) { 
     int i, j; 
     
     printf("\nSTAMPA MATRICE TRASPOSTA\n\n");
     for(i = 0; i < leggiRighe(m_t); i++) { 
           for(j = 0; j < leggiColonne(m_t); j++) { 
                    printf( "%.2f ", leggiMatrice(m_t, i, j) );
           }
     }
     printf("\n\n"); 
} 



Per favore auitatemi ! :cry:

Risposte
claudio862
Sarebbe più utile postare il sorgente completo. A occhio, nella funzione trasposta() stai chiamando leggiRighe() e leggiColonne() sulla matrice m, mentre dovrebbe essere m_t.

Zeldic
Sì, scusa..
Mancava il main :


 
#include "funzioni.h"

int main()
{
  Matrice a, a_t;
  
  inizializzaMatrice(&a, acq_dim("Inserire il numero di righe: "), acq_dim("Inserire il numero di colonne: "));
  printf("%d %d", a.righe, a.colonne);
  acquisisciValori(&a, leggiRighe(a), leggiColonne(a));
  inizializzaMatrice(&a_t, leggiColonne(a), leggiRighe(a));
  trasposta(a, a_t);  
  stampaMatrice(a_t); 
  
  system("PAUSE");	
  return 0;
}



e la funzione scriviMatrice() :

 
void scriviMatrice (Matrice *m_t, int i, int j, float val){
     m_t->valori[i][j] = val;
     }


Ho provato a sostituire m_t ad m nella funzione trasposta(), ma il risultato non cambia.. Spero ora sia un po' più chiaro il codice..

claudio862
Mancano inizializzaMatrice() e acquisisciValori().

apatriarca
Che compilatore stai usando? Mi sembra infatti strano che tu possa passare una struttura che termina con un array flessibile (o senza dimensione) per valore come fai ovunque nel tuo codice. E anche ammettendo che sia possibile farlo, non vedo come possa eseguire la copia correttamente. Sei certo che il codice che ci hai mostrato sia corretto?

In ogni caso credo che il problema possa essere effettivamente nel passaggio della matrice per valore invece che per riferimento nel codice che traspone la matrice.

EDIT: Credo che sia comunque in generale una cattiva idea quella di passare strutture che rappresentano matrici potenzialmente abbastanza grosse per valore.

Zeldic
Scusatemi se rispondo in ritardo, vi ringrazio tutti dei suggerimenti che mi avete dato.. Effettivamente come dice apatriarca ho sbagliato a passare per valore la matrice. Utilizzando i relativi puntatori ed apportando alcune modifiche al mio codice iniziale il programma funziona correttamente. Grazie ancora, alla prossima ! :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.