Punkt vor Strichrechnung realisieren
-
Hallo,
für ein Projekt soll ich mit Hilfe des C-Builders von Boreland einen Taschenrechner programmieren, der bei allen Rechenoperationen, die Punkt vor Strich-Regel beachtet.
Bisher habe ich den Taschenrechner jediglich so programmiert, dass man jeweils nur Zwei zahlen miteinander verrechnen kann. Die erste Zahl wird hierfür immer in einer Hilfsvariablen zwischengespeichert.
Wie kann ich nun realisieren dass:
1. mehrere Zahlen z.B. (5+4+6+3=?) zu verrechnen sind.
2. bei den Rechenoperationen die Punkt vor Strich-Regel verwendet wird
(z.B. 5+3*6=90!)Vielen Dank im Vorraus
Tobi
-
Tobi15 schrieb:
5+3*6=90!
Villeicht solltest du die Regel lieber erstmal selber lernen... Und wenn steht das Ausrufezeichen immer noch für die Fakultät.
-
ja sorry danke für den Hinweis!
5+3*6 ist natürlich 23!
-
Mit boost.spirit bekommt das praktisch geschenkt (siehe Mitte der Seite 'Full Grammar Example').
Gruß
Werner
-
@ Werner Salomon
dabei handelt es sich aber, wenn ich das richtig verstanden habe um eine eigene Klasse, mit passender Include-Datei. Ich darf in meinem Projekt aber nur Borland C-Builder Hilfmittel verwenden.
Tobi15
-
na dann wirst du wohl oder übel nicht drum rumkommen, dir einige logische regeln zu überlegen, nach denen du rechnest
und ein paar zwischenspeicher, wo du verschiedene stati deines rechenparsers ablegst und setzt bzw ausliest und aufgrund derer entscheidungen fällst...
ein denkansatz wäre:
eingabetext einmal durchgehen, wenn man auf ein * oder / stößt, z.b. <leftNumber>*<rightNumber>, wird dies gerechnet und ein neuer text erzeugt, der weiter analysiert wird.
ebenso kannst du ja weiter machen, einen zweiten durchgang für die strichrechnung, und sobald du auf ein <leftNumber>+<rightNumber> oder <leftNumber>-<rightNumber> stößt, rechnen und weiterparsen.gibt sicher hundert elegantere möglichkeiten... überleg dir was...
-
Was man natürlich nicht vergessen sollte sind die Klammern, also das heisst zuerst nach Klammern suchen dann erst nach den *,% Zeichen und +,-
Weil wenn du es so programmierst hast du nachher keine Probleme mit Potenzen etc.
mfg
-
besteh einfach drauf, dass prefix statt infix notation verwendet werden muss
also (+ (* 3 5) 5) statt 3 * 5 + 5
dann lässt sich das sehr leicht über nen stack realisieren