PT – IC STRUCTURE DE PILE
2) Notation polonaise inversée
La notation polonaise inversée (NPI) est utilisée sur certaines calculatrices (pour plus de détails, voir http:
//fr.wikipedia.org/wiki/Notation_polonaise_inverse). Dans cette notation, les opérateurs arithmé-
tique (+, −,×, ...) sont placés après leurs opérandes (on parle de notation post-fixée). Par exemple, 2+3 s’écrit
2 3 + et 2+3×4 devient 2 3 4 * +. L’un des avantages de cette notation est qu’elle rend inutile l’utilisation
de parenthèses. Par exemple, l’expression (2+4)×3, on pourrait s’écrire 2 4 + 3 *.
L’évaluation d’une expression en NPI nécessite une pile. Le principe est le suivant : le texte est lu de gauche à
droite. Pour chaque élément,
• si c’est un nombre, on l’empile;
• si c’est un opérateur, on dépile les deux derniers nombres, on effectue le calcul, et on empile le résultat.
Le résultat est alors au sommet de la pile.
Exercice 4 : On se propose d’écrire un programme qui demande à l’utilisateur une expression en NPI et qui
affiche sa valeur. On pourra se contenter de travailler dans Net ne gérer que les opérateurs +et ×.
1. Traduire l’algorithme informellement donné ci dessus. Dans cette question, on ne demande pas le détail
des fonctions utilisées, mais seulement leur spécification (reconnaître un opérateur, effectuer l’opération
correspondante, ...). On pourra considérer que l’expression est donnée sous forme d’une liste, par exemple
[10,11,’+’,2,’*’].
2. Implémenter effectivement les fonctions utilisées.
3. (*) Écrire une fonction qui demande à l’utilisateur de taper une expression en NPI, et qui renvoie la liste cor-
respondante. Par exemple, si l’utilisateur tape 10 11 + 2 *, la fonction renvoie [10,11,’+’,2,’*’].
On pourra utiliser la méthode split sur la chaîne de caractères entrée par l’utilisateur.
4. (*) Ajouter les opérations de soustraction et de division entière à votre fonction.
5. (*) Ajouter des opérateurs unaires (par exemple calculant le carré, l’opposé, la valeur absolue, . . .).
3) (*) Création de labyrinthe
La structure de pile permet aussi de construire simplement un labyrinthe dans lequel il y a un unique trajet
permettant d’aller d’une case à une autre (donc en particulier un unique trajet de l’entrée à la sortie). Le
principe est le suivant :
• On marque la case de départ comme atteinte et on l’empile;
• Tant que la pile n’est pas vide :
• On dépile une case;
• Si elle a des voisines non explorées :
• on en choisit une au hasard comme case d’arrivée;
• on ouvre un couloir entre les deux cases;
• on marque la case d’arrivée comme visitée;
• on empile les deux cases.
Exercice 5 :
1. Quelle structure de donnée permet de mémoriser les cases visitées? L’implémenter et écrire des fonctions
est_visitee(x, y) qui indique si la case de cordonnées (x, y) est déjà visitée et visiter(x, y) qui
marque la case comme visitée. On pourra utiliser des variables globales HAUT et LARG pour les dimensions
du labyrinthe.
2. Écrire une fonction voisines(x, y) qui renvoie la liste des voisines non visitées d’une case.
3. Écrire une fonction couloir(x0, y0, x1, y1) qui trace un couloir entre deux cases.
4. Écrire le programme correspondant à l’algorithme ci-dessus.
3/4 DELAY – Paul Constans