Terme lösen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

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
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

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?
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

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
Zuletzt geändert von akhof am Samstag 28. Januar 2012, 22:15, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

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)").
Zuletzt geändert von webspider am Samstag 28. Januar 2012, 22:28, insgesamt 1-mal geändert.
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Guck Dir doch mal sympy an - vielleicht gibt es da einen solchen Vereinfacher :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Terme vereinfachen sollte mit SymPy gehen.
Edit: Hyperion war wohl schneller. ;)
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

nomnom hat geschrieben:Terme vereinfachen sollte mit SymPy gehen.
Edit: Hyperion war wohl schneller. ;)

Danke! :D
Antworten