Probleme beim Taschenrechner programieren.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Probleme beim Taschenrechner programieren.

    Hallo,
    ich muss für den Unterricht einen einfachen Taschenrechner programmieren der die Grundrechenarten beherscht. Ich habe schon angefangen und der Taschenrechner rechnet auch, allerdings immer nur eine Rechenart.
    ich schreibe hier mal den Code den ich für den Gleich-Button und unter die PublicClass geschrieben habe:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zahl1 As String
    3. Dim rechenart As String
    4. Dim addieren As String
    5. Dim multiplizieren As String
    6. Dim subtrahieren As String
    7. Dim dividieren As String
    8. Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
    9. If rechenart = addieren Then
    10. TextBox1.Text = CDbl(zahl1) + CDbl(TextBox1.Text)
    11. ElseIf rechenart = subtrahieren Then
    12. TextBox1.Text = CDbl(zahl1) - CDbl(TextBox1.Text)
    13. ElseIf rechenart = multiplizieren Then
    14. TextBox1.Text = CDbl(zahl1) * CDbl(TextBox1.Text)
    15. ElseIf rechenart = dividieren Then
    16. TextBox1.Text = CDbl(zahl1) / CDbl(TextBox1.Text)
    17. End If
    18. End Sub


    Er rechnet nur was in der obersten Zeile steht also:

    VB.NET-Quellcode

    1. If rechenart = addieren ThenTextBox1.Text = CDbl(zahl1) + CDbl(TextBox1.Text) , wenn ich jetzt aber in diese Zeile -, * oder / schreibe, rechnet er nur noch diese Rechenart.

    Also im Klartext:

    VB.NET-Quellcode

    1. Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
    2. If rechenart = addieren Then
    3. TextBox1.Text = CDbl(zahl1) + CDbl(TextBox1.Text) '<-------- Das wird gerechnet!
    4. ElseIf rechenart = subtrahieren Then
    5. TextBox1.Text = CDbl(zahl1) - CDbl(TextBox1.Text)
    6. ElseIf rechenart = multiplizieren Then
    7. TextBox1.Text = CDbl(zahl1) * CDbl(TextBox1.Text) '<-------- Das wird NICHT gerechnet!
    8. ElseIf rechenart = dividieren Then
    9. TextBox1.Text = CDbl(zahl1) / CDbl(TextBox1.Text
    10. End If
    11. End Sub


    Es wäre echt nett, wenn mir jemand mit diesem Problem helfen könnte. Ich kenne mich nämlich kaum aus mit VB und mein Infomatik-Lehrer würde mir mit einem Problem NIE helfen (das ist mein ernst).

    Verschoben aus "Sonstige Problemstellungen".
    VB-Tags eingefügt.
    Die Farbe ROT ist der Moderation vorbehalten.
    Label angepasst.

    ~Thunderbolt

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

    Also einmal bitte den Code gescheit als VB.Net posten (so kann man das ja kaum lesen^^) und dann die Rückfrage... Wann weist du denn den Variablen Werte zu. Du initialisierst sie... Aber ohne Wert...

    VB.NET-Quellcode

    1. Dim zahl1 As String
    2. Dim rechenart As String
    3. Dim addieren As String
    4. Dim multiplizieren As String
    5. Dim subtrahieren As String
    6. Dim dividieren As String

    Hier steht an der Stelle überall nix drin.
    Wenn du nichts zuweist und abfragst ob rechenart = addieren ist... sind beide leer... er erkennt "jop" und ignoriert die übrigen Abfragen, da ja die erste schon richtig ist.

    edit:

    VB.NET-Quellcode

    1. Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
    2. If rechenart = addieren Then
    3. TextBox1.Text = CDbl(zahl1) + CDbl(TextBox1.Text)
    4. ElseIf rechenart = subtrahieren Then
    5. TextBox1.Text = CDbl(zahl1) - CDbl(TextBox1.Text)
    6. ElseIf rechenart = multiplizieren Then
    7. TextBox1.Text = CDbl(zahl1) * CDbl(TextBox1.Text)
    8. ElseIf rechenart = dividieren Then
    9. TextBox1.Text = CDbl(zahl1) / CDbl(TextBox1.Text)
    10. End If
    11. End Sub


    Hier vergleichst du mMn nur leer Variablen.
    Zudem geht der Code nur, weil du Option Strict Off programmierst.
    Du schreibst eine Zahl in einen Text. Das geht so nicht.

    VB.NET-Quellcode

    1. TextBox1.Text = CDbl(zahl1) + CDbl(TextBox1.Text)

    Das meine ich.
    TextBox1.Text ist wie das "Text" sagt ein "Text" und keine Zahl.
    CDbl erzeugt ein Double was wiederum eine Zahl ist.

    Du solltest dringend in den Einstellungen von Visual Studio Option Strict anschalten. Dann wird dir gesagt was du da falsch machst.

    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Also einmal bitte den Code gescheit als VB.Net posten (so kann man das ja kaum lesen^^) und dann die Rückfrage... Wann weist du denn den Variablen Werte zu. Du initialisierst sie... Aber ohne Wert...

    VB.NET-Quellcode

    1. Dim zahl1 As String
    2. Dim rechenart As String
    3. Dim addieren As String
    4. Dim multiplizieren As String
    5. Dim subtrahieren As String
    6. Dim dividieren As String

    Hier steht an der Stelle überall nix drin.
    Wenn du nichts zuweist und abfragst ob rechenart = addieren ist... sind beide leer... er erkennt "jop" und ignoriert die übrigen Abfragen, da ja die erste schon richtig ist.



    Danke für die schnelle Rückmeldung, auch wenn ich jetzt vieleicht ein bisschen doof wirke, aber was muss ich denn machen (vom Script her) ich bekomme es nämlich nicht auf die Reihe.
    Naja du musst irgendwann die Variable "Rechenart" mit einem Wert füllen.
    Beispielsweise wenn du auf den "+" Knopf drückst den Wert "Rechenart" mit "addieren" füllen.
    Und dann in deiner Abfrage ein:

    VB.NET-Quellcode

    1. If rechenart = "addieren" Then
    2. TextBox1.Text = (zahl1 + CDbl(TextBox1.Text)).ToString
    3. ElseIf rechenart = "subtrahieren" Then
    4. TextBox1.Text = (zahl1 - CDbl(TextBox1.Text)).ToString
    5. ElseIf rechenart = "multiplizieren" Then
    6. TextBox1.Text = (zahl1 * CDbl(TextBox1.Text)).ToString
    7. ElseIf rechenart = "dividieren Then"
    8. TextBox1.Text = (zahl1 / CDbl(TextBox1.Text)).ToString
    9. End If


    So in der Art. Geht aber auch schöner ;)

    EDIT:
    Natürlich musst du auch die Variable zahl1 befüllen. Sonst weiß er ja nicht womit du rechnen willst.
    Was hast du überhaupt für Controls auf der Form? KLICKST du auf die Zahlen 0-9 oder Tippt der Anwender wirklich die Zahl in die TextBox?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Moment, meinst du diesen Teil des Codes:

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    zahl1 = TextBox1.Text
    rechenart = addieren
    TextBox1.Text = ""
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    zahl1 = TextBox1.Text
    rechenart = subtrahieren
    TextBox1.Text = ""
    End Sub

    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
    zahl1 = TextBox1.Text
    rechenart = multiplizieren
    TextBox1.Text = ""
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
    zahl1 = TextBox1.Text
    rechenart = dividieren
    TextBox1.Text = ""
    End Sub
    Das meinte ich.
    PS: wenn du deinen Code markierst und dann den Knopf "VB.net" drückst... wird er gescheit dargestellt.

    Was ist denn "zahl1"? Ein String?
    Und das

    VB.NET-Quellcode

    1. rechenart = dividieren
    macht so keinen Sinn.
    Sinn würde eher machen

    VB.NET-Quellcode

    1. ​rechenart = "dividieren"


    Du solltest dir einmal die Grundlagen 5 Minute anschauen. Was ist eine Variable, welche Variablen gibt es und was mache ich damit.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    1. Ja Zahl 1 ist ein String
    2. Ok, also die Rechenart auch in Klammern schreiben.
    3. Danke für den Tipp mit dem "Code vernünftig anzeigen"

    Danke ich habs verstanden. War ja nur ne winzige kleinichkeit :).

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

    Also du solltest die Variable "Zahl" noch zu einer Zahl machen. Wie zB. ein Double.
    Sonst wird das Rechnen irgendwann zu einem Problem.
    Warum ich die Rechnung in Klammern geschrieben habe war eigentlich, damit ich das Ergebnis in einen Text umwandeln kann. Das macht man mit dem .ToString
    Denn... Ein Text ist keine Zahl. Das wird spätestens beim "Vergleichen" böse...
    Denn
    2 ist kleiner als 15
    aber
    "2" ist größer als "15"...
    Deshalb darfst du zum Rechnen NIEMALS!!!!! einen String benutzen.
    Hierfür sind die Zahlvariablen da...
    Integer, Double, Decimal usw.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @TE: Falls du noch mehr zu coden hast, gewöhn dich möglichst früh an einen sauberen Stil.
    Grundvorraussetzung hierfür sind 2 voreinstellungen, die leider bei Auslieferung von Visualstudio quasi auf "unsauber" gestellt sind:
    1. Option Strict On!
    2. Böse Funktionen vermeiden


    Was dir noch nützen wird: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    machst du eine textbox und
    machst du 5 buttons + - x / und =

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'public variablen, damit wir von überall drauf zugreifen können
    3. Public rechenart As String
    4. Public zahl1 As Double
    5. Public zahl2 As Double
    6. 'textbox soll nur zahlen, backspace und punk akzeptieren
    7. Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    8. Dim re As New System.Text.RegularExpressions.Regex("[0-9\u0008\.]")
    9. e.Handled = Not re.IsMatch(e.KeyChar)
    10. End Sub
    11. 'code für btn_plus button
    12. Private Sub btn_plus_Click(sender As Object, e As EventArgs) Handles btn_plus.Click
    13. zahl1 = Double.Parse(TextBox1.Text)
    14. rechenart = "plus"
    15. TextBox1.Text = Nothing
    16. End Sub
    17. 'code für btn_minus button
    18. Private Sub btn_minus_Click(sender As Object, e As EventArgs) Handles btn_minus.Click
    19. zahl1 = Double.Parse(TextBox1.Text)
    20. rechenart = "minus"
    21. TextBox1.Text = Nothing
    22. End Sub
    23. 'code für btn_multip button
    24. Private Sub btn_multip_Click(sender As Object, e As EventArgs) Handles btn_multip.Click
    25. zahl1 = Double.Parse(TextBox1.Text)
    26. rechenart = "multip"
    27. TextBox1.Text = Nothing
    28. End Sub
    29. [b][/b]'code für btn_divid button[b][/b]
    30. Private Sub btn_divid_Click(sender As Object, e As EventArgs) Handles btn_divid.Click
    31. zahl1 = Double.Parse(TextBox1.Text)
    32. rechenart = "divid"
    33. TextBox1.Text = Nothing
    34. End Sub
    35. 'code für btn_ergebnis button
    36. Private Sub btn_ergebnis_Click(sender As Object, e As EventArgs) Handles btn_ergebnis.Click
    37. If Not TextBox1.Text = Nothing Then
    38. Dim zahl2 = Double.Parse(TextBox1.Text)
    39. If rechenart = "plus" Then
    40. TextBox1.Text = CStr(zahl1 + zahl2)
    41. ElseIf rechenart = "minus" Then
    42. TextBox1.Text = CStr(zahl1 - zahl2)
    43. ElseIf rechenart = "multip" Then
    44. TextBox1.Text = CStr(zahl1 * zahl2)
    45. ElseIf rechenart = "divid" Then
    46. TextBox1.Text = CStr(zahl1 / zahl2)
    47. End If
    48. End If
    49. End Sub
    50. End Class


    p.s du musst bei den aneren buttons auch noch ifs reinpacken, dass wenn die textbox1 nicht leer ist, der code ausgeführt werdne soll. das wirst du alleine hinbekommen denk ich
    Hier könnte meine Signatur stehen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mox“ ()

    Soweit ein schöner Code... Aber ich glaube der TE kann damit nicht viel anfangen.
    Hier fehlen noch die absoluten Grundlagen. Und ein Code ohne jegliche Erklärung fördert hier wohl eher das C&P Prinzip und nicht das Verständnis.
    @mox Ich fände schön wenn du den Code noch so kommentieren würdest, dass der TE daraus etwas lernen kann. Sonst wird er damit wohl überfordert sein. Ohne ihm zu nahe treten zu wollen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D