Autor Beitrag
Jerk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Mo 18.08.08 18:47 
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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function TMathParser.Parse(Input: string) : String;
var i : integer;
begin
...
 // Preparation for PlusMinus for brackets
 sLine := StringReplace(sLine,'*(','*(0+',[rfReplaceAll]);
 for i := 0 to 9 do
  sLine := StringReplace(sLine,inttostr(i)+'(',inttostr(i)+'*(0+',[rfReplaceAll]);
...
end;



Moderiert von user profile iconNarses: Topic aus Freeware Projekte verschoben am Mo 18.08.2008 um 19:20
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Jerk am Mo 18.08.08 22:36, insgesamt 1-mal bearbeitet
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mo 18.08.08 18:56 
was macht das unter freeware?
btw. werds mir mal ansehen...
Jerk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Mo 18.08.08 18:57 
Argh wollte es bei Open Source Units posten -.- Bitte moven.


edit : Danke
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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):
www.bitel.net/dghm11...ctParser-Sources.zip
Jerk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Di 19.08.08 17:10 
Vielen dank dafür, ich wollte sowieso Studiumsvorbereitent mit C++ anfangen!
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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: