Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#32

Re: Taschenrechner Programmieren

  Alt 18. Apr 2004, 13:24
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:
5*(((9+8)*(4*6)+7)
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:
Code:
598+46**7+*
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat