Seite 1 von 1

Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:01
von akhof
Hallo!
Ich bin gerade dabei ein Programm zu schreiben, was Terme lösen soll.
Ich habe im Internet folgendes gefunden: http://www.delphipraxis.net/116233-%5Bp ... -exec.html.
Terme wie "10*10" klappen ja ganz gut, leider soll das Programm auch Terme wie "2a**2" lösen können, was ja leider nicht funktioniert :(
Im Internet habe ich leider nichts nützliches dazu gefunden :K

Kann mir jemand von Euch einen Tipp geben, wie das funktionieren könnte??

Mit freundlichen Grüßen
akhof

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:09
von webspider
Zauber doch mal schnell einen Parser für das Auswerten von Ausdrücken unter Berücksichtigung von Variablen her, das wird besser sein als Funktionen wie exec() oder eval() abzusichern. Aber vielleicht bist du ja nicht am Absichern interessiert :K

edit: "Terme lösen" klingt leicht verwirrend oder willst du tatsächlich Gleichungen lösen?

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:12
von akhof
Danke ersteinmal für die schnelle Hilfe!
webspider hat geschrieben:Zauber doch mal schnell einen Parser für das Auswerten von Ausdrücken unter Berücksichtigung von Variablen her, das wird besser sein als Funktionen wie exec() oder eval() abzusichern. Aber vielleicht bist du ja nicht am Absichern interessiert :K
was genau willst Du mir damit sagen??
webspider hat geschrieben: edit: "Terme lösen" klingt leicht verwirrend oder willst du tatsächlich Gleichungen lösen?
ich würde gerne soetwas machen wie:

Code: Alles auswählen

eingabe = input("Eingabe: ")
ergebnis = XXX(eingabe)
print(ergebnis)
wie z.B.:
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"

akhof

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:14
von derdon
Schreibe deinen eigenen Parser mit einer lib deiner Wahl (siehe z.B. http://wiki.python.org/moin/LanguageParsing). Achte dabei vor allem auf die Rangfolgen "Punkt vor Strich", potenzieren und Klammern setzen. Außerdem noch, dass + und - nicht nur Infix- sondern auch Prefix-Operatoren sein können und dann nur einen Operanden haben.

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:20
von webspider
akhof hat geschrieben:ich würde gerne soetwas machen wie:

Code: Alles auswählen

eingabe = input("Eingabe: ")
ergebnis = XXX(eingabe)
print(ergebnis)
wie z.B.:
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
Warte, was? Das hat doch nichts mit Lösen zu tun. Du willst Terme vereinfachen.

Das bietet z.B. SymPy an (Zitat deren Seite: "basic simplification (like a*b*b + 2*b*a*b -> 3*a*b^2)").

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:26
von akhof
webspider hat geschrieben:
akhof hat geschrieben:ich würde gerne soetwas machen wie:

Code: Alles auswählen

eingabe = input("Eingabe: ")
ergebnis = XXX(eingabe)
print(ergebnis)
wie z.B.:
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
Warte, was? Das hat doch nichts mit Lösen zu tun. Du willst Terme vereinfachen.
tut mir leid, da habe ich mich wohl falsch ausgedrückt :oops:
Du hast recht! die terme sollen vereinfacht werden

akhof

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:27
von Hyperion
Guck Dir doch mal sympy an - vielleicht gibt es da einen solchen Vereinfacher :-)

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:29
von nomnom
Terme vereinfachen sollte mit SymPy gehen.
Edit: Hyperion war wohl schneller. ;)

Re: Terme lösen

Verfasst: Samstag 28. Januar 2012, 22:35
von akhof
nomnom hat geschrieben:Terme vereinfachen sollte mit SymPy gehen.
Edit: Hyperion war wohl schneller. ;)

Danke! :D