Programma con liste,estrazioni dalla testa e inserimento

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Cosa vuoi fare con sta funzione? una possibile soluzione sarebbe quella di estrappolare un dato dalla lista.
    persona è un tipo di dato (come se fosse un int x intenderci) e quindi non puoi usarlo nel modo che lo stai usando tu. Puoi fare invece una cosa del genere.
    
    bool estTesta (lista& inizio, lista & dataCheRiceve)
    {lista p = inizio;
    if (p == 0) return false;
    dataCheRiceve.nome = p->nome;
    dataCheRiceve.eta = p->eta;
    
    inizio = p->successiva;
    delete p;
    return true;
    }
    
    e usarlo così nel main:
    
    lista datoCheRiceve;
    estTesta(inizio,datoCheRiceve);
    
    così non ti da errore e funziona. Ma bisogna vedere se effettivamente e ciò che a te serve. Sinceramente però stai capendo cosa la funzione estTesta sta faccendo?
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    #include <cstdlib>
    #include <iostream>
    using namespace std;

    struct persona
    { char nome[20];
    int eta;
    persona* successiva;
    };

    typedef persona* lista;

    lista creaLista (int n)
    {
    lista p, p0 = 0;

    for (int i = 1; i <= n; i++)
    {
    p = new persona;
    cin >> p->nome >> p->eta;
    p->successiva = p0;
    p0 = p;
    }
    return p0;
    }
    bool estTesta (lista& inizio, lista & dataCheRiceve)
    {lista p = inizio;
    if (p == 0) return false;
    dataCheRiceve.nome = p->nome;
    dataCheRiceve.eta = p->eta;

    inizio = p->successiva;
    delete p;
    return true;
    }
    void insTesta (lista& inizio, int nome, int eta)
    {
    lista p = new persona;
    p->nome = persona.nome;
    p->successiva = inizio;
    inizio = p;
    }

    int main()
    {
    const int numero_persone = 10;
    creaLista(numero_persone);
    lista dataCheRiceve;
    estTesta (inizio, dataChericeve);
    insTesta (numero_persone);
    return 0;
    }
    così? a parte che devo sistemare voidi instesta,ma comunque a me dà errore datachericeve.nome
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Ti hanno insegnato come fare la copia di stringhe?
    
    strcpy(datoCheRiceve.nome,p->nome);
    
    è inutile che ti scrivo codice che non sai cosa significa.
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Ma a che mi serve copiare la stringa?non si puo' sistemare così?
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Mi potresti scrivere come correggeresti il programma?perchè io sinceramente meglio di così non saprei correggere,grazie!!
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    struct persona
    { 
    	char nome[20];
    	int eta;
    	persona* successiva;
    };
    
    typedef persona* lista;
    
    lista creaLista (int n)
    {
    	lista p, p0 = 0;
    
    	for (int i = 1; i <= n; i++)
    	{
    		p = new persona;
    		cin >> p->nome >> p->eta;
    		p->successiva = p0;
    		p0 = p;
    	}
    	return p0;
    }
    
    bool estTesta (lista& inizio, lista & datoCheRiceve)
    {
    	lista p = inizio;
    	if (p == 0) return false;
    	strcpy(datoCheRiceve->nome,p->nome);
    	datoCheRiceve->eta = p->eta;
    
    	inizio = p->successiva;
    	delete p;
    	return true;
    }
    
    int main()
    {
    	const int numero_persone = 10;
    	lista testa = creaLista(numero_persone);
    	lista datoCheRiceve = new persona;
    	estTesta(testa,datoCheRiceve);
    	cout << datoCheRiceve->nome << datoCheRiceve->eta << endl;
    	delete datoCheRiceve;
    	system ("pause");
    	return 0;
    }
    
    ho già fatto troppo. A te il resto. Una domanda? Sai cosa sono i puntatori?
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Il programma parte ma il mio dovrebbe estrarre l'elemento in testa, invece questo mi riscrive l'elemento in coda
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Comunque per l'estrazione si deve usare lo schema che avevo scritto all'inizio, è solo che sarà sbagliata qualche parola
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    Ok ci rinuncio. Mi dispiace ma non hai ancora le basi per capire neanche il codice scritto da te. CreaLista torna un puntatore alla testa della lista che viene usato poi nella funzione estTesta. A questa funzione li viene passata la testa della lista + il dato che riceve che essendo definito come lista datoCheRiceve (quindi come: persona * datoCheRiceve) non è nient'altro che un puntatore che punta a nulla. Con new si chiede un po di memoria all'sistema faccendo in modo che sta variabile abbia i campi definti e che non puntino a null. poi la funzione estTesta prima di eliminare l'elemento alla testa (con delete p) copia questa cella nella varibile datoCheRiceve la cui all'uscita della funzione contiene il dato che la funzione ha appena elimanto. Per verificare se è giusto così ti ho messo il cout (operatore di scrittura su file, in questo caso stdout) che ti fa vedere i dati appena elimanti quindi non INSERITI ma ELIMINATI dalla lista. Poi elimino anche la varibile datoCheRiceve una volta che ho verificato che i dati sono stati estratti. Se tu non sei in grado di darmi questa spiegazione ti invito a rilegerti di nuovo tutto il libro dove stai studiando partendo dalla copertina perche così non ci siamo. Quando darai l'esame non ci sarà qualcuno del forum a fare il compito per te.
  • Re: Programma con liste,estrazioni dalla testa e inserimento

    
    bool estTesta (lista& inizio)
    {
       lista p = inzio;
       if (p == 0) return false;
       inizio = p->successiva;
       delete p;
       return true;
    }
    
    nel main:
    
    lista testa = creaLista(numero_persone);
    estTesta(testa);
    
Devi accedere o registrarti per scrivere nel forum
24 risposte