ciao ragazzi ho bisogno del vs aiuto!
ho questo esercizio sotto mano
"Progettare una applicazione c che gestisca una matrice di interi M ed una lista di interi L . M è una matrice quadrata n x n con n scelto in maniera dinamica (ad es: inserito dall’utente in fase di esecuzione). Implementare le strutture dati e le seguenti fuzioni:
Serializza: data la matrice M di dimensione nxn restituisce una lista contenente n2 elementi. Gli elementi nella lista sono gli elementi di M ordinati per righe a partire dalla prima riga fino all’ultima.
Deserializza: Data una lista L contenente n2 interi, restituisce una matrice nxn che contiene gli elementi di L organizzati per file di lunghezza n. Nota: utilizzare sempre l’allocazione dinamica per le matrici.
Main: nella funzione main l’utente specifica la dimensione n della matrice e riempie la matrice M di valori interi. L’applicazione serializza la matrice, stampa a video la lista serializzata, somma il valore 5 ad ogni elementro della lista, deserializza la lista e termina visualizzando la matrice che contiene gli elementi deserializzati della lista."
io l horisolto non utilizzando una struttura dati di tipo lista, poichè ho serie difficoltà nel capire come si ragiona e si procede utilizzando una lista, potreste indicarmi come fare? mi basterebbe anche che mi spiegate il procedimento da eseguire. al resto "come sempre" ci penso sempre io :-)
questo è il codice che ho battuto ma che non è corretto.
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo *lista;
typedef struct nodo {
int val;
lista next;
int deserializza (int n,int **mat,int L[]){
int i, j;
int x=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
{ mat[i][j]=L[x];
}x++;}}
int serializza (int n,int**mat,int L[])
{int i, j;
int x=0;
{for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
L[x]=mat [i][j];
x++;} }}}
main()
{
int n,**mat,i,j,x;
printf(" dimensione di n della matrice ? ");
scanf("%d",&n);
x=n*n;
int L[x];
mat = (int**) malloc (n *sizeof (int*)); /*allocamento*/
for (i=0; i<n ; i++)
{ mat[i]= (int*)malloc (n* sizeof (int));}
printf("Lettura matrice %dX%d elemento ;\n", n, n);
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%d",& mat[i][j]);}
}
serializza (n,mat,L);
for(i = 0; i < x; i++){
L[i]+=5;
printf("%d",L[i]);
printf("\t");}
deserializza (n,mat,L);
printf("\n");
printf("\n");
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%3d", mat[i][j]);
}printf("\n");}
for (i=0; i< n ; i++)
free (mat[i]);
free (mat);
}