Matthias Reitinger
ɐɯıǝɹ
Quiz #2
Polnischer Taschenrechner
Regeln
Die Regeln und der Ablauf der Quizrunde können wie immer in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält.
Abgabe
Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 28. September 2008 um ca. 20 Uhr.
Das Problem
Der Suchmaschinenbetreiber Hupf strebt weiter nach der Weltherrschaft und drängt dabei immer mehr auf den Markt mobiler Endgeräte. Als nächster großer Coup ist die Veröffentlichung einer Office-Suite für Handys geplant. Dazu soll auch eine Taschenrechneranwendung namens "Calcoid" gehören.
Im Gegensatz zu den bei vielen Handys schon integrierten Taschenrechnern soll Calcoid nicht eine Operation nach der anderen ausführen, sondern komplette Terme berechnen können. Da es auf üblichen Handys umständlich ist, Klammern zu tippen, soll dabei die klammernfreie polnische Notation zum Einsatz kommen.
Deine Aufgabe ist es nun, die erste Version von Calcoid zu entwickeln[1]. Sie soll Terme in polnischer Notation einlesen, diese auswerten und das Ergebnis ausgeben. Dabei sollen die vier Grundrechenarten + - * / sowie Fließkommazahlen als Operanden unterstützt werden.
[1]: Sie muss natürlich nicht auf einem Handy laufen und kann wie immer in der Programmiersprache eurer Wahl umgesetzt werden.
Erweiterung
Als optionale Erweiterungen stehen euch diesmal mehrere Vorschläge zur Verfügung, von denen ihr beliebig viele umsetzen könnt. Gebt in eurer Lösung bitte mit an, welche ihr implementiert habt.
Beispiele
Beispielsitzung (ohne Erweiterungen):
Beispielsitzung (mit Variablen):
Anmerkung: _ soll eine spezielle Variable sein, die stets das Ergebnis der letzten Berechnung speichert.
Beispielsitzung (mit Infixausgabe):
Polnischer Taschenrechner
Regeln
Die Regeln und der Ablauf der Quizrunde können wie immer in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält.
Abgabe
Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 28. September 2008 um ca. 20 Uhr.
Das Problem
Der Suchmaschinenbetreiber Hupf strebt weiter nach der Weltherrschaft und drängt dabei immer mehr auf den Markt mobiler Endgeräte. Als nächster großer Coup ist die Veröffentlichung einer Office-Suite für Handys geplant. Dazu soll auch eine Taschenrechneranwendung namens "Calcoid" gehören.
Im Gegensatz zu den bei vielen Handys schon integrierten Taschenrechnern soll Calcoid nicht eine Operation nach der anderen ausführen, sondern komplette Terme berechnen können. Da es auf üblichen Handys umständlich ist, Klammern zu tippen, soll dabei die klammernfreie polnische Notation zum Einsatz kommen.
Deine Aufgabe ist es nun, die erste Version von Calcoid zu entwickeln[1]. Sie soll Terme in polnischer Notation einlesen, diese auswerten und das Ergebnis ausgeben. Dabei sollen die vier Grundrechenarten + - * / sowie Fließkommazahlen als Operanden unterstützt werden.
[1]: Sie muss natürlich nicht auf einem Handy laufen und kann wie immer in der Programmiersprache eurer Wahl umgesetzt werden.
Erweiterung
Als optionale Erweiterungen stehen euch diesmal mehrere Vorschläge zur Verfügung, von denen ihr beliebig viele umsetzen könnt. Gebt in eurer Lösung bitte mit an, welche ihr implementiert habt.
- Calcoid soll zusätzlich Variablen unterstützen. Sie können im Term als Operanden auftauchen. Vergesst auch nicht dem Benutzer eine Möglichkeit zu geben, die Variablen zu setzen. Wie das aussehen könnte, seht ihr in der Beispielsitzung.
- Calcoid soll bei jeder Berechnung zusätzlich zum Ergebnis den Term zur Kontrolle nochmal in der gewohnten Infixnotation ausgeben (hier ist möglicherweise die Verwendung von Klammern notwendig).
- Calcoid soll zusätzliche Operationen wie Potenzieren, Logarithmieren, Ziehen von Wurzeln, trigonometrische Funktionen etc. unterstützen. Konzipiert das Programm so, dass das Hinzufügen von neuen Operationen (durch einen Programmierer) so einfach wie möglich wird.
- Überlegt euch selbst eine sinnvolle Erweiterung für Calcoid und implementiert diese. Vergesst bitte nicht, die Erweiterung ausführlich zu dokumentieren.
Beispiele
Beispielsitzung (ohne Erweiterungen):
Code:
> 123
123
> * 6 7
42
> * * + 1 2 + 3 4 2
42
> :quit
Bye.
Beispielsitzung (mit Variablen):
Code:
> 123
123
> _
123
> :vars
_ = 123
> a := * 6 7
42
> b := + a 12
54
> :vars
_ = 54
a = 42
b = 54
> :clear
Ok.
> :vars
> :quit
Bye.
Beispielsitzung (mit Infixausgabe):
Code:
> * 6 7
6 * 7 = 42
> + * 1 2 * 3 4
1 * 2 + 3 * 4 = 14
> * + 1 2 + 3 4
(1 + 2) * (3 + 4) = 21
> :quit
Bye.