Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programmmieren eines Mathe-Parsers (https://www.delphipraxis.net/115825-programmmieren-eines-mathe-parsers.html)

Sebastian92 18. Jun 2008 15:35


Programmmieren eines Mathe-Parsers
 
liebe Programmiere,

Ich bräcuhte mal eure Hilfe. Gestern habe ich einen Eintrag gemacht, bei dem rauskam, dass ich einen Mathe-Parser programmieren muss. Jetzt habe ich ein Problem. ich habe noch nie mit Parser gearbeitet. Nun habei ch mich im Internet informiert. Allerdings bin ich aus diesen Angaben nich sdchlau geworden :gruebel: . Nun meine Frage: Wie Programmirt man einen Parser. Die definitionen habe ich mir schon angeschaut. Vielen dank für eure Hilfe,

mfg Sebastian

DeddyH 18. Jun 2008 15:51

Re: Programmmieren eines Mathe-Parsers
 
Schau mal im OpenSource-Bereich nach HAM, da kannst Du Dir bestimmt etwas abgucken oder das Ding gleich weiterentwickeln ;)

F.W. 18. Jun 2008 16:04

Re: Programmmieren eines Mathe-Parsers
 
Ich weiß nicht, wie professionell ein Parser sein muss, damit er PARSER genannt werden kann. Aber wenn es dir darum geht, dass du eine Aufgabe in Form eines Strings z.B.
Code:
5+9*3-1+(7*2)
ausrechnest, kann ich dir empfehlen mit Stringmethoden den String so zu zerlegen, dass du Zahlen rausarbeitest und schaust, welches Rechenzeichen zwischen ihnen steht.
Also als erstes die Vorrangoperatoren und dann schreibst du sie zurück in den String. Bei dem Beispiel sollte das Programm dann erstmal nach Klammern suchen und diese lösen und in den Klammern (je nachdem wieviel drin steht) fängst du dann (wie im restlichen Teil der Aufgabe, wenn die Klammern weg sind) an, nach * und / zu suchen und die umliegenden Zahlen zu isolieren bzw. so zu konvertieren (in Integer oder Double z.B.), dass du intern mit ihnen rechnen kannst. Dann löst du die Aufgabe über eine Abfrage was für ein Operator zwischen ihnen steht. Bspw. 7*2 >> if Op = '*' then 7*2 else 7/2; (da du Vorrangrechnung zuerst machst, brauchst du in diesem Fall nur * oder / überprüfen, später + und - . Die Zahlen musst du eben vorher schon mittels StrToInt/Float und Copy aus dem String kopieren. Und so machst dus nachher mit + und - und außerhalb der Klammern auch.

Später lässt sich das ja dann auch noch auf Wurzel, Quadrat usw. erweitern. Nur immer den Vorrang beachten.

Man könnte auch ein Array nehmen, welches die Zahlen speichert (also alle Zahlen raussuchen) und dann eins, welches angibt, wie mit zwei benachbarten zahlen zu rechnen ist. Da wird es aber schwierig, wenn man Klammern in der Aufgabe hat, denn dann muss man diese Arrays verschachteln...

RavenIV 18. Jun 2008 16:06

Re: Programmmieren eines Mathe-Parsers
 
Verwende mal die Suchfunktion hier im Forum.
Da gibst Du als Suchwort "Matheparser" oder "Parser" ein.
Es werden bestimmt etliche Themen dazu gefunden.

Dax 18. Jun 2008 16:25

Re: Programmmieren eines Mathe-Parsers
 
Zitat:

Zitat von DeddyH
Schau mal im OpenSource-Bereich nach HAM, da kannst Du Dir bestimmt etwas abgucken oder das Ding gleich weiterentwickeln ;)

Wow, ich werde weiterempfohlen? Welch unerwartete Ehre... :love:

DeddyH 18. Jun 2008 16:36

Re: Programmmieren eines Mathe-Parsers
 
Wenn ich den Begriff "Mathe-Parser" lese, schwenken meine Hirnwindungen eben gleich zu HAM (ich kann nichts dafür, diese Stimmen...) :mrgreen:

Dax 18. Jun 2008 16:39

Re: Programmmieren eines Mathe-Parsers
 
Oje, was hab' ich da nur angerichtet... ;)

FAlter 18. Jun 2008 17:04

Re: Programmmieren eines Mathe-Parsers
 
Hi,

erst einmal ist die Frage, was genau man unter einem Parser versteht. Genaugenommen wäre das ein Automat für einen Syntaxcheck (so hab ich es jedenfalls im Infounterricht gelernt). In der Regel ist es allerdings so, dass ein Matheparser auch gleich noch das Ergebnis berechnet, bzw. ein Rechner als Matheparser bezeichnet wird. Möchtest du also ein Programm(teil), dass einen eingegebenen Term auf Gültigkeit überprüft, oder das den Wert des Termes berechnet?

Wie ich bereits sagte, hatten wir das Thema bereits in der Schule. Noch vorher habe ich mit einem Rechner angefangen. Mein Ergebnis ist FAlterCalc. Wenn du es lieber selbst schreiben willst, bin ich natürlich auch gerne behilflich, es ist ja erst ein Jahr her, dass wie es in der Schule hatten, daher weiß ich evtl. noch ein wenig.

Mfg
FAlter

[edit] Du hast ein m zu viel. [/edit]

Macci 18. Jun 2008 17:43

Re: Programmmieren eines Mathe-Parsers
 
Zitat:

Zitat von FAlter
Hi,

erst einmal ist die Frage, was genau man unter einem Parser versteht. Genaugenommen wäre das ein Automat für einen Syntaxcheck (so hab ich es jedenfalls im Infounterricht gelernt).

Hallo,

im Allgemeinen ist es nicht möglich mit einem Automat einen Syntaxcheck durchzuführen, weil die Syntax von einem mathematischen Ausdruck nicht regulär ist. Stammt diese Behauptung von einem Info-Lehrer oder einem Mathe-Lehrer? ;-)

Corpsman 18. Jun 2008 17:44

Re: Programmmieren eines Mathe-Parsers
 
Hier gibts einen generischen Matheparser ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz