Esercizio liste C

di Anonimizzato22643 il
21 risposte
#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

  • Che compilatore usi? Qual è la riga in cui ti dà l'errore? Oppure è un errore in esecuzione?
    Puoi postare tutto il codice?
  • Sto utilizzando un compilatore sul sito di un mio professore, purtroppo non mi dice su quale riga c'è l'errore.
  • 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...
  • Grazie delle risposte, ora è più corretto, ma mi da comunque lo stesso errore.
  • Execution Section

    Si è verificato un errore in esecuzione (stai afferendo ad un puntatore NULL?)
    Il messaggio di errore è proprio questo?
  • L'errore è questo:

    Compilation Section

    Compilation successful
    Execution Section

    Si è verificato un errore in esecuzione (stai afferendo ad un puntatore NULL?)
  • 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?
  • 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.
  • 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.
  • Ho provato mettendo un valore e non mi da più quell'errore.

    Cattura.PNG
    Cattura.PNG

  • Bene, ora prova ad aggiungere solo
       if(p==NULL) return 0;      // A)
    dovrebbe funzionare il Test5
  • Grazie per il primo passo

    adesso il codice è:

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

    Funzionano TEST 4,5,6
  • Aggiungiamo altra carne al fuoco:
    if(p==NULL)
    	return 0;
    while(p)
    {
    	p=p->next;
    }
  • 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