Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892

    [C] liste,ricorsione e indirizzi

    Ciao raga,
    cm al solito ho bisogno di voi!
    Passo al mio terribile quesito: devo fare una procedura(due versioni, iterativa e ricorsiva) che mi ritorna l'indirizzo del primo elemento pari (non di posizione pari!!) di una lista di interi .Se non ci sono elementi pari devo ritornare NULL.

    Chi mi aiuta?

    Mille thanks!
    Debian Sarge 3.01a
    Slackware 10.2

  2. #2
    Allora, supponi di avere una struttura del genere

    codice:
    // definisco puntatore a struttura nodo
    typedef pnode *struct node
    
    // definisco struttura nodo
    struct node {
         int info;
         pnode next;
    }
    A questo punto la soluzione iterativa è immediata

    codice:
    // Funzione iterativa per la ricerca del primo pari
    // Passo la testa della lista già caricata
    pnode trovaPrimoPari(pnode lista) {
    
         // dichiaro una lista temporanea per scorrere
         // la lista in input
         pnode i; 
    
         // scorro la lista
         for(i=lista; i!=NULL; i=i->next) {
    
              // verifico che l'elemento trovato sia pari
              // ovvero se la divisione per 2 ha come resto 0
              if(i->info%2==0) {
                   
                   // Ritorno il nodo che contiene tale numero
                   return i;
              }
         }
    
         // Se arrivo qui non ho trovato il numero pari
         // quindi ritorno NULL
         return NULL;
    }
    La soluzione ricorsiva è immediata

    codice:
    // Funzione ricorsivaper la ricerca del primo pari
    // Passo l'iesimo nodo della lista già caricata
    // La prima volta passo la testa
    pnode trovaPrimoPariRic(pnode lista) {
    
         // Caso Base 1: lista vuota
         if(lista==NULL) {
    
              // Nono ho trovato il numero pari
              return NULL;
         }
    
         // Caso Base 2: trovo il primo numero pari
         if(lista->info%2==0) {
    
              // Ho trovato il numero pari
              // Ritorno il nodo che contiene il primo
              // numero pari
              return lista;
         }
    
         // Se arrivo qui eseguo ricorsione
         // sul resto della lista
         return trovaPrimoPariRic(lista->next);
    }
    Capito???

  3. #3
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    si, ma io devo ritornare un indirizzo di memoria (del tipo esadecimale per capirci)......!

    chi mi aiuta?
    Debian Sarge 3.01a
    Slackware 10.2

  4. #4
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    uppino?
    Debian Sarge 3.01a
    Slackware 10.2

  5. #5
    Prova a stampare il puntatore di ritorno con un

    codice:
    printf("%d", pnode);
    e vedi che scrive.

    Potrebbe funzionare, ma non ne ho la certezza.

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    per stampare in esadecimale devi usare %x, e per prendere l'indirizzo di memoria e non il valore che esso contiene non devi dereferenziare con *.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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