> Top-Down-Ansatz
Das ist also die Methode, wenn man innerste Klammern zuerst berechnet und dieses Teilergebnis rekursiv zurü+ckgibt, bis man "unten", also auf äußerster Ebene angekommen ist?
Wenn ja, fände ich das auf Anhieb einfach, es so zu probieren.
> Bottom-Up-Ansatz
Und das ist meine 2. Idee, alles in ein Array zu separieren?
Hier habe ich mal mit Regulären Ausdrücken versucht, einen Teststring zu separieren.
Bis jetzt separiert er nur Zahlen und Nicht-Zahlen. Nicht-Zahlen sind also Mathematische Operatoren.
So meinst du das doch, oder?
Code: Alles auswählen
term.s="(54+77.8)-6*3+90"
Procedure.d EvaluateMathExpression(term.s)
Protected Dim subterm.s(0)
Protected exp=CreateRegularExpression(#PB_Any, "([\d.]+|\D{1})")
Protected n, anzahl=ExtractRegularExpression(exp, term, subterm())
For n=0 To anzahl-1
Debug subterm(n)
Next
FreeRegularExpression(exp)
EndProcedure
EvaluateMatheExpression(term)
Wir können ja mal versuchen, so eine Prozedur zu entwickeln. Ganz unverbindlich und wenn es uns zu schwer wird, lassen wir's.
1.
ExtractRegularExpression() speichert alle Teilstrings in einem Array und gibt die Anzahl gefundener Teilstrings zurück
2. Ab der For-Schleife dürftest du jetzt werkeln, denn ab hier ist "meine" Arbeit erledigt.
3. Noch dürfen Zahlen beliebig viele Kommas enthalten. er akzeptiert also auch Zahlen wie "77..8.4".
Was sagst du bisher dazu?