Ciao a tutti!
Eccomi già qua che vi tormento.. Scusate il disturbo.
Ho un esercizio sulle matrici che non riesco a cavarci fuori i piedi...
Ecco il testo:
Creare i file matrix.h e matrix.c che consentano di utilizzare la seguente struttura:
struct matrix {
size_t N, M;
double *data;
};
E la funzione :
extern struct matrix *mat_transpose( const struct matrix *mat);
La struct consente di rappresentare matrici di dimensione arbitraria, dove N è il numero di righe, M è il numero di colonne e data è un puntatore a NxM valori di tipo double memorizzati per righe.
La funzione accetta come parametro un puntatore ad una matrice e deve ritornarne la trasposta, allocata dinamicamente sull'heap. Il puntatore alla matrice non sarà mai NULL.
Allora il mio file matrix.h è il seguente :
#if!defined MATRIX_H
#define MATRIX_H
#include <stdlib.h>
struct matrix {
size_t N, M;
double *data;
};
extern struct matrix *mat_transpose (const struct matrix *mat);
#endif
Poi ho creato un file main.c
#include "matrix.h"
#include <stdio.h>
int main(void)
{
struct matrix A;
A.N = 2;
A.M = 3;
A.data = malloc(sizeof(double) * 6);
A.data[0] = 1.0;
A.data[1] = 2.0;
A.data[2] = 3.0;
A.data[3] = 4.0;
A.data[4] = 5.0;
A.data[5] = 6.0;
printf( "%d\n" , mat_transpose(&A));
}
Fin qui penso che sia giusto.. Adesso arrivano gli errori nell'implementazione della funzione mat_transpose..
Ecco il file matrix.c
#include "matrix.h"
//N rappresenta il numero di righe, M il numero di colonne
struct matrix *mat_transpose( const struct matrix *mat)
{
size_t i = 0; // i = indice di riga
size_t j = 0; // j = indice di colonna
struct matrix trasposta;
for( i = 0; i < (mat->N); i++)
{
for( j = 0; j < (mat->M); j++)
{
trasposta.N = mat->M;
trasposta.M = mat->N;
}
}
}
Allora il mio obiettivo è scambiare le righe con le colonne perché questa è la definizione di matrice trasposta. Solo che se faccio come ho fatto, non mi scambia niente.
Vorrei metterci gli indici i e j in questo modo..
(trasposta.N)[i] = (mat->M)[j];
(trasposta.M)[j] = (mat->N)[i];
Solo che il compilatore mi da un sacco di errori.. E quindi non penso sia la cosa corretta da fare..
Cioè non so come fare in modo di scambiare le righe con le colonne..
Ed essendoci anche la struct mi causa un po' di problemi..
Poi occorre mettere anche il return poiché la funzione deve ritornare una struct matrix..
Se metto però
return &trasposta;
Mi dà un warning che dice:
"Returning address of local variable or temporary "
Mi potreste aiutare??
Nell'attesa di una risposta vi ringrazio anticipatamente !