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](https://schuljahr.inf-schule.de/2019-20/content/4-algorithmen/2-listen/4-stapel/4-anwendung_rechenterme/termauswertung.png)
Wir benutzen im Folgenden zwei Objekte der Klasse Stapel
.
![Klassendiagramm](https://schuljahr.inf-schule.de/2019-20/content/4-algorithmen/2-listen/4-stapel/4-anwendung_rechenterme/kd_stapel.png)
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