Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68

    [C] Calcolo del massimo in array di liste circolari

    Ho scritto un codice che permette di calcolare il massimo in un array di liste circolari. Nel listato in basso c'è solo la funzione (quindi niente printf che stampino il valore trovato).
    Penso che la logica sia corretta, ma non sono sicuro del ciclo do-while. Qualcuno può darmi una mano?

    codice:
    struct cella
    {
        int valore;
        struct cella *next;
    };
    
    void CercaMax(struct cella (*(*elenco))[MAX_LISTE], int max);
    
    main()
    {
        struct cella (*elenco)[MAX_LISTE] = NULL;
        int valore;
        
        CercaMax(&elenco[MAX_LISTE], valore);
        return 0;
    }
    
    void CercaMax(struct cella (*(*elenco))[MAX_LISTE], int max)
    {
        struct cella *temp;
        temp = (*elenco)[MAX_LISTE];
        int i;
        max = 0;
        
        for(i = 0; i < MAX_LISTE; i++)
        {
            do
            {
                if((temp -> valore) > max)
                {
                    max = temp -> valore;
                }
                temp = temp -> next;
            }
            while(temp != elenco[i]);
    }

  2. #2
    Secondo me è tutto sbagliato, posto il codice che penso sia corretto:
    codice:
    struct cella
    {
        int valore;
        struct cella *next;
    };
    
    void CercaMax(struct cella **elenco, int *max);
    
    int main(void)
    {
        struct cella *elenco = NULL;
        int valore;
    
        /*... Manca l'allocazione della lista ...*/
        
        CercaMax(&elenco, &valore);
        return 0;
    }
    
    void CercaMax(struct cella **elenco, int *max)
    {
        struct cella *temp = *elenco;
        int i = *max = 0;
        
        for(i = 0; i < MAX_LISTE; i++)
        {
            do
            {
                if((temp->valore) > *max)
                {
                    *max = temp->valore;
                }
                temp = temp->next;
            }
            while(temp != elenco[i]);
    
       }
    
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68
    Non ho capito alcune cose:
    1) dato che nella funzione è sottinteso che le liste siano già allocate (è un esercizio che devo fare per l'università, non devo compilarlo ed eseguirlo), devo per forza esplicitare l'allocazione?
    2) perchè max è diventato un puntatore?
    3) non mi è chiara la seguente riga: int i = *max = 0; perchè assegnamo *max a i? max dovrebbe essere il valore massimo di una cella, e i l'indirizzo i-esimo della cella di un array. Inoltre i così verrebbe inizializzato 2 volte (vedi for successivo).

    Per il resto ho capito gli errori che ho fatto

  4. #4
    Originariamente inviato da Andres7X
    Non ho capito alcune cose:
    1) dato che nella funzione è sottinteso che le liste siano già allocate (è un esercizio che devo fare per l'università, non devo compilarlo ed eseguirlo), devo per forza esplicitare l'allocazione?
    E io che ne so ?
    Nel tuo esercizio passavi un puntatore nullo ...

    Originariamente inviato da Andres7X
    2) perchè max è diventato un puntatore?
    Perchè come lo utilizzavi prima, perdevi il suo valore.

    Originariamente inviato da Andres7X
    3) non mi è chiara la seguente riga: int i = *max = 0; perchè assegnamo *max a i? max dovrebbe essere il valore massimo di una cella, e i l'indirizzo i-esimo della cella di un array. Inoltre i così verrebbe inizializzato 2 volte (vedi for successivo).
    Significa semplicemente: a *max assegno 0, e a i assegno *max.
    Quindi inizializzo tutti e due a zero in un colpo.
    Tutto qua.

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.