IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Analyser une expression mathématique


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut Analyser une expression mathématique
    Slt,

    Pour analyser une expression mathématique ( donc , la traduire en expression post fixée ), j'ai modélisé ça ss forme d'arbre binaire que je traverse en post ordre genre :

    (4+3)*5
    donne sur l'arbre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
                         *
     
                  +           5
     
            3          4
    donc , l'expression post fixée ( après avoir traversé l'arbre ) est : 43+5*
    seulement , j'ai une question assez bête ( très ) les noeuds contienent des données entières , et caractères or je vois mal comment faire ça ? ( je ne sais que coder , des arbres avec un seul type pr les noeuds) ou alors ya une astuce et je suis passé à côté ?

    PS : j'ai écrit , un code qui m'analyse ce genre d'expressions en utilisant une pile et ça marche très bien , mais comme je veux pouvoir le faire avec des expressions plus complexes genre : log(x)+2 ou avec des sin , cos , tan ... je me suis penché sur les arbres , je fais pas fausse route au moins ?

    Merci !
    http://amokrane-chentir.blogspot.com { Software engineering, .NET technologies, Imagine cup..}

  2. #2
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Pourquoi tu n'utilises pas la notation polonaise inversée?

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    L'idée est en général de faire une classe abstraite noeud, avec une fonction virtuelle pure éval, dont dérivent les classes NoeudConstant (une valeur, pas de fils), NoeudOpérateurBinaire (l'opérateur en question, deux fils), NoeudFonctionUnaire (un pointeur de fonction, un fils), NoeudMax(Un vector de fils), que sais-je encore.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par reggae
    Pourquoi tu n'utilises pas la notation polonaise inversée?
    la notation polonaise inversée , c pas l'expression post fixée ? car j'essaye justement de la generer avec cet arbre ( ça me parait plus pratique pr des expressions compliquées)

    Sinon , merci pr l'idée JolyLoic je ne suis pas expert en polymorphisme , mais je vais essayer de m'y mettre qd même , ya t'il une autre solution moins OO ?
    http://amokrane-chentir.blogspot.com { Software engineering, .NET technologies, Imagine cup..}

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Amokrane
    Citation Envoyé par reggae
    Pourquoi tu n'utilises pas la notation polonaise inversée?
    la notation polonaise inversée , c pas l'expression post fixée ? car j'essaye justement de la generer avec cet arbre ( ça me parait plus pratique pr des expressions compliquées)

    Sinon , merci pr l'idée JolyLoic je ne suis pas expert en polymorphisme , mais je vais essayer de m'y mettre qd même , ya t'il une autre solution moins OO ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum NodeKind { ...};
    union NodeContent {
       int i;
       double d;
       ...
    };
    struct Node {
       NodeKind kind;
       NodeContent content;
    };
    Mais bon l'heritage a quand meme ete invente pour ce genre de choses.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut
    merci pr ta solution moins douloureuse

    mais bon , je sens que je vais devoir tripatouiller ma classe Arbre , qui n'est même pas terminé ( ça bug au niveau de la suppression d'un noeud ya tellement de cas ) !

    thx !
    http://amokrane-chentir.blogspot.com { Software engineering, .NET technologies, Imagine cup..}

Discussions similaires

  1. évaluer une expression mathématique
    Par aminems dans le forum C++
    Réponses: 4
    Dernier message: 27/05/2008, 00h41
  2. Analyse et calcul d'une expression mathématique
    Par Tipoun dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 31/03/2008, 20h47
  3. utiliser la puissance 2 en dehors d'une expression mathématique
    Par clemarch dans le forum Mathématiques - Sciences
    Réponses: 3
    Dernier message: 17/03/2008, 11h05
  4. Evaluer une expression mathématique
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/07/2007, 18h28
  5. Réponses: 2
    Dernier message: 20/11/2006, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo