[C] Problema con la stampa
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 :
Per favore auitatemi !
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 !

Risposte
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.
Sì, scusa..
Mancava il main :
e la funzione scriviMatrice() :
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..
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..
Mancano inizializzaMatrice() e acquisisciValori().
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.
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.
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 !
