fabian.wagner hat geschrieben:Die Methode bekommt ein MathElement übergeben, was den Beginn einer SimpleExpression repräsentiert. Dies ist entweder eine Klammer oder der erste Operand, der Simple Expression. Danach wertet die Funktion beginnend mit diesem MathElement nach und nach erst die Punktrechnungen und dann die Strichrechnungen aus. Später kommt dann noch eine Swap-Operation dazu, die höhere Priorität als Punktrechnungen hat. Natürlich darf die Funktion dann nur soweit auswerten bis eine schließende Klammer kommt oder bis der Ausdruck nur noch ein Atom ist.
Wie man dies begrenzt sollte man sich vorher überlegen. Es ist sinnvoll mit einer weiteren MathList zu arbeiten. Dann fallen auch weitere Probleme weg. KISS! (Keep it stupid simple!

)
Danach werden entsprechende Pointerersetzungen durchgeführt. Das heißt, falls die Simple Expression mit einer Klammer begonnen hat, fällt diese und ihr Gegenpart natürlich in der gesamt Expression weg!
Das wars!
Ich habe noch eine Verständnisfrage hierzu, da ich jetzt langsam verwirrt bin:
Ich habe, so wie du beschrieben hast,
evaluateSimpleExpression selbst die Klammern entfernen lassen: Wenn das übergebene IListItem auf eine Klammer zeigt, dann wird der Inhalt dieses IListItem durch den evaluierten Ausdruck (der über eine neue Liste berechnet wird, welche dann immer "atom" ist) ersetzt und der Pointer für next auf das Element, das hinter der schließenden Klammer liegt, gesetzt. So kann die Funktion sich selbst der Klammern entledigen.
Jetzt stoße ich aber beim weiteren Lesen auf eine Unklarheit, die ich gerne geklärt hätte:
Step 5: findAnInnermostExpression() ! searches for an innermost expression of the entire expression and returns
a pointer (MathElement) to the element before the first element of this innermost expression. Otherwise you can
not replace the innermost expression with an atom!
Hint: An innermost expression is a simple expression!
...und weiter unten bei den Hints...
If a closing parenthesis is found you know a begin of the
innermost expression (the element after the last opening parenthesis) and an end of an innermost expression
(the element before the closing parentheses). Trivial case is an expression without any parentheses!
Damit habe ich schon 3 Aussagen, die sich widersprechen, oder? Wieso soll ich laut erstem Quote ein Element zuvor anhalten, wenn ich der Funktion
evaluateSimpleExpression eh die Klammer übergebe? Und laut zweitem Quote soll ich nicht die Klammer übergeben, sondern das Element danach? Wozu soll dann
evaluateSimpleExpression auch eventuell ein auf eine öffnende Klammer zeigendes Element bekommen können?
Irgendwie widersprechen sich diese 2 Aussagen selbst und mit der von dir weiter oben.
Bitte um Klärung
