Esercizio liste C

di il
21 risposte

Esercizio liste C

#include <stdlib.h>
#include <stdio.h> /* ora puoi usare NULL */

/* scrivi qui la definizione del tipo "elist" (elemento della lista) con i campi "info" (intero) e "next" (prossimo elemento) */
typedef struct e{
struct e* next;
int info;
}elist;

/* scrivi qui la definizione del tipo "plist" che e' un riferimento ad un oggetto di tipo "elist" */

typedef elist* plist;

/* funzione */

int valore_massimo_lista(plist p){

/* scrivi qui il codice che calcola il valore massimo contenuto in una lista
semplicemente concatenata di interi passata in input e lo ritorna come output.
Se la lista non ha nessun elemento ritorna zero. */


int massimo;
if(p==NULL)
return 0;
massimo=p->info;
while (p!=NULL) {
if (p->info > massimo)
massimo = p->info;
p = p->next;

}

return massimo;
}

21 Risposte

  • Re: Esercizio liste C

    Che compilatore usi? Qual è la riga in cui ti dà l'errore? Oppure è un errore in esecuzione?
    Puoi postare tutto il codice?
  • Re: Esercizio liste C

    Sto utilizzando un compilatore sul sito di un mio professore, purtroppo non mi dice su quale riga c'è l'errore.
  • Re: Esercizio liste C

    int valore_massimo_lista(plist p){
    
    	int massimo;
    
    	if(p==NULL) return 0;		// A)
    
    	massimo=p->info;   // B) il primo è il massimo di partenza
    	while (p!=NULL) {
    		if (p->info > massimo)
    			massimo = p->info;
    		p = p->next;
    	}
    
    	return massimo;
    }
    Io proverei ad aggiungere il controllo sul primo elemento (te lo chiede l'esercizio), vedi commento A)
    Poi di sicuro inizializzerei massimo con il primo valore, vedi commento B)

    Dubito che questo risolva l'errore, ma è più corretto...
  • Re: Esercizio liste C

    Grazie delle risposte, ora è più corretto, ma mi da comunque lo stesso errore.
  • Re: Esercizio liste C

    Execution Section

    Si è verificato un errore in esecuzione (stai afferendo ad un puntatore NULL?)
    Il messaggio di errore è proprio questo?
  • Re: Esercizio liste C

    L'errore è questo:

    Compilation Section

    Compilation successful
    Execution Section

    Si è verificato un errore in esecuzione (stai afferendo ad un puntatore NULL?)
  • Re: Esercizio liste C

    Marco747, ti prego, non cambiare il codice originale, altrimenti le mie indicazioni sembreranno quelle di un imbecille e non vorrei in futuro avere delle conferme rileggendo questi post!!!
    Ad ogni modo, cosa intende il tuo professore per "afferendo"? Mi sembra una cattiva traduzione di qualcosa, non è che magari puoi avere un output in inglese?
  • Re: Esercizio liste C

    candaluar ha scritto:


    Marco747, ti prego, non cambiare il codice originale, altrimenti le mie indicazioni sembreranno quelle di un imbecille e non vorrei in futuro avere delle conferme rileggendo questi post!!!
    Ad ogni modo, cosa intende il tuo professore per "afferendo"? Mi sembra una cattiva traduzione di qualcosa, non è che magari puoi avere un output in inglese?
    Scusami per aver cambiato il codice
    comunque non è possibile avere un output in inglese, non capisco neanche io cosa intende per afferire ad un null, dato che c'è anche l'istruzione di controllo ma rimane comunque lo stesso errore.
  • Re: Esercizio liste C

    Supponendo che il problema sia nella funzione valore_massimo_lista(), prova a farle ritornare un valore fisso, es.:
    int valore_massimo_lista(plist p){
       return 42;
    }
    Forse ti darà altri errori, ma non questo dell'"afferendo"; se è così allora poi ci aggiungi una per volta le varie parti.
  • Re: Esercizio liste C

    Ho provato mettendo un valore e non mi da più quell'errore.

    Cattura.PNG
    Cattura.PNG

  • Re: Esercizio liste C

    Bene, ora prova ad aggiungere solo
       if(p==NULL) return 0;      // A)
    dovrebbe funzionare il Test5
  • Re: Esercizio liste C

    Grazie per il primo passo

    adesso il codice è:

    if(p==NULL)
    return 0;
    p=p->next;

    Funzionano TEST 4,5,6
  • Re: Esercizio liste C

    Aggiungiamo altra carne al fuoco:
    if(p==NULL)
    	return 0;
    while(p)
    {
    	p=p->next;
    }
  • Re: Esercizio liste C

    Ho provato sia con while(p) che con while(p!=NULL)
    mi da il solito errore del puntatore afferente a null
Devi accedere o registrarti per scrivere nel forum
21 risposte