Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

notation infixée en notation postfixée

15 views
Skip to first unread message

ibiiztera

unread,
Apr 19, 2012, 8:16:50 AM4/19/12
to
Bonjour.
Je cherche une méthode pour transformer une expression infixee en notation postfixee.
Comme par exemple:
((A+b)*c)**2
En
A b + c * 2 **
Vu qu'il s'agit d'un encodage utilisateur, ce serait plus simple de lire la notation infixee ensuite de faire les calculs en notation postfixee.
Merci.
Manuel DAHMEN.

pif34

unread,
Apr 19, 2012, 8:31:09 AM4/19/12
to
pour générer une écriture pré ou post fixée, on créé passe par un arbre,
parcours en profondeur, et on applique la récursion avant ou après
l'opération ... donc le mieux est de reconstruire un arbre et regénérer
l'autre ensuite

http://zanotti.univ-tln.fr/ALGORITHMIQUE/PARCOURS-FIXE.html

un ptit google avec les mots clés et t'as toutes les réponses....

Alain Ketterlin

unread,
Apr 19, 2012, 8:42:53 AM4/19/12
to
Regarde le "Shunting Yard" de Dijkstra, par exemple à :
http://en.wikipedia.org/wiki/Shunting-yard_algorithm

Sinon, le problème principal est de parser l'expression originale pour
construire un arbre, puis de faire un parcours postfixé de cet arbre (il
n'est pas nécessaire de construire la liste postfixée). Pour transformer
le texte en arbre abstrait :

- soit tu utilises un générateur d'analyseur (par exemple JFlex +
JavaCup)

- soit tu écris toi-même l'analyseur, en utilisant par exemple une
descente récursive (sur wikipedia, à
http://en.wikipedia.org/wiki/Recursive_descent_parser l'exemple est
une simplification de ce que tu veux faire).

La complexité dépendra essentiellement de ton langage.

-- Alain.

NotMe

unread,
Apr 20, 2012, 7:01:44 AM4/20/12
to
Le 19/04/2012 14:16, ibiiztera a écrit :
je l'avais fait il y a longtemps avec un automate a pile. c'etait
rapide, et ca permettait aussi de calculer les dérivées formelles dont
j'avais besoins pour divers calculs (integration d'un systeme d'ED avec
calcul de la sensibilité des variable et optimisation)

JKB

unread,
Apr 20, 2012, 8:24:59 AM4/20/12
to
Le Fri, 20 Apr 2012 13:01:44 +0200,
NotMe <not...@hotmail.fr> écrivait :
La méthode est facile. Il faut introduire un délimiteur et avoir un
dictionnaire des instructions autorisées et des fonctions
disponibles (avec leurs priorités relatives).

Exemple :
'(2+F(A+b)*c)**2'
'2+F(A+b)*c' 2 **
2 'F(A+b)*c' + 2 **
2 'F(A+b)' c * + 2 **
2 'A+b' F c * + 2 **
2 A b + F c * + 2 **

Si tu veux un code te donnant à peu près ce que tu veux, tu peux en
télécharger un ici : http://www.rpl2.fr et regarder le fichier
analyse_notation_algebrique.c.

La fonction prend une chaîne de caractère en notation algébrique et
la transforme en notation polonaise inversée (sous forme de chaîne
de caractères toujours) avant de l'analyser pour l'exécuter.

Ne reste plus qu'à convertir le code en Java ;-)

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
0 new messages