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

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!
