Hallo Jack,
auch hier kann ich folgendes Buch empfehlen:
Sedgewick
In diesem Buch beschreibt Herr Sedgewick in Pascalnotation verschiedene Algorithmen.
Unteranderem auch einen Algorithmus für einen Taschenrechner. Na ja nicht direkt. Es werden
Algorithmen für Staple erklärt. Ein Beispiel beschäftigt sich genau mit der Deiner Fragestellung.
D.h. für Lösung Deines Problems solltest Du mit einem Stapel arbeiten.
Im folgenden muss vorausgesetzt werden dass Du weißt was ein Stapel ist.
Push holt einen Wert vom Stapel, Pop packt einen Wert auf den Stapel.
Damit ließe sich folgender Ausdruck wie folgt berechenen:
Code:
push(5)
push(9)
push(8)
push(pop+pop)
push(4)
push(6)
push(pop*pop)
push(pop*pop)
push(7)
push(pop+pop)
push(pop+pop)
Result:=pop
Wie man sieht müssen die Operanden vor dem Operator auf dem Stapel erscheinen. Um das zu vereinfachen
kann man den Ausdruck 5*(((9+8 )*(4*6)+7) in der
umgekehrten polnischen Notation darstellen. Dann würde unser Ausdruck wie folgt aussehen:
Man kann hier sehr deutlich einen Zusammenhang zwischen der Notation und den Stapeloperationen sehen. Der Ausdruck 5*(((9+8 )*(4*6)+7) entspricht der Notation wie wir sie in der Schule gelernt haben. Diese Notation nennt man auch InFix-Notation. Die umgekehrte polnische Notation nennt man auch PostFix-Notation. Interessant ist auch das die PostFix-Notation ohne Klammern auskommt.
Deine geistige Leistung muss es jetzt sein einen Stapel zu entwicklen, einen Algorithmus schreiben, der die InFix-Notation in die PostFix-Notation umwandelt und auf den Stapel packt und berechnet.