Mathe Formeln ausrechnen aus TextBox

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Programmator.

    Mathe Formeln ausrechnen aus TextBox

    Hallo,

    Ich habe ein kleines Problem. wie kann ich eine Aufgabe einer
    Textbox ausrechnen?
    Also z.b. so sieht der inhalt der Textbox aus:

    Quellcode

    1. z + ((x + y) * 5)

    Wobei ich folgendes dekliniert habe:

    VB.NET-Quellcode

    1. Dim x As Integer = "13"
    2. Dim z As Integer = "10"
    3. Dim y As Integer = "123"
    4. Dim zwischenrechnung As String = Nothing
    5. Dim zwischenrechnung As Integer = Nothing
    6. Dim ergebnis As Integer = Nohting

    Nun will ich das "x","z" & "y" mit den Integer-Zahel x y & z ersetzen.
    Das mache ich so:

    VB.NET-Quellcode

    1. zwischenrechnung = TextBox1.Text
    2. zwischenrechung.Replace("x", x)
    3. zwischenrechung.Replace("y", y)
    4. zwischenrechung.Replace("z", z)
    5. zwischenrechnung2 = zwischenrechnung 'String muss nun Integer sein damit das auch richtig rechnet


    Wie rechne ich das nun so aus?
    Wenn ich die Formel sofort in den Code einfüge geht das, aber wie ich das aus
    der Textbox mache weiss ich nicht.

    PS: Die Formlen können natürlich auch anders aussehen.

    EDIT// In "ergebnis" soll das ergebnis der rechnung drinn stehen^^
    Schau dir das hier mal an:

    de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation

    Du müsstest zuerst einen Algorithmus verwenden, der deinen Term in die umgekehrte polnische Notation umwandelt und anschließend dann abarbeitet. Ein guter Algorithmus der das für dich übernimmt ist z.B. dieser hier. ;) Auf der Wikipedia gibt es bereits eine Pseudo-Code Implementierung, die du einfach nach VB übersetzen müsstest.



    MfG
    Und da ist schon wieder das Phänomen, das andauernd in diesem Forum auftritt. Quadsoft, meinst du wirklich der Threadersteller lernt auch nur in irgendeiner Weise etwas aus seinem Programm, wenn er die Arbeit von deiner Library machen lässt? Ich bin nicht der Meinung, dass das Rad jedes Mal neu erfunden werden muss, aber man sollte es zumindest einmal neu erfinden, um zu verstehen, wie das Rad funktioniert.

    Mir ist schon öfter aufgefallen, dass die meisten User sich hier ihre Programme aus Copy & Paste Code zusammenstellen und selbst garnicht wissen, wie denn alles hinter den Kulissen funktioniert. Klar, komplexe Bibliotheken kann man natürlich als Anfänger nicht eben mal nachbauen, aber man sollte sich zumindest vorher mit der Theorie befassen. ;)

    MfG
    Hallo, erstmal Danke für die vielen Antworten.
    Leider bin ich erst in der 7 (bald 8) Klasse, wir hatten
    noch nicht sowas wie Algorithmus oder so.
    Daher weiss ich auch noch nicht was das ist & wie ich es verwende.
    Ich habe den text von Krissel095 gelesen und auch wohl
    bisschen verstanden.

    d.h. ich muss das nun splitten und dan prüfen ob zahl oder funktion?

    @Quadsoft
    Nein, ich will meinen eigenen Code ! Und ich will nicht unnötige namennennung für DLL's
    die man auch selbst machen kann mit hilfe vom Forum!
    @Krissel095

    Er kann's natürlich auch selbst programmieren. Jeder wie es will. Meine Lib war ja nur ein Vorschlag. Das Verwenden der MS Script Control liefert aber ebenfalls dasselbe Resultat. Der TE hat gefragt, was er tun kann, und ich habe ihm nur eine von vielen Möglichkeiten gezeigt. Wenn er es lernen will, dann programmiert er es selbst ( geht auch OHNE UPN), wenn nicht kann er (m)eine Library nehmen. Hast du etwa auch einfach so mal einen Prozessor gebaut nur um zu sehen, wie das funktioniert? Unsere Gesellschaft basiert einfach darauf, dass man schon fertige Bauteile nimmt, sie zu einem neuen Ganzen zusammenfügt!


    EDIT:

    @Programmator

    Nicht jeder ist in der 7 Klasse in der Lage einen funktionierenden Formelparser zu erstellen... Außerdem ist meine Lib doch ziemlich aufwändig, also nix das man hin ner halben stunde hinschmeißen könnte.

    Programmator schrieb:

    Somein ich das ja nicht, aber was mir an deinen Lib's nicht gefällt, die namensnennung und website verlinkung.


    äh wenn du willst kannst auch so verwenden. ich erlaube es dir hiermit. wäre aber schön wenn wenigstens der name dort stünde.

    Quadsoft schrieb:

    Hast du etwa auch einfach so mal einen Prozessor gebaut nur um zu sehen, wie das funktioniert?


    Nein, das sicherlich nicht, da mir dazu definitiv das physikalische Know-How fehlt, bzw. die Maschinerie um einen Prozessor herzustellen. Da würde ich wiederum den Punkt einbringen, dass es gewisse Ebenen gibt, die es zu verstehen gibt. So muss ich beispielsweise auch für einen Funktionsinterpreter nicht wissen, wie der IL Code letztendlich interpretiert wird, da sich darum die Ebene unter mir kümmert.

    Genausowenig muss ich wissen, wie ein Prozessor physikalisch die Befehle verarbeitet und wie die Bits dargestellt werden, oder wie z.B. der Prozessor meine Register verwaltet, in denen ich Daten ablegen kann. Das liegt schlicht und ergreifend daran, dass man an der "Ebene" nichts ändern kann, genauso wenig wie ich die Interpretation des IL-Codes irgendwie beeinflussen könnte. Einen Funktionsinterpreter kann ich nach meinem Belieben gestalten und sollte daher auch in theoretischer Hinsicht verstehen, wie er funktioniert.

    Nicht jeder ist in der 7 Klasse in der Lage einen funktionierenden Formelparser zu erstellen...


    Da täuscht du dich. Es ist vllt. etwas härter, als mit wesentlich besseren Mathematikkentnissen aus höheren Klassenstufen, ich habe aber damals auch in C++ schon mit vllt. 11 Jahren ein ähnliches Projekt aufgezogen und das komplett ohne Objektorientierung. ;) Machbar ist also alles.

    MfG

    Programmator schrieb:

    VB.NET-Quellcode

    1. Dim x As Integer = "13"
    Fang bitte an und gib Deinem Programm Option Strict On.
    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!
    Hey,

    weil "13" ein String (eine Zeichenkette, wie "Hund" oder "Auto") ist, x laut deiner Codeanweisung aber ein Integer (eine Zahl ohne Kommastellen) sein soll; es gilt aber String <> Integer. Schau mal hier: openbook.galileocomputing.de/v…Rxxmsvb010009256Variablen oder auch einmal hier: microsoft.com/germany/msdn/web…ibrary.aspx?id=1032314569

    Die "Option Strict On" Anweisung verhindert solch unsinnigen Code, wie es bei dir oben derzeit noch der Fall ist.

    Gruß, Manschula

    Krissel095 schrieb:

    Quadsoft, meinst du wirklich der Threadersteller lernt auch nur in irgendeiner Weise etwas aus seinem Programm, wenn er die Arbeit von deiner Library machen lässt?
    Ich weiß nicht, wie Quadsoft darüber denkt, aber ich denke: zu erlernen, wie man eine zugeholte Dll ins Prog einbindet und benutzt, ist überaus nützliches Grundlagenwissen.
    Dll-Handling gelernt zu haben mag am Ende noch der beste Gewinn für den TE sein, weil einen brauchbaren MatheParser zu schreiben ist a) ziemlich anspruchsvoll, b) ziemlich unnütz.

    Programmator schrieb:

    Wieso?

    Mit dieser Antwort bist Du bei mir mit Deinem Namen leider durchgefallen :thumbdown: und ich muss Dich auf das Erlernen von Grundlagen verweisen.
    Hättest Du mal im Forum gesucht und
    hättest ein paar Beispiele nachprogrammiert und verstanden,
    hättest Du diesen Kapitalfehler nicht gemacht.
    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!

    Programmator schrieb:

    Wenn ich schnell was machen will kommen öfters mal fehler xDDD
    und dann kommst Du mit weniger qualifizierten Fragen an das Forum. :wacko:
    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!