Algorithmus



  • Hallo ihr Progger,

    also ich versuche zur Zeit einen Funktionsplotter zu schreiben. Bis jetzt klappst ganz gut aber nun komme ich zu einer schweren Stelle. Ich möchte das der User eine Funktion wie z. B. x3+2*x2-x-1 oder sin(x)/(2*x-3) usw eingeben kann und das Programm dann die Funktion zeichnet.

    Das zeichnen funktioniert bei festverdrahteten Funktionen schon. Jetzt stellt sich die Frage wie man einen String mit der entsprechenden Funktion auseinander fummeln und ausrechnen kann.

    Mir sind zwei möglichkeiten eingefallen:

    1. Vielleicht ein rekursiver Algorithmus. Aufgebaut wie ein Binärer Baum. Ist aber glaube ich sehr schwer.

    2. Vielleicht ist es möglich den String einfach in eine neue Klasse in einer Datei zu schreiben und von meinem Programm aus kompilieren zu lassen. Dann müsste sich die Syntax natürlich an Java halten aber das könnte man ja prüfen. Geht sowas?

    Gruss Stefan





  • Hi,

    für dein Problem gibt es mehrere Lösungsansätze. Einer wäre es, in dem du zuerst die Infix-Notation deines arithmetischen Ausdrucks in die Postfix-Notation transformierst (Dazu findest du zahlreiche Links im Web, z.B.
    http://sulfur.vancouver.wsu.edu/~cs223/CptS223_InfixToPostfix.htm oder
    http://www.cs.utexas.edu/users/lavender/courses/ee360c/lectures/lecture-24.pdf ).
    Ein Beispiel:
    Infix:
    A + B * C
    Postfix:
    A B C * +
    Danach kannst du den Postfix-String mit Hilfe eines Stacks parsen. Wenn du auf einen Operanden stößt (z.B. "a"), pusht du ihn auf den Operanden-Stack. Wenn du dagegen auf einen Operator (z.B. AND) triffst, popst du die passende Anzahl Operanden vom Stack (AND ist ein binärer Operator, also 2. Beim NOT wäre es z.B. nur 1 Operand), führst die entsprechende Operation aus und pusht das Ergebnis wieder auf den Stack. Das machst du so lange, bis du den gesamten String geparst hast. Danach steht das Ergebnis auf dem Stack.

    flo


Anmelden zum Antworten