Taschenrechner programmieren

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Machiavelli.

    @RodFromGermany)

    Ich wollte keine Ausseinandersetzung zwischen uns verursachen. Das ist und war nie meine Absicht. Ich hatte den Code angesehen, nur den letzten Teil wieder vergessen, da ich am nächsten Tag geantwortet habe ohne den Code nochmals anzusehen. (siehe Beiträge von 3. und 4. Oktober).

    Zu Deinem Code, ich habe recherchiert was DirectCast() heisst und verstehe es auch jetzt. Danke!

    @~blaze~)

    Warum schlampig? Ich verstehe nicht so ganz, warum es schlampig sein soll, wenn es einwandfrei funktioniert? Danke!

    @nafets3646)

    Das wurde mir schon einmal gesagt & werde ich, nachdem ich dieses gelöst habe, einbauen.
    Dass etwas funktioniert heißt nicht, dass es sauber ist. Eine Architektur zu schaffen heißt häufig, dass man in verschiedenen Schichten denkt. Beispielsweise gibt es eben die grafische Oberfläche, auf der Steuerelemente angeordnet sind und die Daten darstellt - aber eben nur darstellt, es ist nicht Teil der Daten. Darunter liegt eben die Datenschicht, es gibt eine Verknüpfung zwischen Daten und der grafischen Oberfläche, die dazu dient, die grafische Oberfläche an die Daten anzupassen, bzw. die Daten durch die Benutzeraktionen.
    Die Trennung dieser Schichten erfordert eben die Verarbeitung, wie oben beschrieben. Der Text ist nicht Bestandteil der Daten, sondern der Oberfläche, die nur zur Darstellung genutzt wird, nicht aber als Datum selbst.
    Die Denkweise in Schichten erleichtert dir spätere Programme unheimlich. Wenn man die grafische Oberfläche nur zur direkten Datengewinnung und Benutzeraktionen, etc. benutzt, reduziert man den Aufwand für ein Programm häufig unheimlich.

    Gruß
    ~blaze~

    Machiavelli schrieb:

    und verstehe es auch jetzt
    Klick mit der Maus drauf und drück F1 (= Hilfe), da öffnet sich die MSDN und Dir wird geholfen.
    Wenn Du da ein wenig rumklickst, findest Du auch massig einfache Beispiele mit ausführlicher Erklärung.
    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!
    Ich komme grade nicht weiter. Ich bin so weit, dass die erste Klammerrechnung in einem Term herausgefiltert wird. Sind da mehrere Klammern funktioniert das ganze schon nicht.

    VB.NET-Quellcode

    1. Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button9.Click, Button8.Click, Button7.Click, Button6.Click, Button5.Click, Button4.Click, Button3.Click, Button2.Click, Button19.Click, Button18.Click, Button16.Click, Button15.Click, Button14.Click, Button13.Click, Button11.Click, Button10.ClickDim btn As Button = DirectCast(sender, Button)
    2. txtAnzeige.Text &= btn.Text
    3. End Sub
    4.  Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
    5. Try
    6. txtAnzeige.Text = txtAnzeige.Text.Substring(0, txtAnzeige.Text.Length - 1)
    7. Catch ex As Exception
    8. txtAnzeige.Text = ""
    9. End Try
    10. End Sub
    11.  Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click
    12. Dim Klammern As String 'Inhalt der Klammern
    13. Dim KlammernZeichen(100) As String
    14. Klammern = txtAnzeige.Text.Substring(txtAnzeige.Text.IndexOf("(") + 1, txtAnzeige.Text.IndexOf(")") - txtAnzeige.Text.IndexOf("(") - 1) 'f(x) = 5*(6-3) => g(x) = 6-3For i = 0 To Klammern.Length - 1
    15. KlammernZeichen(i) = Klammern.Chars(i)
    16. Label5.Text &= KlammernZeichen(i)Next i
    17. End Sub
    18. End Class


    Ich versuche die ganze Zeit eine Lösung zu finden. Gibt es Lesestoff , wie man am Besten mathematische Formeln aufteilt/parst?
    Das ist nunmal die Vorgehensweise, die man normalerweise verwendet, mir ist nichts einfacheres bekannt.
    Das Prinzip dahinter ist hier auch ganz gut erklärt (auch wenn ich selbst nicht nach diesem Tutorial vorgegangen bin):
    [VB 2010] FormelParser und ExpressionTree
    Schau dir mal den Code von BiedermannS an, der ist ziemlich kurz und daher warscheinlich auch einfacher zum reinkommen: kürzesten Java (oder VB, C#) Code zum Rechnen mit (+; -; *; /) *ohne* RegEx o. ä.
    Ist so wie ich das sehe das gleiche Grundprinzig, allerdings ist es deutlich kürzer gefasst. Klammern und ähnliches fehlen zwar, allerdings kann man das ja auch noch implementieren. Wenn du das Ding dann verstanden hast, wirst du warscheinlich auch Artentus seinen Code verstehen :).
    Dieser Code ist nur so kurz, weil es wirklich nur um +, - * und / geht. Mein Parser kann aber auch Klammern und Funktion (Sin, Cos, usw.), und dadurch wird es enorm schwieriger, weil man eben alle Tokens erst unter Berücksichtigung der Klammern (auch Funktionsklammern) sortieren muss. Mein Parser kann auch leicht um neue Operatoren und Funktionen erweitert werden, man muss nur einen entsprechenden Delegaten hinzufügen.
    @Artentus
    Deiner ist natürlich besser, allerdings findet man sich in dem anderen schneller zurecht und wenn man die Funktionsweise von dem kapiert hat, ist es auch einfacher, bei deinem durchzublicken.