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); }

