Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Cercare nodo con voto più alto (liste)

    Salve a tutti. Ennesimo problema con le liste. Poco tempo fa avevo avuto un problema simile e lo riuscii a risolvere grazie a voi. Lì si trattava di cercare il parlamentare con il voto più alto, però era differente perchè lì il confronto lo dovevo fare tra tutti gli elementi della lista, qui solo tra alcuni, poichè devo cercare in una lista l'esame sostenuto con un dato professore, con il voto più alto.

    Ho provato a scrivere questa funzione, ma non va, anche se non da errori di alcun tipo.
    Mi esce scritto "Il voto più alto lo hai preso all'esame di con 162727273 (sfilza di numeri a caso)". Non mi stampa il nome dell'esame e come voto mi stampa una riga di numeri che non so da dove escono.

    codice:
    TNode* esame_prof(TList list, char prof[]){
        TNode* max;
        if(list==NULL){
            return NULL;
        }
    
        while(list!=NULL){
            if((strcmp(list->info.satellite.docente, prof)==0) && list->info.satellite.voto > max->info.satellite.voto){
                max=list;
                list=list->link;
            }
            list=list->link;
        }
        return max;
    }
    Credo che il problema sia in questa linea di codice:
    codice:
    list->info.satellite.voto > max->info.satellite.voto
    Dato che max non ha un valore (e non posso porlo uguale a list, perchè non so se il primo valore della lista è un esame sostenuto con quel professore). Ho provato inizializzando max a NULL, ma va in crash

    Come posso risolvere?

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    max va settato a null. prima controlli se l'esame in questione è quello che ti interessa poi se max è NULL lo assegni a max altrimenti lo confronti prima con max...

    P.S.
    non è un problema con le "liste" ma con i controlli di flusso. cioè la base per poter risolvere qualsiasi problema con un qualsiasi linguaggio.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da rsdpzed
    max va settato a null. prima controlli se l'esame in questione è quello che ti interessa poi se max è NULL lo assegni a max altrimenti lo confronti prima con max...

    P.S.
    non è un problema con le "liste" ma con i controlli di flusso. cioè la base per poter risolvere qualsiasi problema con un qualsiasi linguaggio.
    Grazie per il consiglio, ho risolto così

    codice:
    TNode* esame_prof(TList list, char prof[]){
        TNode* max=NULL;
    
        if(list==NULL){
            return NULL;
        }
    
        while(list!=NULL){
            if((strcmp(list->info.satellite.docente, prof)==0)){
                if(max==NULL){
                    max=list;
                }else{
                    if(list->info.satellite.voto > max->info.satellite.voto){
                        max=list;
                    }
                }
            }
            list=list->link;
        }
    
        return max;
    }

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    ed è perfetto.

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    TNode* esame_prof(TList list, char prof[]){
        TNode* max;
        if(list==NULL){
            return NULL;
        }
        while((list != NULL) && (strcmp(list->info.satellite.docente, prof) != 0))
            list = list->link;
        max = list;
        while(list!=NULL){
            if((strcmp(list->info.satellite.docente, prof) == 0) && (list->info.satellite.voto > max->info.satellite.voto))
                max=list;
            list=list->link;
        }
        return max;
    }
    Io avrei fatto così...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Manca un'inizializzazione: all'inizio max andava inizializzato a NULL nel mio codice...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Grazie Scara, è sempre utile vedere modi diversi di risolvere un problema
    Comunque in fin dei conti le due soluzioni non sono tanto diverse, forse con la tua soluzione risparmio qualche linea di codice però

  8. #8
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Non solo... la soluzione proposta da Scara è piu ottimizzata perchè una volta trovato il primo esame utile eviti tutte le volte di controllare se max è null.

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Originariamente inviato da rsdpzed
    Non solo... la soluzione proposta da Scara è piu ottimizzata perchè una volta trovato il primo esame utile eviti tutte le volte di controllare se max è null.
    Era questo il motivo principale del mio post ^^
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  10. #10
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da Scara95
    Era questo il motivo principale del mio post ^^
    Come non detto: rigrazie
    Non ci avevo fatto caso

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.