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

Algorithmes et structures de données Discussion :

Algorithme Notation préfixé -> notation infixée d'une formule


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Par défaut Algorithme Notation préfixé -> notation infixée d'une formule
    Bonjour,

    sur un sujet d'examen de logique propositionnelle, on doit présenter un algorithme qui refait la notation infixée d'une formule en notation polonaise sans parenthèses.

    une idée pour commencer s'il vous plait

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    As-tu une idée de la grammaire des expressions en notation polonaise ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre éclairé
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Par défaut
    je n'ai pas pensé à ça

    EXPR -> OP | v EXPR EXPR | ^ EXPR EXPR | -> EXPR EXPR | <-> EXPR EXPR

    OP -> a|b|c|d........|y|z

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    A partir de celà, tu dois pouvoir te débrouiller avec des règles de réécriture.
    Tu n'as pas EXPR -> ! EXPR ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre éclairé
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Par défaut
    Citation Envoyé par Trap D Voir le message
    A partir de celà, tu dois pouvoir te débrouiller avec des règles de réécriture.
    merci,

    c'est quoi les règles de réecriture?

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Je pensais simplement à ceci
    Si EXPR -> ^EXPR EXP donne par réécriture (EXPR ^ EXPR).

    Comme c'est TREEEEEEEEEEEEES loin pour moi, j'appelle ça des règles de réécriture.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par acacia Voir le message
    sur un sujet d'examen de logique propositionnelle, on doit présenter un algorithme qui refait la notation infixée d'une formule en notation polonaise sans parenthèses.
    Bonjour.

    Est ce que tu dois fournir un affichage avec un minimum de parenthèse ?

    De toutes façons, la solution générale est de parser ton expression pour en obtenir un arbre, puis de faire un pretty printer pour cet arbre. Là où ça se complique un peu, c'est pour la position des parenthèses si tu ne veux pas en mettre trop. Réussir à atteindre le nombre minimal de parenthèse n'est pas exactement trivial, mais ça se fait.
    [EDIT]
    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ./a.out
     
    <-> a -> b ! c
    a <-> (b -> !c)
     
    -> v a b ^c d
    a v b -> c ^ d
     
    -> ! v a b ^c d
    !(a v b) -> c ^ d
    [/EDIT]

    Bon courage
    Dernière modification par alex_pi ; 30/12/2007 à 16h13.

  8. #8
    Membre éclairé
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Par défaut
    Citation Envoyé par alex_pi Voir le message
    Bonjour.

    Est ce que tu dois fournir un affichage avec un minimum de parenthèse ?

    De toutes façons, la solution générale est de parser ton expression pour en obtenir un arbre, puis de faire un pretty printer pour cet arbre. Là où ça se complique un peu, c'est pour la position des parenthèses si tu ne veux pas en mettre trop. Réussir à atteindre le nombre minimal de parenthèse n'est pas exactement trivial, mais ça se fait.
    [EDIT]
    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ./a.out
     
    <-> a -> b ! c
    a <-> (b -> !c)
     
    -> v a b ^c d
    a v b -> c ^ d
     
    -> ! v a b ^c d
    !(a v b) -> c ^ d
    [/EDIT]

    Bon courage
    Bonjour,
    merci de m'avoir répondu

    je dois fournir le résultat avec les parenthèses si necessaire.

    j'ai trouvé des solutions avec des piles et des tableaux mais je n'ai pas très bien compris comment ça fonctionne

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    il te faut construire un arbre avec pour noeud tes opérateurs et pour feuilles tes expressions. Les opérateurs ont entre 1 et n fils en fonctions du nombre d'argument, a chaque opérateur tu crées un nouveau noeuds a chaque expression tu crées une feuilles et tu remonte au premier fils droits non valorisés
    ex : - + a b c
    -
    / \
    + c
    / \
    a b
    pour la réécriture il suffit de reparcourir l'arbre, dans un premier temps un parenthésage amssifs permet d'être sur)
    ((a + b) - c)

    La gestion de l'arbre est fortement lié au langage utilisé

  10. #10
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par jarko Voir le message
    il te faut construire un arbre avec pour noeud tes opérateurs et pour feuilles tes expressions. Les opérateurs ont entre 1 et n fils en fonctions du nombre d'argument, a chaque opérateur tu crées un nouveau noeuds a chaque expression tu crées une feuilles et tu remonte au premier fils droits non valorisés
    J'avoue n'avoir moi même pas bien compris la fin de ton explication... Je dirais surtout qu'à partir du moment où tu as un arbre, imprimer une expression, c'est imprimer la sous expression gauche, imprimer le symbole et imprimer la sous expression droite, en se débrouillant pour avoir un bon parenthésage.

    Voilà une reproduction de ton arbre avec la balise CODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ex : => v a b c
        =>
       /  \
      v    c
     / \
    a  b
    La gestion de l'arbre est fortement lié au langage utilisé
    D'ailleurs, quel langage dois-tu utiliser ? As tu le droit d'utiliser un lexeur/parseur ou dois tu faire le tiens "à la main" ?

  11. #11
    Membre éclairé
    Étudiant
    Inscrit en
    Août 2007
    Messages
    419
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 419
    Par défaut
    Bonsoir

    Merci pour vos réponses

    au fait, qu'est ce qu'un lexeur/parseur?

    je ne vois toujours pas comment faire l'algorithme de la création de cet arbre

Discussions similaires

  1. Algorithme de geolocalisation d'un objet dans une image
    Par EmilieTech dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/11/2009, 12h15
  2. Réponses: 42
    Dernier message: 07/08/2009, 21h11
  3. Algorithme de calcul de l'inverse d'une matrice carrée (nxn)
    Par mobi_bil dans le forum Mathématiques
    Réponses: 5
    Dernier message: 19/03/2009, 23h53
  4. Notation préfixée à infixée
    Par jmi23 dans le forum Scheme
    Réponses: 5
    Dernier message: 03/03/2008, 23h56
  5. Réponses: 28
    Dernier message: 02/03/2008, 00h28

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