Taschenrechner

Lowl3v3l

Aktives Mitglied
devCommunity-Experte
Wie ich dir schon privat schrieb solltest du dringend damit beginnen, mal die Warnungen zu beheben(vor allem den Haufen implizite Konversionen des Typs, die können deine Ergebnisse verfälschen).

Folgendes gilt, wenn der Rechner ALLE validen arithmetischen Gleichungen lösen können soll. Wenn du es limitierst(z.B. keine verschachtelten Klammern, keine negativen Zahlen,...) wird das signifikant leichter.

Generell bist du da auch einen naiven Ansatz gegangen und triffst da auf die Limitierungen deines Ansatzes, jemandem mit mehr Ahnung von C++ würde ich vmtl. empfehlen, das einfach mit Boost.Spirit zu machen und nen richtigen Interpreter zu stricken, besonders wenn auch Fälle wie verschachtelte Klammern und Punkt-vor-Strich funktionieren sollen. Man kann sowas sicher auch manuell in einen AST(Abstract Syntax Tree) überführen und dann auswerten, aber Spaß wird das sicherlich keinen machen(und ein Stack ist für einen AST nicht besonders gut geeignet), weil einfach Zeichen für Zeichen behandeln nicht geht, wenn nach den Zeichen etwas kommen kann, das ihre Bedeutung oder Priorität ändert(und es auch Zeichen gibt, + und -, die sowohl als unärer als auch als binärer Operator vorkommen können!). Und ich warne dich auch gleich, dass so ein Rechner nicht exakt arbeiten wird, (weil der ja nicht mal eben kürzen kann, bisweilen etwas komisch rundet und infinite Brüche nur approximiert).

Mehrere Zahlen kannst du generell handlen, indem du beim Iterieren die Ziffern cached, bis das Stringende, eine Klammer, ein Leerzeichen oder ein Operatorzeichen kommt und dann den String benutzt.

Ein einfacherer Einstieg(der trotzdem alles berechnen kann!) wäre es vielleicht, auf "Weglassen von Malzeichen", "Punkt- vor Strich" und Infix-Operatoren zu verzichten, und stattdessen mit Polnischer- oder Umgekehrter Polnischer Notation zu beginnen für so nen Taschenrechner(https://de.wikipedia.org/wiki/Polnische_Notation).


MfG

P.S. Welche Warning-flags, die du beheben kannst, sich so anbieten findest du (neben einigen weiteren fürs debuggen hilfreichen Infos und Tricks) hier: https://dev-community.de/resources/deuglyfying-c-c-teil-2-schöner-kompilieren.36/
 
Zuletzt bearbeitet:
Oben Unten