Outils pour utilisateurs

Outils du site


nsi:tds:maths:calcnpi

Calculatrice en notation polonaise inversée

Considérons une expression comme "7 * 6 + 4 * (15 + 2)". On souhaite évaluer automatiquement une telle expression. La difficulté est que l'on ne peut pas évaluer au fur et à mesure de la lecture de l'expression.

En effet, il faut attendre d'avoir lu le 6 avant d'exécuter le premier *. Plus compliqué, avant de d'exécuter le premier +, il faut attendre d'avoir fini le calcul 4 * ( 15 + 2)

Notation polonaise inversée

L'idée vient du mathématicien polonais Jan Łukasiewicz d'où le qualificatif de “polonaise”.

Dans notre calcul, plutôt que 7 * 6, on adopte la notation 7 6 *. On lit 7 puis 6, qui sont mis de côtés. Puis la lecture de * exécute immédiatement le calcul sur les derniers nombres mis de côté.

Avant d'aller plus loin, précisons le vocabulaire : +, -, * font les opérations, ce sont des opérateurs. Les nombres subissent les opérations, ce sont des opérandes.

Utilisation d'une pile

Dans 4 * (15 + 2), la bonne notation sera 4 15 2 + *. Et voici l'exécution correspondante :

  • Lecture de 4. Mis en mémoire dans une pile → 4.
  • Lecture de 15. Idem → 4:15.
  • Lecture de 2. Idem → 4:15:2.
  • Lecture de +. Dépilement des deux dernières opérandes et exécution : 15 + 2 = 17, puis empilement du résultat → 4:17
  • Lecture de *. Dépilement de 7 et 17, exécution 4 * 17 = 68, empilement → 68
  • Plus de calcul, le résultat est tout ce qui reste à dépiler : 68.

L'expression 7 * 6 + 4 * (15 + 2) peut alors être convertie en 7 6 * 4 15 2 + * +. C'est la notation polonaise inversée. Vous remarquerez que les parenthèses deviennent inutile.

Vers 1990, Hewlett Packard commercialisait des calculatrices, comme la 48G ci-contre, utilisant la notation polonaise inversée. Les expressions étaient entrées dans une pile et au lieu d'entrer par exemple 45 * 3, on entrait 45 3 *. C'est déroutant au début mais une fois l'habitude prise, c'est beaucoup plus efficace !

À faire

Écrire le programme Python qui, partant du calcul écrit en notation polonaise inversée, avec seulement les opérateurs + - et * et des opérandes entières, exécute le calcul.

nsi/tds/maths/calcnpi.txt · Dernière modification : de goupillwiki