qqwice
Goto Top

Taschenrechner mit unendlich Klammerebenen in VB 08

Hallo,
Ich hab jetzt mit Visual Basic 2008 angefangen und versuche jetzt seit einiger Zeit einen Taschenrechner zu Programmieren der Punkt vor Strich Rechnung beherrscht und auf jeden Fall unendlich viele Klammerebenen.
Was ich bisher rausgefunden habe ist das man das Verfahren der umgekehrten polnischen Notation (upn) anwenden muss.
siehe: http://www.bullhost.de/u/umgekehrte-polnische-notation.html
Dabei ist zu beachten dass man Stacks verwendet, da diese anders als Arrays bei den jeder Wert über ein Index abgerufen werden kann, wird bei einem Stack immer nur der oberste Wert angegeben.
Meine Frage an euch wäre ob mir jemand mit einem Structogram helfen könnte oder was auch gut wäre einen Lösungsansatz eventuell mit Quellcode ausschnitt.

Ich bedanke mich schon mal im voraus und hoffe das ihr mir weiterhelfen könnt.

Content-Key: 119805

Url: https://administrator.de/contentid/119805

Printed on: April 18, 2024 at 05:04 o'clock

Member: jhinrichs
jhinrichs Jul 06, 2009 at 10:35:53 (UTC)
Goto Top
Warum muss es UPN sein? Aber das Schreiben eines Parsers für UPN ist natürlich deutlich einfacher, als für die übliche Notation, das ist schon richtig.
Der Ablsufplan für einen UPN-Rechner ist eigentlich ganz einfach: (habe gerade keinen grafischen Editor zur Hand, daher in Textform)
Ist Eingabe eine Zahl/Speicherabruf?
Wenn ja: => auf den Stack
Wenn nein:
  ist Eingabe eine Operation mit einem Operanden?
  Wenn ja: => Oberstes Strackelement holen, Operation anwenden, Ergebnis auf den Stack
  Wenn nein:
    ist Eingabe eine Operation mit zwei Operanden? 
    Wenn ja: => die beiden oberen Elemente holen, Operation anwenden, Ergebnis auf den Stack
...etc
Member: miniversum
miniversum Jul 06, 2009 at 11:04:00 (UTC)
Goto Top
Hier mal noch ne ganz grobe Beschreibung wie es gehen kann:
Es gibt eine funktion zum berechnen.
In dieser Funktion werden 2 Zahlen mit einander verrechnet.
kommt ein klammerausdruck wird der ausdruck in der klammer rekursiv von der berechenfunktion an die berechenfunktion weitergegeben.
Du musst also imemr die Klammern finden, und nach Möglichkeit von innennach außen arbeiten.
Hast du das Ergebnis einer Klammer wird in dem Textstring der Klammerausdruck durch das Ergebnis ersetzt.
Also z.B. so:
"2*(1+3)"
"(2*(1+3))" -> berechne Klammer -> "1+3" = "4"
Ersetze Klammerausdruck
"(2*4)" -> berechne Klammer -> "2*4" = "8"
"8' -> Kine Klammer mehr vorhanden -> Ergebniss gefunden