Sonntag, 24. September 2017

 

2. Aufgabe 4BHIF

Abgabename: 2017_4bhif_aufgabe2_name_vorname.zip
Abgabetermin - 10.10.2017 - Abgabe auf edvossh

Schreiben Sie einen Stack-basierten Rechner für einen Ausdruck in umgekehrter polnischer Notation (RPN), der auch die Änderungen im Stack zeigt.

Nehmen Sie zunächst an, dass nur korrekte, durch Leerzeichen (Tabs oder Zeilenumbrüche, also White Space) getrennte, Strings von Token eines RPN-Ausdrucks übergeben werden.

Testen Sie mit dem folgenden RPN-Ausdruck:
        3 4 2 * 1 5 - 2 3 ^ ^ / +
Obiger Ausdruck in Infix-Notation sieht folgendermaßen aus:
        3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
oder, weil ^ vor den anderen Operationen ausgewertet werden muss:
        3 + 4 * 2 / ( ( 1 - 5 ) ^ 2 ^ 3 )
Die Ausgabe soll so aussehen:
3 4 2 * 1 5 - 2 3 ^ ^ / +

Input Operation Stack after
3 Push  [3.0]
4 Push  [4.0, 3.0]
2 Push  [2.0, 4.0, 3.0]
* Operate  [8.0, 3.0]
1 Push  [1.0, 8.0, 3.0]
5 Push  [5.0, 1.0, 8.0, 3.0]
- Operate  [-4.0, 8.0, 3.0]
2 Push  [2.0, -4.0, 8.0, 3.0]
3 Push  [3.0, 2.0, -4.0, 8.0, 3.0]
^ Operate  [8.0, -4.0, 8.0, 3.0]
^ Operate  [65536.0, 8.0, 3.0]
/ Operate  [1.220703125E-4, 3.0]
+ Operate  [3.0001220703125]
Final answer: 3.0001220703125
Hinweise:
^
bedeutet Exponent im obigen Ausdruck.
bedeutet Division.


Testen Sie den Rechner auch mit anderen Ausdrücken!

Entwurf:

Entwerfen Sie das Programm so, dass die Auswertung auch ohne die textuelle Ausgabe des Stacks erfolgt kann.

Weiters sollen auch double-Zahlen (zB -314.15927E-2) verwendet werden können.

Was passiert bei ungültigen Ausdrücken?

Erweiterung:

Wie müssten die Klassen geändert/erweitert werden, sodass man den Rechner mit so einem GUI verwenden kann?
Der Rechner sollte etwa so funktionieren, wie dieser Online-Rechner.

Bei dieser Version brauchen Sie kein GUI entwickeln, Sie sollen nur die Klassen so gestalten, dass es dann leicht ist, ein GUI dazu zu programmieren.

Labels: , , ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]