|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[C] problema soluzione esercizio
Ciao,
stavo vedendo gli esercizzi di esame di programmazione 1 con le relative soluzioni ma a mio modesto parere questa soluzione mi sembra sbagliata... L'esercizio è il seguente: "Scrivere una funzione che preso in input il puntatore al primo elemento di una lista di stringhe, elimini i duplicati e ritorni il puntatore alla lista così ripulita. Gli elementi della lista hanno il seguente tipo: typedef struct SList{ char str[30]; struct SList *next; }; Il prototipo della funzione è SList *Ripulisci(SList *) Il codice della soluzione è questa ma mi puzza: Codice:
/* Riceve in ingresso il puntatore al primo nodo e restituisce il puntatore alla lista ripulita */ SList *Ripulisci(SList *list){ if(list != NULL && list->next !! NULL){ SList *e = list; // Imposta il puntatore e al primo nodo do{ if(!strcmp(e-str, e->next-str)){ // Se le stringhe sono uguali SList *p = e->next; e->next = p->next; free(p); } else e = e->next; }while(e->next != NULL); } return list; // Ritorna il puntatore all'inizio della lista ripulita } 1) Si dichiara ile variabili puntaore *e e *p in mezzo al codice....ma non andrebbero dichiarate all'inizio della funzione o è solo una cosa di stile? 2) la funzione compara con la strcmp il valore contenuto nel campo str puntato da e con il valore del campo str puntato da str->next. Se alla prima esecuzione del ciclo non trova due stringhe uguali il valore di e viene fatto passare al nodo successivo con e = e->next e il ciclo ricomincia... ma così non controlla solo nodi adiacenti?!?! Cioè io credo che per ogni nodo dovrebbe scorrere tutti i nodi, se trova un nodo contenente la stessa stringa lo elimina e poi continua a scorrere la lista fino alla fine per vedere se c'è un altro doppione e poi rinizia il ciclo dal secondo nodo e fà la stessa cosa.... Spero di essere stato chiaro E' sbagliata questa soluzione (quella del codice)? Grazie Andrea |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Quote:
ciao ![]() |
||
![]() |
![]() |
![]() |
#3 | |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
Quote:
mmmm si perchè se è ordinata così funzionerebbe, però nel testo non c'è scritto ed è il secondo esercizio che trovo logicamente errato...l'altro era su un vettore di strutture...quindi non ci sono cavoli di interpretazione come questo...la cosa inizia a seccarmi.... + più recente l'ansi o il c99? quale dei due è più usato? |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
![]() ![]() ![]() comunque (non so era tutto specificato nel testo) ma il programma funziona ![]() |
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
un piccolo OT per DarkAngel: vedo che migliori a vista d'occhio: l'altro giorno ti incasinavi con un programma che prende i dati in input e li inserisce in una lista e adesso guarda come ti destreggi tra gli elementi duplicati
![]() ![]() dai scherzi a parte, continua così e fagli vedere di che pasta sei fatto!! ![]() PS: a voler essere veramente pignoli, potremmo dire che quella soluzione un problema ce l'ha, e per l'esattezza si tratta di un leak piuttosto grave; vediamo se lo trovi da te ![]() ![]() |
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
Quote:
![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:59.