Wie kann ich mit einer For-Schleife Punkt vor Strich rechnen?
Hallo,
ich habe mir einen Taschenrechner (mit For-Schleife) erstellt.
Er kann alles, außer Punkt vor Strich. Die Funktion ist etwas schwieriger, da ich kein kein DataTable.Compute benutzen darf, sonst wäre es ja zu einfach.
Es muss durch den String selber erfolgen, also etwas komplizierter.
Hier der Code (kann leider nicht den ganzen Code eingeben, daher hier der = Code, der dafür ja auch am wichtigsten ist; ich füge den Rest einzeln hinzu!):
Dim input As String = tb.Text
Dim numbers() As String = input.Split({"+", "-", "*", "/"}, StringSplitOptions.RemoveEmptyEntries)
Dim operators() As String = Regex.Matches(input, "[-+*/]").OfType(Of Match).Select(Function(m) m.Value).ToArray()
For Each op As String In operators
If op = "*" Then
Console.WriteLine("Multiplication operator found!")
ElseIf op = "/" Then
Console.WriteLine("Division operator found!")
ElseIf op = "+" Then
Console.WriteLine("Addition operator found!")
ElseIf op = "-" Then
Console.WriteLine("Subtraction operator found!")
End If
Next
If numbers.Length < 2 OrElse operators.Length < 1 Then
Return ' Exit the method if we can't perform the calculation
End If
Dim result As Double = Double.Parse(numbers(0))
For i As Integer = 0 To operators.Length - 1
Dim op As String = operators(i)
Dim number As Double = Double.Parse(numbers(i + 1))
Select Case op
Case "+"
result += number
(das Gleiche mit -*/)
End Select
Next
tb.Text = result.ToString()
Dim containsInvalidCharacters As Boolean = False
For i As Integer = tb.Text.Length - 1 To 0 Step -1
If Not IsNumeric(tb.Text.Substring(i, 1)) And Not "+-*/".Contains(tb.Text.Substring(i, 1)) Then
containsInvalidCharacters = True
Exit For
End If
Next
' Beibehaltene For-Schleife
For index As Integer = 1 To 2
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 12
For index As Integer = 3 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 321
For index As Integer = 4 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 4321
For index As Integer = 5 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 54321
For index As Integer = 6 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 654321
For index As Integer = 7 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 7654321
For index As Integer = 8 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 87654321
For index As Integer = 9 To 1 Step -1
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 987654321
For index As Integer = 0 To 0
Debug.Write(index.ToString & "")
Next
Debug.WriteLine("") 'Output: 0
End Sub
Danke schon einmal!
1 Antwort
Zerlegt hast du ja alles (hab jetzt nicht genau kontrolliert ob korrekt)
Anstatt aber jetzt von links nach rechts die Berechnung zu machen, must su jetzt - wie du es in Mathe gelernt hast - erst die Punktrechnungen machen (* und /)
Und dann die Strichrechnungen berechnen
Schreib dir am besten eine Beispiel Aufgabe auf ein Blatt
Berechnen Schritt für Schritt (am besten je Zeile mal nur eine Berechnung)
Und überdenken dann wie du das per Software genauso machen kannst
Private Sub bsolve_Click(sender As Object, e As EventArgs) Handles bsolve.Click
Dim input As String = tb.Text
' Replace comma with dot for proper numeric parsing
input = input.Replace(",", ".")
' Perform calculations for multiplication and division
Dim mulDivRegex As New Regex("\d+(\.\d+)?\s*[*/]\s*\d+(\.\d+)?")
While mulDivRegex.IsMatch(input)
input = mulDivRegex.Replace(input, Function(match)
Dim parts() As String = match.Value.Split({"*", "/"}, StringSplitOptions.TrimEntries)
Dim leftVal As Double = Double.Parse(parts(0))
Dim rightVal As Double = Double.Parse(parts(1))
Dim result As Double
If match.Value.Contains("*") Then
result = leftVal * rightVal
Else
result = leftVal / rightVal
End If
Return result.ToString()
End Function)
End While
' Perform calculations for addition and subtraction
Dim addSubRegex As New Regex("\d+(\.\d+)?\s*[+\-]\s*\d+(\.\d+)?")
While addSubRegex.IsMatch(input)
input = addSubRegex.Replace(input, Function(match)
Dim parts() As String = match.Value.Split({"+", "-"}, StringSplitOptions.TrimEntries)
Dim leftVal As Double = Double.Parse(parts(0))
Dim rightVal As Double = Double.Parse(parts(1))
Dim result As Double
If match.Value.Contains("+") Then
result = leftVal + rightVal
Else
result = leftVal - rightVal
End If
Return result.ToString()
End Function)
End While
' Set the final result in the TextBox
tb.Text = input
End Sub