Mathematische Funktionseingabe



  • Folgendes Problem:
    Gibt es eine Möglichkeit, eine mathematische Funktion, bsp. f(x)=x+2, einzugeben oder muss ich das für Wert für Wert einzeln machen und in Variablen speichern?
    Das ganze soll mit absolut JEDER Funktion funktionieren, d.h. ln(), e^x, x^2 und alle anderen möglichen Exponenten, Wurzelfunktionen, etc.

    Gibt es eine Möglichkeit, die Gleichung als String einzugeben und umzuwandeln oder wie mache ich das am Besten? 😕



  • Klar geht das. Du liest den Term ein, parst ihn und wandelst ihn zb. in einen Syntaxbaum um. Ich weiß jetzt nicht was du mit 'umwandeln' meinst bzw wohin du das genau umwandeln möchtest.



  • Kannst du vllt ein kleines bsp machen? Ganz versteh ich das nicht mit Syntaxbaum unso...

    Ich weiß jetzt nicht was du mit 'umwandeln' meinst bzw wohin du das genau umwandeln möchtest.

    Ich war mir nicht bewusst, dass man eine String in eine Funktion mittels Parsen o.Ä. 'umwandeln' kann, habe auch leider keine Vorstellungen wie das funktionieren könnte..



  • Für sowas gibt es fertige Bibliotheken, die man (unter Berücksichtigung der Lizenzbedingungen) in eigene Programme einbinden kann, z.B.

    GNU-libmatheval



  • TocToc schrieb:

    Ich war mir nicht bewusst, dass man eine String in eine Funktion mittels Parsen o.Ä. 'umwandeln' kann, habe auch leider keine Vorstellungen wie das funktionieren könnte..

    z.B. so: https://de.wikipedia.org/wiki/Shunting-yard-Algorithmus 😉



  • Holy shit ist das kompliziert. Alles klar, werde mich da mal reinarbeiten. 🙂
    Wenns klappt. Tzdm vielen Dank. 😃 :S

    EDIT: Vom Sinn her ist es sehr einfach das zu verstehen. Ich hab aber wirklich NULL Plan wie man das programmiert. Ist der Stack ein malloc() oder wie ist das z.B. gemeint..? 😞



  • TocToc schrieb:

    Holy shit ist das kompliziert. Alles klar, werde mich da mal reinarbeiten. 🙂
    Wenns klappt. Tzdm vielen Dank. 😃 :S

    EDIT: Vom Sinn her ist es sehr einfach das zu verstehen. Ich hab aber wirklich NULL Plan wie man das programmiert. Ist der Stack ein malloc() oder wie ist das z.B. gemeint..? 😞

    Ein Stack ist erstmal ein Stapelspeicher, Stichworte LIFO und FIFO.
    Gekennzeichnet durch nen Zeiger, wo was draufkommt oder weggenommen wird.
    Wenn Du "irgendwas" ablegen magst, bietet sich ein Pointer auf "irgendwas" an, vorzugsweise ein pointer auf eine union of structs. Damit kann man allerhand Unfug anstellen, aber es ist eigentlich ein guter Weg, ein Gefühl dafür zu kriegen.
    Na, und spätestens, wenn Du eine Union ablegen magst und Stackspeicher dafür brauchst, kommt malloc() ins Spiel. 😉



  • Wie definiere ich denn einen Stack?
    Und in welcher Bibliothek stehen denn push() und pop()?
    Und gibt es dafür noch andere Commands? 😕



  • Eine einfache (und sicherlich noch zu verbessernde) Implementation gibt es z.B. unter Stack Implementation in C

    Wofür benötigst du denn den Funktionsparser?
    Und muß es denn unbedingt C sein, denn für C++ oder C# könnte ich dir ein paar weitere fertige Implementationen empfehlen...



  • Nur kann ich nicht ansatzweise C++ oder C# :DD


Log in to reply