Einzelnen Beitrag anzeigen

Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#3

Re: Programmmieren eines Mathe-Parsers

  Alt 18. Jun 2008, 16:04
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...
  Mit Zitat antworten Zitat