Langages de programmation –TP9
Structures de données et algorithms en JAVA
En classe :
Notation polonaise inversée - Reversed Polish Notation (RPN)
•RPN: une notation mathématique dans laquelle chaque opérateur suit l'ensemble de ses
opérandes
•Exemples:
–3 +4 devient 3 4 +
–3 - 4 + 5 devient 3 4 + 5 - (l'opérateur apparaît immédiatement après le second
opérande)
•Avantage:
–Il élimine les parenthèses : 3 - (4 + 5) devient, sans doute 3 4 5 + -
–L'évaluation des expressions arithmétiques est plus rapide
•Mise en œuvre: avec PILE
Infixe expression (par exemple IE = 3 +4) -> Postfix expression (par exemple PE = 3 4 +)
•Passer par IE de gauche à droite (avec une instruction de boucle)
–Si un opérande est rencontré, ajoutez-le à PE
–Si "(" est rencontré, poussez-le à STACK
–Si un opérateur est rencontré, alors:
•pop de la pile à plusieurs reprises et ajouter à chaque opérateur PE qui a la
même priorité ou supérieur avec l'opérateur rencontrés (si la pile n'est pas
vide)
•ajouter l'opérateur rencontre de la pile
–Si ")" est rencontré, alors:
•pop de la pile à plusieurs reprises et ajouter à chaque opérateur PE jusqu'à
ce que "(" se trouve dans la pile
•enlever le "(" de la pile: ne pas ajouter "(" à PE)!!
–Lorsque IE est vide, ajoutez tous les éléments de la pile au PE
–Affichage PE
•Exemple sur le tableau noir pour IE = (5-6/2)*(1+3)
•http://scriptasylum.com/tutorials/infix_postfix/algorithms/infixpostfix/index.htm
Implementez l’algorithme en JAVA.
Évaluer Expression Postfix
•Ajouter ";" à la fin de PE
•Passer par PE de gauche à droite, avec une boucle while-do: while PE[i]!=“’;” do
–si PE [i] est l'opérande, poussez-le à STACK
–si PE [i] est l'opérateur, puis:
•pop de l'élément de la pile et l'a appelé avec A
•pop de l'élément de la pile et l'a appelé avec B
•effectuer B opérateur A et pousser le résultat dans le STACK
–Peek la pile et l'afficher la tête (le résultat de l'opération)
•Exemple sur le tableau noir pour
PE = 5 6 2 / - 1 3 + *