PDA

Visualizza la versione completa : [C] Implementare struttura dati lista


giovd1
10-04-2012, 17:58
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.




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


}

alka
10-04-2012, 18:05
Il linguaggio va indicato anche nel titolo, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Qui l'ho aggiunto io. Tienilo a mente per le discussioni future.

giovd1
10-04-2012, 18:14
scusami non l ho fatto apposta! è il secondo post che scrivo nel primo l ho inserito !!!
per un attimo ho pensato che mi avessero subito risposto al problema !!
incrocio le dita ...Con C cè da impazzzzzzzire !!!!

oregon
10-04-2012, 19:36
Non è chiaro quanto e cosa tu non sappia fare ... potresti cominciare a leggere

http://it.wikipedia.org/wiki/Lista_concatenata

ma non so se ti sono chiare queste nozioni.

Il codice, come hai detto tu, viene di conseguenza ...

giovd1
11-04-2012, 01:16
Grazie Oregon per la risposta, cerco di spiegarmi meglio,
premesso che ho molte lacune in C ,l ho studiato tempo fa poco e male e ricordo pochissimo,
sto cercando di risolvere l esercizio sopra descritto.
Provandolo a risolvere utilizzando funzioni e puntatori ci sono riuscito ma la soluzione che mi interessa è utlizzando una struttura dati di tipo lista.
ho letto tutto ciò che riguarda una struttuar di dati e le liste concatenate,, e con l ultilizzo di essa avrei una serie di nodi per poter caricare
facilmente gli elemnti del vettore e della matrice durante le operazioni descritte
dalle funzioni "serializza" e "deserializza" , la mia difficoltà è capire come gestire
una struct node, ricordo di essermi esercitato in passato su strutture semplici tipo studente/matricola ma non molto elaborate.
Mi manca un metodo, un "apripista" per capire come ragionare in merito a questo esercizio.
Sono nuovo del forum, non sto assolutamente chiedendo la soluziona bella e comoda! avrei solo bisogno di capire come ci si arriva!
spero di essermi spiegato meglio stavolta.
grazie a te a tutti coloro che interveranno in mio aiuto.

oregon
11-04-2012, 10:38
Avevo capito la difficoltà ma l'unico modo per proseguire in questo forum è che tu ci dia un tuo esempio di codice con la lista (ovviamente un primo tentativo) e ci dica dove ti fermi (magari con del codice che non fa quello che pensi).

Solo così potremo approfondire i tuoi problemi ....

Caiodark
12-04-2012, 08:59
Googlando ho trovato una semplice spiegazione di come si programmano le liste in C e, guarda caso, è una guida proprio in questo sito.

Clicca qui (http://programmazione.html.it/guide/lezione/1111/introduzione-alle-liste/)

Onestamente, un forum è ideale per risolvere problemi concreti e circoscritti, non aprire topic su argomenti arci-trattati in rete che potresti trovare impiegando 20 secondi usando i motori di ricerca.

giovd1
12-04-2012, 13:34
Caiodark, di guide ce ne sono tante, ti ringrazio per avermi suggerito anche questa e grazie per avermi detto che ci mettevo 20 secondi con google per trovarla!
non voglio essere molto polemico nei tuoi confronti , ma se una cosa non si riesce a capire leggendo guide, si cerca un aiuto, con un esempio pratico,!" ribadisco non volevo l esercizio bello e fatt!(lo dimostra che una soluzione l ho trovata e postata)
e non era mia intenzione aprire un post "la lezione del giorno"...
Onestamente avrei preferito che ti risparmiassi la polemica sugli argomenti arci*trattati e la velocita di trovare risposte.
un forum è un luogo di aggregazione e di studio,dove gli argomenti si riaprono secondo esigenze diverse, e se tutti fossero bravi come te e con 20 secondi trovi tutte le soluzioni, nessuno scriverebbe più.

alka
12-04-2012, 13:43
Originariamente inviato da giovd1
non voglio essere molto polemico nei tuoi confronti , ma se una cosa non si riesce a capire leggendo guide, si cerca un aiuto, con un esempio pratico,!" ribadisco non volevo l esercizio bello e fatt!(lo dimostra che una soluzione l ho trovata e postata)

In tal caso, si interviene nella discussione dicendo cosa si è consultato sul Web e spiegando quali sono i punti non chiari della guida o della risorsa letta.

In assenza di questo, chiaramente, l'unica cosa che si può intuire è che si attende la risoluzione del problema da parte di terzi.

Se non si capisce e si cerca un aiuto, va detto chiaramente cosa non si è capito, e in quel caso non ci sono problemi a fornire un aiuto, altrimenti è naturale pensare che si voglia la "pappa pronta" (che sia codice o analisi).

giovd1
12-04-2012, 14:21
MARCO, ripeto non volevo la pappa bella e pronta !! l ho scritto !! se qualcuno mi avesse postato un esempio anche di un esercizo esplicativo con array utilizzando una struttura di lista, cosa che non ho trovato su google e da nessuna parte !! poteva essermi d aiuto
probabilmente non riesco a spegarmi bene o sono nel posto sbagliato!
io di norma chiedo sempre tutto gentimente e con rispetto, e che mi girano...quando
con superficialità mi si dice ,,bastava "leggere la guida e occorrono 20 secondi" ...lo avrei gia fatto se lo ritevevo opportuno! o siamo su un forum dove si vince qualcosa nel postare un aiuto? o si deve dimostare di saperne più degli altri? ?
Non so come si fa ma a quest punto preferirei che si eliminasse il post, meglio evitare inutili discussioni e non vorrei accussare chi liberamente puo' scrivere quello che vuole! e urtare la sua suscettibilità.
Grazie lo stesso per l aiuto.
Ciao ragazzi

Loading