Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    vi giuro che per un attimo ho temuto di essere in una specie di incubo o di essere completamente rimbambito. ho dovuto copiare ed eseguire per tirare un sospiro di sollievo...

    svegliatevi.

  2. #12
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Originariamente inviato da rsdpzed
    vi giuro che per un attimo ho temuto di essere in una specie di incubo o di essere completamente rimbambito. ho dovuto copiare ed eseguire per tirare un sospiro di sollievo...

    svegliatevi.
    Potresti rendere chiara al mondo la tua risposta.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #13
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Vediamo il tuo algoritmo di "inversione" della lista:

    codice:
    t_list inverti_lista(t_list lista)
    {
    	printf("sono dentro");
    	t_node*curr;
    	t_node*first;
    	curr=lista;
    	first=lista;
    	while((curr->link)!=NULL)
    	{
    		(curr->link)->link=curr->link;
    		curr=curr->link;
    	}
    	first->link=NULL;
    	lista=curr;
    	return lista;
    }
    Se tu hai almeno due nodi nella lista, allora curr non diventa mai uguale a NULL.
    Supponiamo di avere due nodi, che simbolicamente chiamo A e B, A ha come successivo B dopodiché la lista finisce perché B ha NULL come valore del puntatore all' elemento successivo.
    All' inizio dell' algoritmo curr punta ad A.
    Con queste istruzioni:

    codice:
    (curr->link)->link=curr->link;
    curr=curr->link;
    Il puntatore al successivo di B punta ad A, e curr punta a B.
    Ora alla seconda iterazione esegui di nuovo le istruzioni (ti ricordo che il successivo di A è B e il successivo di B è B).

    (curr->link)->link=curr->link; collega il successivo del successivo di B al successivo di B.Ma il successivo di B è B, così come il successivo del successivo di B è B.
    Per cui nella seconda iterazione curr non cambia valore e questo vale per tutte le altre iterazioni.curr non raggiungerà mai il valore NULL e non si esce mai dal while.
    Se la lista contiene un solo elemento questo problema non si verifica.

  4. #14
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Supponiamo che ora facesse funzionare l'inverti, poi gli altri algoritmi non funzionerebbero più come dovrebbero perchè presuppongono che la lista sia ordinata...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #15
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    @Scara. innanzitutto scusami per il tono, so che non devo farmi prendere la mano.
    per il resto basta leggere il post.

    @slashino. Al di la del problema algoritmico (che ti avevo gia detto e che who am i non poteva chiarirlo meglio) il mio consiglio (spassionato e gratuito) vale ancora anzi piu di prima visto che sostieni di averlo fatto il tracing: spendi piu tempo sul debug e migliora le tue capacità di tracing perchè le cose piu avanti andranno sempre peggio. Una descrizione del problema come quelle che dai tu, scusa la franchezza, sono inaccettabili. Se programmi in C devi sapere esattamente cosa sta succedendo in ogni angolo del tuo programma, al di la dei problemi logici e algoritmici.
    qualche consiglio:

    -Testa le funzioni sempre una alla volta prima di metterle insieme alle altre, perchè potrebbe succedere che mentre testi una, riproduci un caso partcolare che smette di far funzionare bene un'altra precedente.

    - hai messo le printf prima dopo e durante il while DENTRO la funzione di inversione?

    - in quelle printf nel main ci si confonde, usa di piu \n e \t

    - hai un ide che ti permette di inserire i breakpoint ed eseguire il programma passo passo? inizia ad usare questi strumenti.

    buon sabato

  6. #16
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ok, grazie a tutti, siamo d'accordo sul fatto che "inversione" è sbagliata. La mia domanda era però un'altra: perchè la print_list si comporta come ho spiegato prima se inserisco "inverti_lista" (a prescindere dalla sua correttezza)? Ciò che ha detto Scara95 andrebbe bene se la chiamata alla funzione di inversione precedesse quella della print_list, e quindi quest ultima si troverebbe a lavorare su una lista non ordinata, ma non è cosi...

  7. #17
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Originariamente inviato da rsdpzed
    perchè potrebbe succedere che mentre testi una, riproduci un caso partcolare che smette di far funzionare bene un'altra precedente.
    come è possibile ciò? penso sia questo il mio caso......

  8. #18
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    metti questo codice dentro la funzione di inversione

    codice:
    printf("\n\nprima del while\n\n");
    	t_node*curr;
    	t_node*first;
    	curr=lista;
    	first=lista;
    	while((curr->link)!=NULL)
    	{
    		printf("dentro il while\n");
    		(curr->link)->link=curr->link;
    		curr=curr->link;
    	}
    	printf("\n\ndopo il while\n\n");
    	first->link=NULL;
    	lista=curr;
    	return lista;
    ti si riempie lo schermo di "dentro il while"?

  9. #19
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    si, ma questo l'avevo già provato. Il fatto è che non mi stampa la lista con un elemento cancellato, la cui print_list precede la funzione inverti....In che modo la funzione di inversione (sbagliata) può condizionare ciò che la precede?

  10. #20
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    ma sei sicuro? a me la print_list senza l'elemento (quello cancellato) funziona con o senza l'inversione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.