dies ist die Fortsetzung der Aufgabenreihe "Aus klein mach groß":
"Aus klein mach groß": Teil2 - Zahlen und Satzzeichen
"Aus klein mach groß": Teil1 - Stack
Und ist wie die ganze Reihe an Anfänger gerichtet.
Diesesmal nutzen wir die zwei vorherigen Aufgaben, um einen einfachen Rechner zu bauen, der die Eingaben im Postfix Format aktzeptiert.
Einige von uns kennen noch die alten Taschenrechner, die Eingaben in diesem Format erwartetet
.
Dabei werden zuerst die Operanden und dann die Operatoren angegeben.
Bsp:
7 8 +
entspricht: 7+8=15
7 8 + 2 *
entspricht: (7+8 )*2
In dieser Notation braucht man also keine Klammern und auch keine "Gewichtung" der Operatoren.
Nutze also die Funktionen/Klassen aus der Teilaufgabe2 (ggf. anpassen/erweitern ), um ein UPN Rechner-Modul zu bauen.
Dabei bekommt das Rechner-Modul eine Eingabe als String
"1 2+" und gibt ein Ergebnis (oder eine Fehlermeldung) zurück.
Es sollten 4 Grundrechenarten akzeptiert werden: + - * /
Trennzeichen zwischen Operanden (also verschiedenen Zahlen): " " (Leerzeichen).
Trennzeichen zwischen Operanden und Operatoren/Operatoren: entweder Leerzeichen oder kein Trennzeichen.
Bsp: 1 2 + oder 1 2+
Implementiere zusätzlich zum Rechner-Modul ein Ausgabemodul, um
Zwischenergebnisse (optional: auch die durchgeführte Operation/Operatoren) anzuzeigen:
7 8+2 *
Ausgabe:
(7+8= )15 (in Klammern: optionale Ausgabe)
(15*2= )30
Ergebnis=30
Das Ausgabemodul sollte nur zur Fehlersuche/Überprüfung dienen und so integriert sein, dass es sich leicht (im Quellcode) "ausschalten" lässt (also die Anweisungen nicht "untrennbar" mit dem Rechner-Modul verbunden sind - somit bitte keine GUI/CUI anweisungen hineinquetschen, sondern einen Aufruf des Ausgabemoduls).
Gehe davon aus, dass die Eingabe "korrekt" ist, zumindest was das Zahlenformat angeht. Man muss also keine 123.123.123 Formen berücksitigen.
Allgemeine Tipps:
in der letzten Teilaufgabe haben wird aus einem Satz Zahlen und Satzzeichen ausgelesen. Diese Rotine lässt sich nun etwas anpassen (es waren nicht umsonst 4 Satzzeichen
), so dass */+- erkannt werden. Zahlenerkennung kann so belassen werden (es sei denn, man hat RegExpressions verwendet *g*).
Man könnte nun die Eingabe durchgehen und Zahlen einlesen/im Stack ablegen. Kommt ein Operator(*/+-) so werden die letzen beiden Zahlen aus dem Stack geholt und miteinander verrechnet - das Ergebnis kommt wieder auf den Stack.
Wenn nun der String abgearbeitet wurde, liegt im Stack das Endergebnis.
Gibt es bei einer Operation nicht mehr genügend Operanden (z.B wenn noch + abgearbeitet werden muss, im Zahlenstack aber nur eine einzige Zahl steht) oder liegen auf dem Stack nach der Abarbeitung mehrere Zahlen , so war die Eingabe fehlerhaft
"Aus klein mach groß": Teil2 - Zahlen und Satzzeichen
"Aus klein mach groß": Teil1 - Stack
Und ist wie die ganze Reihe an Anfänger gerichtet.
Diesesmal nutzen wir die zwei vorherigen Aufgaben, um einen einfachen Rechner zu bauen, der die Eingaben im Postfix Format aktzeptiert.
Einige von uns kennen noch die alten Taschenrechner, die Eingaben in diesem Format erwartetet

Dabei werden zuerst die Operanden und dann die Operatoren angegeben.
Bsp:
7 8 +
entspricht: 7+8=15
7 8 + 2 *
entspricht: (7+8 )*2
In dieser Notation braucht man also keine Klammern und auch keine "Gewichtung" der Operatoren.
Nutze also die Funktionen/Klassen aus der Teilaufgabe2 (ggf. anpassen/erweitern ), um ein UPN Rechner-Modul zu bauen.
Dabei bekommt das Rechner-Modul eine Eingabe als String
"1 2+" und gibt ein Ergebnis (oder eine Fehlermeldung) zurück.
Es sollten 4 Grundrechenarten akzeptiert werden: + - * /
Trennzeichen zwischen Operanden (also verschiedenen Zahlen): " " (Leerzeichen).
Trennzeichen zwischen Operanden und Operatoren/Operatoren: entweder Leerzeichen oder kein Trennzeichen.
Bsp: 1 2 + oder 1 2+
Implementiere zusätzlich zum Rechner-Modul ein Ausgabemodul, um
Zwischenergebnisse (optional: auch die durchgeführte Operation/Operatoren) anzuzeigen:
7 8+2 *
Ausgabe:
(7+8= )15 (in Klammern: optionale Ausgabe)
(15*2= )30
Ergebnis=30
Das Ausgabemodul sollte nur zur Fehlersuche/Überprüfung dienen und so integriert sein, dass es sich leicht (im Quellcode) "ausschalten" lässt (also die Anweisungen nicht "untrennbar" mit dem Rechner-Modul verbunden sind - somit bitte keine GUI/CUI anweisungen hineinquetschen, sondern einen Aufruf des Ausgabemoduls).
Gehe davon aus, dass die Eingabe "korrekt" ist, zumindest was das Zahlenformat angeht. Man muss also keine 123.123.123 Formen berücksitigen.
Allgemeine Tipps:
in der letzten Teilaufgabe haben wird aus einem Satz Zahlen und Satzzeichen ausgelesen. Diese Rotine lässt sich nun etwas anpassen (es waren nicht umsonst 4 Satzzeichen

Man könnte nun die Eingabe durchgehen und Zahlen einlesen/im Stack ablegen. Kommt ein Operator(*/+-) so werden die letzen beiden Zahlen aus dem Stack geholt und miteinander verrechnet - das Ergebnis kommt wieder auf den Stack.
Wenn nun der String abgearbeitet wurde, liegt im Stack das Endergebnis.
Gibt es bei einer Operation nicht mehr genügend Operanden (z.B wenn noch + abgearbeitet werden muss, im Zahlenstack aber nur eine einzige Zahl steht) oder liegen auf dem Stack nach der Abarbeitung mehrere Zahlen , so war die Eingabe fehlerhaft
