Anwendung - Auswertung von Rechentermen

Auswertung mit Hilfe von zwei Stapeln

Die Auswertung von Rechentermen soll mit Hilfe von zwei Stapeln durchgeführt werden.

Auswertung eines Rechenterms

Wir benutzen im Folgenden zwei Objekte der Klasse Stapel.

Klassendiagramm

Eine Implementierung der Klasse Stapel findest du in der Datei stapel.py.

Aufgabe 1

Ergänze zunächst den folgenden Python-Dialog passend zur Abbildung oben.

>>> t = Stapel(['*', '-', 92, 79, 27])
>>> s = Stapel()
>>> print(t.getStapel())
['*', '-', 92, 79, 27]
>>> print(s.getStapel())
[]
>>> e = t.pop()
>>> s.push(e)
>>> print(t.getStapel())
['*', '-', 92, 79]
>>> print(s.getStapel())
[27]
...

Aufgabe 2

Der folgende (noch unvollständige) Quelltext zeigt, wie man eine Funktion zur Auswertung von Termen implementieren kann.

from stapel import *

def auswerten(term):
    t = Stapel(term)
    s = Stapel()
    while not t.isEmpty():
        print('T:', t.getStapel())
        print('S:', s.getStapel())
        print()
        e = t.pop()
        if type(e) == int:
            s.push(e)
        else:
            ...
    print('T:', t.getStapel())
    print('S:', s.getStapel())
    print()
    return s.top()

Ergänze die Implementierung, so dass folgender Python-Dialog möglich wird. Teste die Funktion auswerten auch mit anderen Termen.

>>> auswerten(['*', '-', 92, 79, 27])
T: ['*', '-', 92, 79, 27]
S: []

T: ['*', '-', 92, 79]
S: [27]

T: ['*', '-', 92]
S: [27, 79]

T: ['*', '-']
S: [27, 79, 92]

T: ['*']
S: [27, 13]

T: []
S: [351]

351
X

Fehler melden

X

Suche