Math. Funktion aus String

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Math. Funktion aus String

    Hallo @ all

    Ich habe eine Richtextbox in der folgender Text steht:

    5x^13 + 7x^2 + 4x - 9

    Anstatt dem ^ ist durch SelectionCharOffset die Zahl dahinter hochgestellt. Nun möchte ich das ganze in die EInzelteile zerlegen, also die Basisin eine Variable, das x soll wegfallen und der Exponnent soll in eine eigenständige Variable. Wie würdet ihr das ganze am besten umsetzen?

    Bin für jede Hilfe dankbar. Viele Grüße
    Croasider
    War doch gestern schon mal da.
    Bau Dir einen Formelparser.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    sorry - ist das dein ernst?
    Croasider kommt scheint mir schon mit der ZeichenFormatierung inner Richtextbox nicht ganz klar, und du empfiehlst ihm für sein anneres Problem einen Ansatz, über den man ohne mindest. einige Kenntnisse in Compilerbau lieber nichtmal nachdenken sollte?
    Jdfs. soweit ich weiß, braucht man für einen Formelparser einen Parser, einen Tokenizer, und einen Interpreter. Und um das mit den Operator-Vorrängen und Klammer-Ebenen in den Griff zu kriegen, hatte ich einstmals was gebastelt, das hat die Eingabe zunächst mal in die umgekehrt polnische Notation umgewandelt, und dann die Tokens von einem Stack abgearbeitet.
    k.A., ob man das heute noch so machen würde.

    Aber ich verweise auch nochmal auf mein Tip von gestern

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hi
    Schau halt, wie die Formattierung in der RichTextBox aussieht. Dazu kann dir übrigens auch der RTF helfen.

    Für eine Interpretation der Formel braucht man das doch gar nicht... Man arbeitet sich durch einen String durch und übergibt Klassen, die z.B. die Sinus-Funktion unter dem Key "sin" beinhalten die zu berechnende interne Funktion. Anschließend lässt man die Werte für x usw. übergeben und berechnet die so auseinandergenommene Funktion. Schön einfach.

    Gruß
    ~blaze~
    Tja, kannsein ich stellmirdas zu kompliziert vor. Aber die ForumSuche fördert nix direktes zuTage, also keiner hats geschafft, einer hat explizit aufgegeben, und es gibt einen Link auf Codeproject.
    Alles Hinweise darauf, dasses nicht einfach ist.
    Das Codeproject-Teil sieht tatsächlich einfach aus, aber bei
    (1-2*3)*2
    schmeisster Fehler, und meint, ich solle die Syntax checken.
    Bau dir einen Parser: geh dazu Zeichen für Zeichen durch, merk dir die Ziffern (Array oä) und wenn ein "^" oder "+/-" kommt, behandelst du die zuletzt gemerkten Ziffern als Basis bzw Exponent.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    @ErfinderDesRades: Geschafft hats neben Agent mindestens einer, aber der gibt seinen Code nicht einfach so her.
    @Agent: Er braucht ja den rich text dafür, da das ^ mit einem Offset angegeben wird.
    @Topic: Schau dir einfach mal das Rich Text Format an. Dieses wird dir per RTF bereitgestellt. Da kannst du dann "einfach" den Code interpretieren. Zu RTF findest du massig auf bing o.Ä.

    Gruß
    ~blaze~