VBcoders Guest



Don't have an account yet? Register
 


Forgot Password?



Arithmetical expressions.

by Feoktistov Grigory Vicktorovich (2 Submissions)
Category: Math/Dates
Compatability: VB 6.0
Difficulty: Unknown Difficulty
Originally Published: Fri 2nd January 2004
Date Added: Mon 8th February 2021
Rating: (1 Votes)

Arithmetical expressions.

Rate Arithmetical expressions.



MsgBox Val("(7 * 5 - 3 + (25 / 5))") ' = 0
MsgBox Skobochki("(7 * 5 - 3 + (25 / 5)) ^ 2") ' = 1369
End Sub
Property Get Skobochki(Text As String) As Double
Dim LongStart As Integer, LongCurrent As Integer, LongMemory As Integer, LongCurrent2 As Integer
LongCurrent = 1
Do While LongCurrent2 < Len(Text) + 1
LongCurrent2 = LongCurrent2 + 1
If LongCurrent2 = Len(Text) + 1 Then
Skobochki = Text
Exit Property
End If
If IsNumeric(Mid(Text, LongCurrent2, 1)) = False Then Exit Do
Loop
LongCurrent = 1
LongStart = 1
Do While LongCurrent < Len(Text) + 1
Do While Mid(Text, LongCurrent, 1) <> ")"
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else Exit Do
If Mid(Text, LongCurrent, 1) = "(" Then LongStart = LongCurrent + 1
Loop
If LongStart < 2 Then LongMemory = 2 Else LongMemory = LongStart
Text = Mid(Text, 1, LongMemory - 2) & Value(Mid(Text, LongStart, LongCurrent - LongStart)) & Mid(Text, LongCurrent + 1, Len(Text))
Do While Mid(Text, LongCurrent, 1) <> "("
If LongCurrent > 1 Then LongCurrent = LongCurrent - 1 Else Exit Do
Loop
If Mid(Text, LongCurrent, 1) = "(" Then LongCurrent = LongCurrent + 1
LongCurrent2 = 0
Do While LongCurrent2 < Len(Text) + 1
LongCurrent2 = LongCurrent2 + 1
If LongCurrent2 = Len(Text) + 1 Then
Skobochki = Text
Exit Property
End If
If IsNumeric(Mid(Text, LongCurrent2, 1)) = False Then Exit Do
Loop
LongStart = LongCurrent
Loop
End Property
Property Get Value(Text As String) As Double
Dim LongCurrent As Integer, LongMemory As Integer, LongCurrent2 As Integer, Number As String
LongCurrent = 1
LongMemory = 1
Do While LongCurrent < Len(Text) + 1
Do While Mid(Text, LongCurrent, 1) <> "^"
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else GoTo Two
Loop
LongCurrent = LongCurrent - 2
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent > 1 Then LongCurrent = LongCurrent - 1 Else Exit Do
Loop
If LongCurrent > 1 Then Number = Mid(Text, LongCurrent + 1, LongMemory - LongCurrent) Else Number = Mid(Text, 1, LongMemory)
LongCurrent2 = LongCurrent
If LongCurrent = 1 Then LongCurrent2 = 0
LongCurrent = LongMemory + 4
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else Exit Do
Loop
If IsNumeric(Number) = True And IsNumeric(Mid(Text, LongMemory, LongCurrent - LongMemory)) = True Then
Text = Mid(Text, 1, LongCurrent2) & Trim(Str(Val(Number) ^ Val(Mid(Text, LongMemory, LongCurrent - LongMemory)))) & Mid(Text, LongCurrent, Len(Text))
End If
If LongCurrent2 = 0 Then LongCurrent = 1 Else LongCurrent = LongCurrent2
Loop
Two:
LongCurrent = 1
LongMemory = 1
Dim Znak As String
Do While LongCurrent < Len(Text) + 1
Do While Mid(Text, LongCurrent, 1) <> "*" And Mid(Text, LongCurrent, 1) <> "/"
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else GoTo Three
Loop
Znak = Mid(Text, LongCurrent, 1)
LongCurrent = LongCurrent - 2
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent > 1 Then LongCurrent = LongCurrent - 1 Else Exit Do
Loop
If LongCurrent > 1 Then Number = Mid(Text, LongCurrent + 1, LongMemory - LongCurrent) Else Number = Mid(Text, 1, LongMemory)
LongCurrent2 = LongCurrent
If LongCurrent = 1 Then LongCurrent2 = 0
LongCurrent = LongMemory + 4
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else Exit Do
Loop
If IsNumeric(Number) = True And IsNumeric(Mid(Text, LongMemory, LongCurrent - LongMemory)) = True Then
If Znak = "/" Then Text = Mid(Text, 1, LongCurrent2) & Trim(Str(Val(Number) / Val(Mid(Text, LongMemory, LongCurrent - LongMemory)))) & Mid(Text, LongCurrent, Len(Text))
If Znak = "*" Then Text = Mid(Text, 1, LongCurrent2) & Trim(Str(Val(Number) * Val(Mid(Text, LongMemory, LongCurrent - LongMemory)))) & Mid(Text, LongCurrent, Len(Text))
End If
If LongCurrent2 = 0 Then LongCurrent = 1 Else LongCurrent = LongCurrent2
Loop
Three:
LongCurrent = 1
LongMemory = 1
Do While LongCurrent < Len(Text) + 1
Do While Mid(Text, LongCurrent, 1) <> "-" And Mid(Text, LongCurrent, 1) <> "+"
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else GoTo Final
Loop
Znak = Mid(Text, LongCurrent, 1)
LongCurrent = LongCurrent - 2
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent > 1 Then LongCurrent = LongCurrent - 1 Else Exit Do
Loop
If LongCurrent > 1 Then Number = Mid(Text, LongCurrent + 1, LongMemory - LongCurrent) Else Number = Mid(Text, 1, LongMemory)
LongCurrent2 = LongCurrent
If LongCurrent = 1 Then LongCurrent2 = 0
LongCurrent = LongMemory + 4
LongMemory = LongCurrent
Do While Mid(Text, LongCurrent, 1) <> " "
If LongCurrent < Len(Text) + 1 Then LongCurrent = LongCurrent + 1 Else Exit Do
Loop
If IsNumeric(Number) = True And IsNumeric(Mid(Text, LongMemory, LongCurrent - LongMemory)) = True Then
If Znak = "-" Then Text = Mid(Text, 1, LongCurrent2) & Trim(Str(Val(Number) - Val(Mid(Text, LongMemory, LongCurrent - LongMemory)))) & Mid(Text, LongCurrent, Len(Text))
If Znak = "+" Then Text = Mid(Text, 1, LongCurrent2) & Trim(Str(Val(Number) + Val(Mid(Text, LongMemory, LongCurrent - LongMemory)))) & Mid(Text, LongCurrent, Len(Text))
End If
If LongCurrent2 = 0 Then LongCurrent = 1 Else LongCurrent = LongCurrent2
Loop
Final:
Value = Val(Text)
End Property



Download this snippet    Add to My Saved Code

Arithmetical expressions. Comments

No comments have been posted about Arithmetical expressions.. Why not be the first to post a comment about Arithmetical expressions..

Post your comment

Subject:
Message:
0/1000 characters