PDA

Visualizza la versione completa : [C] Trasposta utilizzando matrice come struttura


Split91
17-03-2011, 11:38
Devo effettuare la trasposta utilizzando la struttura dati matrice.. Senza usare la struttura dati non ho problemi, ma con questa struttura la matrice outupt viene azzerata stampando 0..
A cosa è dovuto?



#include <stdio.h>
#include <stdlib.h>
#define r 100
#define c 100
struct matrice {
float m[r][c];
int righe;
int colonne;
};
typedef struct matrice matrice;
int i,j;
void trasposta(matrice mat1, matrice mat2);


int main(int argc, char *argv[])
{
matrice m_in;
matrice m_out;

printf("Numero righe: ");
scanf("%d", &m_in.righe);
printf("\nNumero colonne: ");
scanf("%d", &m_in.colonne);
printf("\nNumero righe:");
scanf("%d", &m_out.righe);
printf("\nNumero colonne: ");
scanf("%d", &m_out.colonne);
for (i=0; i<m_in.righe; i++)
{
for (j=0; j<m_in.colonne; j++)
{
printf("a[%d][%d]",i,j);
scanf("%d", &m_in.m[i][j]);

}
}

trasposta(m_in, m_out);
for (i=0; i<m_in.righe; i++)
{
for (j=0; j<m_in.colonne; j++)
{
printf("%5f",m_out.m[i][j]);

}
printf("\n");
}

system("PAUSE");
return 0;
}
void trasposta(matrice mat1, matrice mat2)
{
int i,j;
for (i=0; i<mat1.righe; i++)
{
for (j=0; j<mat1.colonne; j++)
{
mat2.m[i][j]=mat1.m[j][i];

}
}

}

YuYevon
17-03-2011, 12:40
Devi passare la struttura mat2 per "riferimento" (cioè devi passare il suo indirizzo) altrimenti viene fatta una copia locale di tutti i suoi campi e le modifiche non sono visibili in main(). Tra l'altro, dato che passare una struttura per copia non è molto performante perché viene fatta una copia byte per byte di tutti i campi, ti consiglio di passare per riferimento anche la prima struttura, per quanto non necessario.

Per il resto, nella scanf() usi %d ma ovviamente ci va %f dato che leggi valori float. Inoltre, perché leggi il numero di righe e di colonne di entrambe le matrici? Dovrebbe bastare per quella di input dato che la matrice trasposta deve avere le stesse dimensioni di quella di origine.

Split91
17-03-2011, 12:46
YuYevon grazie mille ho risolto tutto :D

Loading