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 lalgorithme 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 + *
Devoir
1. Implementez lalgorithme pour evaluer expressions postfix en JAVA.
2. Ecrivez un programme qui lit des parenthèses dans une chaîne d'entrée standard et
détermine si ses parenthèses sont correctement équilibrées. Par exemple, votre programme doit
imprimer vrai (true) pour [()]{}{[()()]()} et faux (false) pour [(]).
Suggestion : utilisez une pile (Stack).
Stack<Character> stack1 = new Stack<Character>();
stack.push('(');
Pour utilisez stacks, vous devez ecrivez au début du programme:
import java.util.Stack;
Algorithme: nous traversons la chaîne de gauche à droite
Nous poussons sur la pile chaque parenthèse ouverte
Pour chaque parenthèse fermeé, la parenthèse à la tête de la pile doit être une parenthèse
ouverte du même type (et la pile ne doit pas être vide) => puis nous retirons la parenthèse
ouverte de la pile
En fin de compte, la pile doit être vide
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !