Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Term (Zeichenfolge 1+2*3) in Fließkommazahl

  Alt 16. Sep 2009, 14:44
jupp, um einen Parser kommst du da nicht drumrum

Zitat:
Daher ist ein Parser/Formelinterpreter viel zu komplex für einen "Anfänger". Grundwissen der OOP sind dafür wohl vorausgesetzt, wenn man die Aufgabe denn "sauber" lösen möchte...
wenn man es nicht all zu Komplex macht unsd sich nur ein einfache Operaionen wie * / + und - beschränkt und keine klammern zuläßt, dann wäre es recht leicht/einfach möglich

z.B.
erstmal alles in seine einzelteile zerlegen und in ein Array damit
Code:
1
+
2
*
3
und dann nach den gängigen mathematischen Regeln nacheinander versuchen dieses aufzuösen

hier z.B. zuerst * und dann +

also erstmal ein "*" suchen, wo davor und danach eine Zahl vorkommt
dieses nun ausrechnen und ersetzen
Code:
1
+
6
nun das Gleiche mit dem "+"

praktisch immer zuerst * und / versuchen aufzulösen,
dann + und -
und zuletzt + mit nur einer Zahl dahinter


immer von vorne nach hinten entsprechende Gruppen (Zahl-Operator-Zahl) suchen
und wenn etwas gefunden wurde, dieses ausrechnen und ersetzen, dann erneut von vorne ganz vorner im Array anfangen das nächste zu finden
und das solange, bis nichts mehr zum Auflösen gefunden wurde

* String in Array zerlegen > je Zahlen und Operatoren pro Eintrag
* wiederhole:
* nach "zahl*zahl" suchen
* - dieses ausrechnen und ersetzen und weiter bei "wiederhole"
* nach "zahl/zahl" suchen
* - dieses ausrechnen und ersetzen und weiter bei "wiederhole"
* nach "zahl+zahl" suchen
* - dieses ausrechnen und ersetzen und weiter bei "wiederhole"
* nach "zahl-zahl" suchen
* - dieses ausrechnen und ersetzen und weiter bei "wiederhole"
* nach "+zahl" suchen
* - dieses zusammensetzen und ersetzen und weiter bei "wiederhole"
* nach "-zahl" suchen
* - dieses zusammensetzen und ersetzen und weiter bei "wiederhole"
* Array wieder zum Strng zusammensetzen und ausgeben
* - also einfach alles aneinanderhängen

mit viel Glück ist dann am Ende nur noch ein Eintrag mit einer Zahl übrig
und wenn nicht, dann paßte etwas in der "Formel" nicht ganz

[edit]
jupp, statt dem Array macht sich wohl eine StringListe hier icht schlecht, da man dort leichter Einträge entfernen kann.
[/edit]

PS: http://www.delphipraxis.net/internal...t.php?t=159592
siehe Demo5 und Demo6
auch wenn es dir wohl nnicht viel Helfen wird, aber immerhin ist der QuellCode ja offen und vielleicht findet du in dem Parser ja ein/zwei Anregungen.

macht mein Parser nicht viel anders - nur daß ich da noch Klammern, Funktionen und Anderes mit drin hab ... nja und halt mit anderen Zahlenstrukturen rechne
$2B or not $2B
  Mit Zitat antworten Zitat