Fachhochschule Augsburg
Praktikum "Softwareentwicklung und Programmierung Teil 1"
Studiengang Interaktive Medien, 24.11.2008

Praktikum "Softwareentwicklung und Programmierung, Teil 1" im Studiengang Interaktive Medien

Aufgabe 7

A)  Stack
Entwickeln Sie eine Klasse "Stapel" welche eine Datenstruktur "Stack" realisiert.  Denken Sie bei der Realisierung an die Metapher eines "Papierstapels". Neue Elemente werden immer oben auf den Stapel gelegt. Soll ein Element vom Stapel entfernt werden, so wird immer das oberste Element genommen. Auf dem Stack sollen Interger-Werte abgelegt werden.
Ihre Klasse Stapel soll folgende Methoden unterstützten:

1)    void push( int value)             Legt den übergebenen Wert value auf dem Stack ab
2)    int pop()                              Liefert als Ergebnis das oberste Element des Stacks zurück. Gleichzeitig wird dieses Element vom Stapel entfernt
3)    boolean empty()                  Liefert true zurück, wenn keine Element auf dem Stack gespeichert ist, andernfalls false.
4)    int peek()                            Liefert als Ergebnis das oberste Element des Stacks zurück. Das oberste Element wird jedoch nicht vom Stapel entfernt
5)    void init()                            Initialisiert den Stack.

Verwenden Sie für die Realisierung des Stacks ein globales Integer-Array, welches initial mit der Größe 10 angelegt wird. Darüberhinaus benötigen Sie eine Klassenvariable size, welche angibt wieviel Werte tatsächlich auf dem Stack abgelegt sind. Berücksichtigen Sie, dass Ihr Stack dynamisch wachsen soll, wenn mehr  Elemente eingefügt werden, als  Ihr  internes Array Platz aufweist. Implementieren Sie hierzu eine Methode "reSize" welche bei Bedarf die Größe des Arrays verdoppelt und die vorhandenen Werte kopiert.

B) Taschenrechner in UPN
 
Entwicklen Sie eine Klasse "UPNCalc", welche einen Taschenrechner für die umgekehrt polnische Notation von arithmetischen Ausdrücken realisiert ( Siehe PostfixNotation.pdf ).
Greifen Sie für die Berechnung der einzelnen Teilausdrücke auf dies Klasse "Stapel" zu, welche für das Abspeichern der Zwischenergebnisse verwendet werden soll.

Folgende arithmetische Operationen sollen von Ihrem Taschenrechner unterstützt werden:      Addition, Subtraktion, Multiplikation, Division
 Nachfolgend ist eine möglicher Programmablauf dargestellt: ( Eingaben sind Blau dargestellt, Ausgaben in Grün )

#:52
>>> Push 52, stacksize: 1
#:24
>>> Push 24, stacksize: 2
op:+
>>> Pop 24, stacksize: 1
>>> Pop 52, stacksize: 0
>>> Adding 52 + 24
>>> Push 75, stacksize: 1
#:6
>>> Push 6, stacksize: 2
op:*
>>> Pop 6, stacksize: 1
>>> Pop 75, stacksize: 0
>>> Multiply 75 * 6
>>> Push 450
, stacksize: 1
(Lehre Zeile)
>>> Ergebnis: 450
, stacksize: 1

Zum Test Ihres Programms berechnen Sie bitte folgende Ausdrücke:

2  2   10  + *
2  2  +  10  *


Wie muss das korrekte Ergebnis lauten?
Wie lauten die Ausdrücke in der sogenannten Infix-Notation (normale Schreibweise für arithmetische Ausdrücke)?


(Freiwillig):   Erweitern Sie Ihr Programm so, dass die Präfixe "#:" und "op:" für die Eingabe entfallen können.


Abnahme: spätestens am 01. 12.