Liste chaine qui affiche pas le resultat

Signaler
-
Messages postés
548
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
24 avril 2021
-
Bonjour,

je travail avec codeblock

je suis capable d'entre les données mais las section affichetout ne fonctionne pas pourquoi

merci a l'avance de la reponse



#include <iostream>

using namespace std;

enum {kpluspetit, kplusgrand, kidentique};

class donnees
{
public:
    donnees( int val):mavaleur(val){}
    ~donnees(){}
    int compare (const donnees &);
    void affiche()
    {
        cout<<mavaleur<<endl;
    }
private:
    int mavaleur;
};
int donnees::compare (const donnees & autresdonnees)
{
    if(mavaleur<autresdonnees.mavaleur)
        return kpluspetit;
    if (mavaleur >autresdonnees.mavaleur)
        return kplusgrand;
    else
        return kidentique;
}
class noeud;
class noeudtete;
class noeudqueue;
class noeudinterne;


class noeud

{
public:
    noeud(){}
    virtual~noeud(){}
    virtual noeud * insere (donnees* lesdonnees)=0;
    virtual void affiche()=0;
    private:
};
class noeudinterne: public noeud
{
public:
    noeudinterne (donnees* lesdonnees, noeud  * suivant);
    ~noeudinterne (){ delete lesuivant; delete mesdonnees;}
    virtual noeud* insere (donnees* lesdonnees);
    virtual void affiche(){mesdonnees->affiche();
    lesuivant->affiche();}
private:
    donnees * mesdonnees;
    noeud * lesuivant;
};
noeudinterne::noeudinterne(donnees * lesdonnees, noeud *suivant):
    mesdonnees (lesdonnees), lesuivant (suivant)
    {

    }
    noeud * noeudinterne:: insere (donnees* lesdonnees)
    {
        int resultat=mesdonnees->compare(*lesdonnees);
        switch (resultat)
        {
        case kidentique:
            case kplusgrand:
                {
                    noeudinterne* donneesnoeud= new noeudinterne(lesdonnees,this);
                    return donneesnoeud;
                }
            case kpluspetit:
                lesuivant= lesuivant ->insere(lesdonnees);
                return this;}

                return this;
    }
                class noeudqueue:public noeud
                {
                public:
                    noeudqueue(){}
                    ~noeudqueue (){}
                    virtual noeud*insere(donnees * lesdonnees);
                    virtual void affiche(){}
                    private:
                };

                noeud * noeudqueue:: insere (donnees* lesdonnees)
                {
                    noeudinterne * donneesnoeud=
                    new noeudinterne (lesdonnees,this);
                    return donneesnoeud;
                }
                class noeudtete:public noeud
                {
                public:
                    noeudtete();
                    ~noeudtete(){delete lesuivant;}
            virtual noeud * insere(donnees * lesdonnees);
            virtual void affiche(){lesuivant->affiche();}
private:
    noeud * lesuivant;
        };
        noeudtete::noeudtete()
        {
            lesuivant = new noeudqueue;
        }
        noeud * noeudtete:: insere (donnees*lesdonnees)
        {
            lesuivant =lesuivant->insere(lesdonnees);
            return this;
    }
    class listechainee
    {
    public:
        listechainee ();
        ~listechainee(){delete matete;}
        void insere (donnees * lesdonnees);
        void affichetout(){matete->affiche();}
    private:
        noeudtete*matete;
    };
    listechainee::listechainee()
    {
        matete= new noeudtete;
    }
    void listechainee:: insere (donnees *pdonnees)
    {
        matete->insere(pdonnees);
    }
int main()
{
   donnees *pdonnees;
   int val;
   listechainee l1;
   int n;
   for (n=0;n<20;n++)
   {
       cout<<"inserer une valeur (0 pour arreter): ";
       cin>>val;
       if(val==0)
        break;
       pdonnees=new donnees(val);
       l1.insere(pdonnees);
   }
   l1.affichetout();


    return 0;
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

Messages postés
548
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
24 avril 2021
70
Bonjour,

J'ai regardé rapidement. Je n'ai pas vu de problème particulier à part que gérer les extrémités comme des cas particuliers ça fait mal à la tête surtout que tes indentations ajoutent aussi à la confusion.
Bravo pour avoir réussi à écrire ça, pourquoi faire simple quand on peut faire compliqué.
Ta question aussi n'aide pas "affichetout ne fonctionne pas". Elle fait quoi? Dans quel cas?