Adloun

NSI (terminale) · Chapitre 1 · Application directe du cours

Problème — Évaluation d'une expression en notation postfixée

Structures de données linéaires · niveau 2

Énoncé

Problème — Évaluation d'une expression en notation postfixée.

La notation postfixée (ou polonaise inverse) écrit les opérateurs après leurs opérandes : par exemple "3 4 + 5 *" signifie . Écrire une fonction evaluer_postfixe(expr) qui évalue une telle expression à l'aide d'une pile.

Corrigé

On parcourt les jetons (tokens). Un nombre est empilé ; un opérateur dépile ses deux opérandes, calcule, et empile le résultat. À la fin, la pile contient l'unique valeur du résultat.


def evaluer_postfixe(expr):
    pile = []
    for jeton in expr.split():          # decoupe selon les espaces
        if jeton in ("+", "-", "*", "/"):
            droite = pile.pop()          # second operande
            gauche = pile.pop()          # premier operande
            if jeton == "+":
                pile.append(gauche + droite)
            elif jeton == "-":
                pile.append(gauche - droite)
            elif jeton == "*":
                pile.append(gauche * droite)
            else:
                pile.append(gauche / droite)
        else:
            pile.append(float(jeton))    # un nombre : on empile
    return pile.pop()                    # resultat final

# Tests
print(evaluer_postfixe("3 4 + 5 *"))     # 35.0
print(evaluer_postfixe("10 2 / 3 -"))    # 2.0

La pile mémorise les résultats intermédiaires, exactement comme la pile d'exécution d'un calcul. L'expression étant parcourue une fois et chaque opération de pile coûtant , le coût total est , où est le nombre de jetons.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →