Entwickler-Ecke
Open Source Units - Einfacher MatheParser
Jerk - Mo 18.08.08 18:47
Titel: Einfacher MatheParser
Ich habe einen einfachen Matheparser geschrieben der bisjetzt die Grundrechenarten beherrscht und auch Klammern berücksichtigt.
Als Input kann man einen String wie z.b. 2(5/(10*(2+2)-5)^0,5) senden und erhällt dann ein hoffentlich richtiges Ergebnis.
Warum ich diesen hier hochlade?
Es geht mir primär darum von euch zu hören was ich noch besser machen kann. Ich habe mir Delphi eigentlich zu 90% selber bei gebracht und habe deswegen noch nicht den richtigen Durchblick. Genau das erhoffe ich aber hiermit etwas zu verbessern. Deshalb bin ich total offen :p für Kritik und höre gerne wie man es richtig realisieren würde :)
Weiter Geplant sind das Rechnen mit Variablen ( Gleichungen Lösen ) sowie andere Rechenoperatoren ( Sin,Cos,e uvm)
Bekannte Probleme:
- Keine wirkliche Fehlerabfrage
- Derzeit wird die Aufgabe 5*5^5 so gerechnet: (5*5)^5 statt 5*(5^5), ich suche noch nach der besten Lösung, ich habe zwar eine die gefällt mir aber nicht.
edit*
Kleine Änderung hochgeladen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function TMathParser.Parse(Input: string) : String; var i : integer; begin ... sLine := StringReplace(sLine,'*(','*(0+',[rfReplaceAll]); for i := 0 to 9 do sLine := StringReplace(sLine,inttostr(i)+'(',inttostr(i)+'*(0+',[rfReplaceAll]); ... end; |
Moderiert von Narses: Topic aus Freeware Projekte verschoben am Mo 18.08.2008 um 19:20
huuuuuh - Mo 18.08.08 18:56
was macht das unter freeware?
btw. werds mir mal ansehen...
Jerk - Mo 18.08.08 18:57
Argh wollte es bei Open Source Units posten -.- Bitte moven.
edit : Danke
Th69 - Di 19.08.08 13:10
Zitat: |
Deshalb bin ich total offen :p für Kritik und höre gerne wie man es richtig realisieren würde
|
Wie du schon selber erkannt hast, hat dein String-Parser einige gravierende Schwächen.
Professionell arbeitet man meistens mit einem Top-Down-Parser, welche anhand einer EBNF-Definition erstellt wird (d.h jeder Teil-Ausdruck entspricht einer Funktion, welche sich rekursiv aufrufen können).
Ich habe schon vor ca. 12 Jahren in Pascal so einen Parser erstellt, weiß aber nicht mehr ob ich die Sourcen noch wiederfinde.
Auf meiner Homepage gibt es den Source-Code für einen Mathe-Parser in C++ (evtl. kann der dir dann weiterhelfen):
http://www.bitel.net/dghm1164/downloads/FctParser-Sources.zip
Jerk - Di 19.08.08 17:10
Vielen dank dafür, ich wollte sowieso Studiumsvorbereitent mit C++ anfangen!
Delete - Di 19.08.08 18:14
Lustig dein Mathe-perser.Sieht ganz schick aus allerdings solltest du so schnell wie möglich
seine schon bekannten Schwächen kurieren. :P Sonst ist er nicht konkurenfähig. :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!