Taschenrechner Visual Basic

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Taschenrechner Visual Basic

    Liebe Leute,

    ich habe als Aufgabe, einen Taschenrechner zu programmieren. Er soll die Zahlen 245 und 50 miteinander addieren, dividieren, subtrahieren und multiplizieren. Und die Aufgabe setzt voraus, dass man den dim zum String konvertiert, weil man wohl (wie ich das verstanden habe) als readline folgenden reinschreiben muss:
    245+50

    Ich bitte euch um Hilfe, weil ich mit diesem Teil der Aufgabe die grössten Schwierigkeiten habe.

    Mein Code sieht folgendermassen aus.

    Imports system.console

    Module abc
    Sub Main(ByVal Argumente() As String)
    Dim op1, op2, ergebnis As Short




    If argumente.length > 3 Then
    writeline("Zu viele Argumente")
    Exit Sub
    ElseIf argumente.length < 3 Then
    writeline("Zu wenig Argumente")
    Exit Sub
    End If

    op1 = Argumente(0)
    op2 = Argumente(2)

    Select Case argumente(1)
    Case "+"
    ergebnis = op1 + op2
    Case "-"
    ergebnis = op1 - op2
    Case "*"
    ergebnis = op1 * op2
    Case "/"
    ergebnis = op1 / op2
    Case Else
    writeline("Kein passender Operator")
    Exit Sub
    End Select
    writeline("{0} {1} {2} = {3}", op1, argumente(1), op2, ergebnis)

    Readline()
    End Sub
    End Module


    Wenn ihr gute Tipps habt, bitte ich euch um eine kleine Unterstützung.
    Danke dir für deine schnelle Antwort,

    leider muss ich mich an diese Vorgabe halten. denn so lautet nun man meine Hausaufgabe. Über die Parser haben wir noch gar nicht gesprochen, deswegen kann ich die Aufgabe nicht auf diese Art und Weise lösen.
    - .ReadLine
    - Regex
    (- Contains)

    - Cint(Ergebniss1) + Cint(Ergbeniss2)
    - Cint(Ergebniss1) * Cint(Ergbeniss2)
    - Cint(Ergebniss1) / Cint(Ergbeniss2)
    - Cint(Ergebniss1) - Cint(Ergbeniss2)
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?
    Hallo,

    vielen danke für Eure Hilfe.
    Ich habe das Programm zum Laufen gekriegt, die Frage ist ob es möglich ist, auf den split zu verzichten und den markierten Abschnitt so einzubauen, dass das Programm einwandfrei funtkioniert:

    Imports system.console

    Module Module1

    Sub Main()
    Dim eingabe As String = ""
    Dim argumente(2) As String
    Dim opt1, opt2, ergebnis As Single
    Dim oper As String


    If argumente.length > 3 Then
    writeline("Zu viele Argumente")
    Exit Sub
    ElseIf argumente.length < 3 Then
    writeline("Zu wenig Argumente")
    Exit Sub
    End If

    write("")


    eingabe = Readline()
    argumente = eingabe.split
    opt1 = argumente(0)
    opt2 = argumente(2)
    oper = argumente(1)



    Select Case oper
    Case "+"
    ergebnis = opt1 + opt2
    Write(" = " & ergebnis)
    Case "-"
    ergebnis = opt1 - opt2
    Write(" = " & ergebnis)
    Case "*"
    ergebnis = opt1 * opt2
    Write(" = " & ergebnis)
    Case "/"
    ergebnis = opt1 / opt2
    Write(" = " & ergebnis)
    Case Else
    Console.WriteLine("Falsche Eingabe! '" & oper & "' ist kein Operator!")
    End Select





    End Sub

    End Module
    Kannst Du bitte mal Deinen Code in den [ VB ]-Tag packen, damit er so aussieht:

    VB.NET-Quellcode

    1. eingabe = Readline()
    2. argumente = eingabe.split
    3. opt1 = argumente(0)
    4. opt2 = argumente(2)
    5. oper = argumente(1)
    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!

    VB.NET-Quellcode

    1. Imports system.console
    2. Module Module1
    3. Sub Main()
    4. Dim eingabe As String = ""
    5. Dim argumente(2) As String
    6. Dim opt1, opt2, ergebnis As Single
    7. Dim oper As String
    8. If argumente.length > 3 Then
    9. writeline("Zu viele Argumente")
    10. Exit Sub
    11. ElseIf argumente.length < 3 Then
    12. writeline("Zu wenig Argumente")
    13. Exit Sub
    14. End If
    15. write("")
    16. eingabe = Readline()
    17. argumente = eingabe.split
    18. opt1 = argumente(0)
    19. opt2 = argumente(2)
    20. oper = argumente(1)
    21. Select Case oper
    22. Case "+"
    23. ergebnis = opt1 + opt2
    24. Write(" = " & ergebnis)
    25. Case "-"
    26. ergebnis = opt1 - opt2
    27. Write(" = " & ergebnis)
    28. Case "*"
    29. ergebnis = opt1 * opt2
    30. Write(" = " & ergebnis)
    31. Case "/"
    32. ergebnis = opt1 / opt2
    33. Write(" = " & ergebnis)
    34. Case Else
    35. Console.WriteLine("Falsche Eingabe! '" & oper & "' ist kein Operator!")
    36. End Select
    37. End Sub
    38. End Module
    Die Zeilen 12-18 sind irgendwie sinnlos, oder?

    Zeilen 25 bis 27 gehen in die Hose, wenn der Split WENIGER als 3 Elemente liefert

    In 31 bis 46 "rechnest" du mit den Elementen, die Split ergeben hat. Das sind aber STRINGs (mit Strings kann man nicht rechnen ...) und "a * b" wird ziemlich in die Hose gehen.


    Mal ein (fehlertolerantes) Beispiel eines Mini-"Parsers":

    VB.NET-Quellcode

    1. Public Function Parse(ByVal s As String) As Tuple(Of Double, Double, String)
    2. ' remove spaces
    3. s = (From c In s Where Not Char.IsWhiteSpace(c) Select c).ToArray
    4. ' get first number -> everything until failed to convert to double
    5. Dim d1 As Double = Double.NaN
    6. Dim idx = 0
    7. For l = 1 To s.Length
    8. Dim tmp As Double
    9. If Not Double.TryParse(s.Substring(idx, l), tmp) Then
    10. idx = l - 1
    11. Exit For
    12. End If
    13. d1 = tmp
    14. Next
    15. If d1 = Double.NaN OrElse idx = s.Length Then Throw New Exception("foo")
    16. ' get operator -> next char
    17. Dim op As String = s.Substring(idx, 1)
    18. If Not "*/+-".Contains(op) OrElse idx + 1 = s.Length Then Throw New Exception("bar")
    19. ' get second number -> rest of string
    20. Dim d2 As Double
    21. If Not Double.TryParse(s.Substring(idx + 1), d2) Then Throw New Exception("foobar")
    22. Return New Tuple(Of Double, Double, String)(d1, d2, op)
    23. End Function

    RodFromGermany schrieb:

    Kannst Du bitte mal Deinen Code in den [ VB ]-Tag packen, damit er so aussieht:
    ...
    und jetzt noch aus der IDE den original-Code einpasten, damit man auch die Einrückungen sehen kann - die sind nämlich fürs Verständnis durchaus nicht unwichtig.

    Bitte VB Tags benutzen - was ist damit gemeint?