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 :

Reverse Polish Notation - Fabrique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Par défaut
    Bonjour à tous,

    Tout nouveau sur le forum, je programme depuis peu de temps : langage C depuis 1an et (C++,POO) depuis 3mois.

    J'ai actuellement un projet à réaliser : la création d'une calculatrice à notation inverse polonaise. Pour ceux qui ne connaissent pas voilà de quoi vous faire rêver :

    http://en.wikipedia.org/wiki/Reverse_Polish_notation

    Pour ce qui est de ma calculatrice je vous ai joint un premier schéma UML (partiel pour vous faire comprendre mon idée)... Cependant mon soucis est que je ne suis pas encore bien à l'aise avec les DESIGN PATTERN et que donc j'aurai aimé votre expertise la dessus car j'ai deux trois idée de PATTERN qui pourrait être utiles mais je n'arrive pas à rendre ça concret...

    Notamment une Fabrique mais comment faire???

    [IMG][/IMG]

    Bien entendu si vous voulez plus de détails ou carrément le sujet du projet pour mieux comprendre le projet n'hésitez pas

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    pourquoi une fabrique ?
    La réalisation d'une calculatrice en notation polonaise inversée est un exercice classique qui donne juste à réfléchir sur le parsing de chaîne de caractères. Généralement il s'agit d'un exercice réalisé en C.

    Le moyen le plus simple qui me (re)vient à l'esprit est de réaliser un arbre, qui peut être représenté par cette struct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Operation {
    char operation; // +-/*
    double leftMember; // le membre gauche est un simple chiffre
    double rightMember; // le membre droit est un simple chiffre
    struct Operation* leftMemberOp; // le membre gauche est lui-même résultat d'une opération
    struct Operation* rightmemberOp; // le membre droit est lui-même résultat d'une opération
    };
    qu'il suffira de parser et réaliser les opérations dans le bon ordre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    D'un autre côté, l'opération n'est pas ici "en RPN". Elle est stockée en arbre, et la RPN n'est qu'une représentation possible de cet arbre (en l’occurrence, le fruit d'un parcours postfixe).

    Une opération stockée en RPN, c'est juste une liste, qui peut être évaluée (ou re-transformée en arbre) avec une simple pile.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Par défaut
    Merci pour ta réponse Bousk !

    Pour ce qui est de cette calculatrice RPN, la fabrique(abstract factory) me semble la bienvenue car je veux centraliser la création des objets tout en déléguant à chaque classe concernée la création de son Objet.

    Voici un peu plus de détail sur le projet :


    La calculatrice peut manier différents types de constante :

    --Entière : suite de chiffres
    --Rationnelle : deux entiers séparés par le caractère '/'
    --Réelle : suite de chiffres pouvant accepter une virgule
    --Complexe : constituée de deux constantes (Entière, Rationnelle ou Réelle)
    séparées par le caractère '$'
    --Expression : expression entourée du caractère ' à évaluer ultérieurement


    Gestion des données:

    --Les constantes sont stockées dans une pile au fur et à mesure de l'exécution
    --Les X derniers éléments de la pile sont affichés à l'écran (où X est
    paramétrable)


    Évaluation d'une expression:

    Une expression est composées d'opérateurs et de constantes séparés par des
    espaces. Une expression est évaluée lorsque l'utilisateur appuie sur la touche
    ENTRÉE. Dans le cas de la constante expression, (expression bornée par le
    caractère ' et stockée dans la pile) l'évaluation s'opère à l'aide de l'opérateur EVAL.


    Voici mon diagramme UML, un peu modifié :


  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense que tu te compliques un peu trop la vie pour les complexes. Tu devrais les intégrer au reste, faire que toute expression soit potentiellement complexe.

    De manière similaire, les calculatrices simples n'ont pas de type "entier", par contre elles basent leur calcul à virgule flottante en décimal plutôt qu'en binaire IEEE 754.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Est-il possible de bloquer le reverse engineering ?
    Par fugi dans le forum Assembleur
    Réponses: 39
    Dernier message: 31/07/2007, 02h33
  2. [bioinfo] reverse complementaire d'une sequence
    Par perlgirl dans le forum Bioinformatique
    Réponses: 6
    Dernier message: 18/06/2004, 11h22
  3. Conversion fpu -> notation scientifique décimale
    Par Alucard_Math dans le forum Assembleur
    Réponses: 4
    Dernier message: 13/05/2004, 16h44
  4. [Flash MX 2004]Notation par point
    Par willowII dans le forum Flash
    Réponses: 4
    Dernier message: 28/04/2004, 13h23
  5. fabriquer un .X
    Par Fikus dans le forum DirectX
    Réponses: 4
    Dernier message: 23/03/2004, 15h24

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