Fiche de cours

Utiliser une pile pour évaluer une notation en polonais inverse

Lycée   >   Terminale   >   NSI   >   Utiliser une pile pour évaluer une notation en polonais inverse

  • Fiche de cours
  • Quiz et exercices
  • Vidéos et podcasts
Objectif

Utiliser un type de données abstrait pour évaluer des expressions en polonais inverse.

Points clés
  • Pour écrire des expressions algébriques, on peut utiliser différentes notations : infixée (ou infixe), préfixée (ou préfixe) ou postfixée (ou postfixe).
  • La notation en polonais inverse est un type de notation qui est qualifié de postfixé. Cette notation permet d’écrire de façon non ambiguë les calculs, sans parenthèses et en utilisant des piles.
  • Pour obtenir l’évaluation d’une expression en polonais inverse, c’est-à-dire obtenir la valeur décimale de cette expression, on peut utiliser la structure de données de type pile.
Pour bien comprendre
  • Programmation orientée objet avec la notion de classe
  • Pile et file
1. Le polonais inverse

Pour écrire des expressions algébriques, on peut utiliser différentes notations : infixée (ou infixe), préfixée (ou préfixe) ou postfixée (ou postfixe).

a. Les notations infixée, préfixée et postfixée

Les notations infixée, préfixée et postfixée d’une expression algébrique se distinguent par la position que prennent les opérateurs et les opérandes.

