Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C] ciclo scansione lista

    stamani stavo studiando le code su un libro, abbastanza importante e famoso, però a un certo punto ho notato una cosa strana.
    allora chiedo a voi se sono scemo io, cosa probabile o è un palese errore del testo.

    nell'inserimento di un nuovo elemento in una coda, il libro mi dice giustamente che è necessario scandire la lista e dopo effettuare l'inserimento in coda.

    mi scrive questo codice per la scansione:
    codice:
    puntTmp = puntatoreTesta;
    if (puntTmp != NULL){ //se la lista ha degli elementi
    while (puntTmp->puntSucc!=NULL) do 
    puntTmp = puntTmp->puntSucc;
    
    ...poi passa alla creazione del nuovo elemento
    }
    else
    {
    crea il primo elemento
    }
    la riga in rosso non è che mi convica molto, non dovrebbe essere qualcosa del tipo :

    codice:
    
    do 
    puntTmp = puntTmp->puntSucc;
    while (puntTmp->puntSucc!=NULL); 
    ?


    Grazie

  2. #2
    in rosso si controlla che al primo passaggio puntTmp->puntSucc!=NULL;
    in blu NON si controlla che al primo passaggio puntTmp->puntSucc!=NULL;

  3. #3
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    cosa ci fa il "do" dopo gli argomenti del while?
    codice:
     $(".canaglia").show()

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    Originariamente inviato da Ifrit
    cosa ci fa il "do" dopo gli argomenti del while?
    è esattamente questo il problema, il libro me lo scirve così, ho provato a correggerlo (in blu), ma non sono sicuro di averlo corretto bene, per questo l'ho postato.

    mi sembra strano che un libro così famoso alla terza edizione abbia fatto un errore del genere

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    Originariamente inviato da MacApp
    in rosso si controlla che al primo passaggio puntTmp->puntSucc!=NULL;
    in blu NON si controlla che al primo passaggio puntTmp->puntSucc!=NULL;
    il controllo del primo passaggio mi sembra lo faccia l'if , ma il mio problema è quel do dopo il while...il libro me lo scirve così

  6. #6
    Originariamente inviato da {-_-}
    ma il mio problema è quel do dopo il while...il libro me lo scirve così
    Non è detto che sia errato, per saperlo bisognerebbe vedere cosa c'è scritto dopo il rosso.
    Ad esempio il seguente è corretto:
    Codice PHP:
    //
    // Compiled with:
    // i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)
    //
    #include <stdio.h>

    int main (){
        while (
    1) do 
        
    printf ("ciao;\n");
        while (
    1);
        return 
    0;


  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    questo è il codice completo. anch'io ho subito pensato ci deve essere un while dopo , ma invece niente di niente

    codice:
    puntTmp = puntatoreTesta;
    if (puntTmp != NULL){ //se la lista ha degli elementi
    while (puntTmp->puntSucc!=NULL) do 
    puntTmp = puntTmp->puntSucc;
    //poi passa alla creazione del nuovo elemento
    puntTmp->puntSucc= (struct elem *) malloc (sizeof(struct elem));
    puntTmp= puntTmp->puntSucc;
    puntTmp->info = ele;
    puntTmp->puntSucc = NULL;
    }
    else
    {
    puntatoreTesta = (struct elem *) malloc (sizeof(struct elem));
    puntatoreTesta->info = ele;
    puntTmp->puntSucc = NULL;
    }

  8. #8
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    ascolta qui c'è qualkosa di troppo strano, fai una cosa, postaci tutto il programma e soprattutto le strutture,
    da come sembra quel while oltre a non servire a nulla e'anche scritto in modo da non far compilare il programma....
    codice:
     $(".canaglia").show()

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    quello che ho postato è l'unica parte di codice scritta sul libro.

    cmq alla fine ho risolto, prima pensavo di aggiustare quel codice sistemando il do-while sintatitcamente errato, poi ho visto che non andava bene, allora ho messo direttamente un while e tutto funziona alla grande

    codice:
    puntTmp = puntatoreTesta;
    if (puntTmp != NULL){                           //se la lista ha degli elementi
          while (puntTmp->puntSucc!=NULL)   //è sufficiente eliminare questo do, ovviamente errato
          puntTmp = puntTmp->puntSucc;
                                                         //poi passa alla creazione del nuovo elemento
          puntTmp->puntSucc= (struct elem *) malloc (sizeof(struct elem));
          puntTmp= puntTmp->puntSucc;
          puntTmp->info = ele;
          puntTmp->puntSucc = NULL;
        }
    else
    {
          puntatoreTesta = (struct elem *) malloc (sizeof(struct elem));
          puntatoreTesta->info = ele;
          puntTmp->puntSucc = NULL;
    }

    ora credo che passerò all'ordinamento di una lista, dopo un meritato riposo

    grazie a tutti voi

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 © 2025 vBulletin Solutions, Inc. All rights reserved.