Vocabulaire
Une expression algébrique est une suite de chiffres avec des opérations du type +*/ ou ^ (pour les puissances).
Un opérateur est un symbole qui représente une opération.
Remarque
Les opérateurs sont +*/** ou ^ (pour la puissance).
Un opérande est un nombre.
Exemple
+ 5 * 3 est une expression algébrique.
Les opérateurs sont + et *. Les opérandes sont 4, 5 et 3.
La notation infixée

La notation infixée est celle qu’on utilise en mathématiques. On l’utilise lorsqu’on réalise des calculs.

Exemples
  • + 4
  • ((1 + 2) × 3)4
La notation préfixée

Dans la notation préfixée, on écrit l’opérateur puis les opérandes.

Exemples
  • + 3 4
  • + 1 2 × 3 ^ 4
La notation postfixée

Dans la notation postfixée, on écrit les opérandes puis les opérateurs.

Exemples
  • 3 4 +
  • 1 2 + 3 × 4 ^
b. La notation en polonais inverse
La notation en polonais inverse, en abrégé NPI (RPN en anglais pour Reverse Polish Notation) est un autre type de notation, qui est qualifié de postfixé. Cette notation permet d’écrire de façon non ambiguë les calculs, sans parenthèses et en utilisant des piles.
Remarque
La notation en polonais inverse est apparue dans les années 1940, puis fut utilisée dans les calculatrices grand public de l’entreprise HP (Hewlett-Packard) dans les années 1960.
Rappel
Une pile est un type abstrait de structure de données, dans lequel on empile et dépile les données : les dernières données ajoutées à une pile sont les premières à sortir.
Principe
La notation infixée « a operateur b » se note « a b operateur » dans la notation en polonais inverse, avec a et b deux opérandes.
Exemples
  • La notation infixée « 3 + 4 » se note « 3 4 + » en NPI.
  • La notation infixée « ((1 + 2) × 3)4 » se note « 1 2 × 4 ^ » en NPI.
Remarques
  • Le but n’est pas ici d’effectuer la conversion de la notation infixée vers la notation postfixée.
  • L’algorithme qui permet cette conversion se nomme l’algorithme de Shunting-yard ou algorithme de la gare de triage.
2. L'évaluation d'une expression postfixée (NPI)

À l’aide d’un algorithme, on souhaite évaluer une expression postfixée, qui a été conçue avec une notation postfixée telle que le polonais inverse (NPS).

Évaluer une expression postfixée consiste à déterminer la valeur décimale de cette expression.
a. Principe de l'algorithme

Pour évaluer une expression postfixée, c’est-à-dire obtenir la valeur décimale de cette expression, l’algorithme commence par lire un par un les caractères de l’expression postfixée.

  • Si le caractère lu est un opérande (nombre), alors on l’empile en haut de la pile.
  • Si le caractère lu est un opérateur (symbole mathématique), alors :
    • on dépile les deux opérandes qui se trouvent en haut de la pile ;
    • on calcule le résultat en appliquant l’opérateur sur les deux opérandes dépilés ;
    • et on empile le résultat en haut de la pile.
Remarque
On empile les opérandes et non les opérateurs.

Une fois tous les caractères lus, la pile ne contient qu’un seul élément qui correspond au résultat final.

Exemple
On souhaite évaluer l’expression postfixée 1 2 + 4 * 5 +, c’est-à-dire obtenir sa valeur décimale.

On lit un à un les caractères de l’expression postfixée 1 2 + 4 * 5 + pour l’évaluer.
  • Les opérateurs sont les éléments + et *.
  • Les opérandes sont les éléments 1, 2, 4 et 5.
  • Le premier opérateur « + » permet de dépiler les deux opérandes 1 et 2, et d’empiler le résultat de l’opération 1 + 2.

La pile associée à l’expression postfixée 1 2 + 4 * 5 + renverra la valeur décimale 17.
b. L'implémentation en Python
Identifier la présence d’un opérande dans une expression postfixée

Une expression postfixée est représentée par un tableau qui ne contient que des caractères : on obtient une liste.

Exemple
« 3 4 + » est noté ['3','4','+'].
Pour tester si un élément de cette liste de caractères est un opérande (nombre), on utilise la méthode native isdigit() sur les chaines de caractères.
Cette méthode renvoie True si tous les éléments de la chaine de caractères sont des chiffres et False sinon.
Exemple
Soit a='41'. La méthode a.isdigit() renvoie True car cette chaine de caractères ne possède que des chiffres (opérandes).
Évaluer une expression postfixée

Pour implémenter (définir) l’évaluation d’une expression postfixée en Python, on empile les opérandes, on va donc naturellement utiliser la classe Pile.

Création de la classe Pile

Voici l’implémentation de la classe Pile.

Remarque
Les différentes étapes sont indiquées dans les commentaires verts.

Utilisation de la pile pour évaluer une expression postfixée
On utilise la fonction evalpostfixe(liste), qui prend en paramètre la liste qui représente une expression postfixée.

Cette fonction renvoie un nombre flottant (nombre décimal).

Voici l’implémentation de cette fonction.


Voici l’explication de ce code ligne par ligne.

Python Explication
def evalpostfixe(liste): On définit la fonction evalpostfixe qui prend pour paramètre une liste liste.
Cette fonction permet d’évaluer la liste.
    “““Evaluation d’une
    expression postfixe 
    Entrée : une liste
    représentant une
    expression postfixée
    Sortie : un flottant”””
On documente la fonction.
    p=Pile() On affecte une pile vide à la variable p.
    for el in liste: On parcourt les éléments de la liste.
       if el.isdigit():
       p.empiler(float(el))
Si l'élément de la liste est un nombre, alors on l’empile en tant que nombre.
       if el=='+':
       a=p.depiler()
       b=p.depiler()
       p.empiler(b+a)
Si c’est l’opérateur « + » (addition), alors :
  • on dépile les deux derniers opérandes (nombres) de la pile p pour les affecter à a et b.
  • et on empile le résultat de l’opération b+a.
      if el=='–':
      a=p.depiler()
      b=p.depiler()
      p.empiler(b–a)
Si c’est l’opérateur «  » (soustraction), alors :
  • on dépile les deux derniers opérandes (nombres) de la pile p pour les affecter à a et b,
  • et on empile le résultat de l’opération ba.
      if el=='*':
      a=p.depiler()
      b=p.depiler()
      p.empiler(b*a)
Si c’est l’opérateur « * » (multiplication), alors :
  • on dépile les deux derniers opérandes (nombres) de la pile p pour les affecter à a et b,
  • et on empile le résultat de l’opération b*a.
      if el=='/':
      a=p.depiler()
      b=p.depiler()
      assert a!=0,
      “Diviser par zéro”
      p.empiler(b/a)
Si c’est l’opérateur « / » (division), alors :
  • on dépile les deux derniers opérandes (nombres) de la pile p pour les affecter à a et b,
  • on vérifie que a  0 (on dit qu'on lève l’exception de la division par zéro ; on vérifie qu’on ne divise pas par 0),
  • et on empile le résultat de l’opération b/a.
      if el=='^':
      a=p.depiler()
      b=p.depiler()
      p.empiler(b**a)
Si c’est l’opérateur « ^ » (puissance), alors :
  • on dépile les deux derniers opérandes (nombres) de la pile p pour les affecter à a et b,
  • et on empile le résultat de l’opération b**a.
    (En Python b^a se note b**a ou pow(b,a).)
    return p.depiler() On affiche le résultat final en dépilant entièrement la pile p.
Exemple
On souhaite évaluer l’expression 4 5 * 3 +.
Voici l’exécution de la fonction sur Python Tutor avec la liste ['4','5','*','3','+'].

On obtient 23.0, ce qui signifie que l’écriture décimale du résultat est 23.

Évalue ce cours !

 

Des quiz et exercices pour mieux assimiler sa leçon

La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.

S’abonner

 

Des exercices variés pour ne pas s’ennuyer

Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !

Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.

S’abonner

 

Des quiz pour une évaluation en direct

Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.

myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.

S’abonner

Des vidéos et des podcasts pour apprendre différemment

Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.

Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !

S’abonner

 

Des podcasts pour les révisions

La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.

Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.

S’abonner

 

Des vidéos de cours pour comprendre en image

Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !

S’abonner

Découvrez le soutien scolaire en ligne avec myMaxicours

Plongez dans l'univers de myMaxicours et découvrez une approche innovante du soutien scolaire en ligne, conçue pour captiver et éduquer les élèves de CP à la terminale. Notre plateforme se distingue par une riche sélection de contenus interactifs et ludiques, élaborés pour stimuler la concentration et la motivation à travers des parcours d'apprentissage adaptés à chaque tranche d'âge. Chez myMaxicours, nous croyons en une éducation où chaque élève trouve sa place, progresse à son rythme et développe sa confiance en soi dans un environnement bienveillant.

Profitez d'un accès direct à nos Profs en ligne pour une assistance personnalisée, ou explorez nos exercices et corrigés pour renforcer vos connaissances. Notre assistance scolaire en ligne est conçue pour vous accompagner à chaque étape de votre parcours éducatif, tandis que nos vidéos et fiches de cours offrent des explications claires et concises sur une multitude de sujets. Avec myMaxicours, avancez sereinement sur le chemin de la réussite scolaire, armé des meilleurs outils et du soutien de professionnels dédiés à votre épanouissement académique.

Fiches de cours les plus recherchées

NSI

Choisir une structure de données en fonction de la situation

NSI

Rechercher une valeur dans une liste et dans un dictionnaire

NSI

Comprendre la structure hiérarchique des arbres binaires

NSI

Étudier et implémenter un arbre binaire

NSI

Utiliser des arbres binaires de recherche

NSI

Comprendre la structure des graphes

NSI

Implémenter un graphe

NSI

Passer d'une représentation d'un graphe à une autre

NSI

Comprendre le modèle relationnel d'une base de données

NSI

Utiliser l'algèbre relationnel dans une base de données relationnelle