56 lines
1.1 KiB
Text
56 lines
1.1 KiB
Text
Function RPN(expr As String) As String
|
|
|
|
Dim tokenArray() As String
|
|
Dim stack() As String
|
|
|
|
Dim Wert1 As Double
|
|
Dim Wert2 As Double
|
|
|
|
|
|
|
|
'Initialize array (removed later)
|
|
ReDim tokenArray(1)
|
|
ReDim stack(1)
|
|
|
|
|
|
tokenArray = Split(expr, " ")
|
|
|
|
Dim i As integer
|
|
i = 0
|
|
|
|
While i <= tokenArray.Ubound
|
|
|
|
|
|
If tokenArray(i) = "+" Then
|
|
Wert2 = Val(stack.pop)
|
|
Wert1 = Val(stack.pop)
|
|
stack.Append(Str(Wert1+Wert2))
|
|
ElseIf tokenArray(i) = "-" Then
|
|
Wert2 = Val(stack.pop)
|
|
Wert1 = Val(stack.pop)
|
|
stack.Append(Str(Wert1-Wert2))
|
|
ElseIf tokenArray(i) = "*" Then
|
|
Wert2 = Val(stack.pop)
|
|
Wert1 = Val(stack.pop)
|
|
stack.Append(Str(Wert1*Wert2))
|
|
ElseIf tokenArray(i) = "/" Then
|
|
Wert2 = Val(stack.pop)
|
|
Wert1 = Val(stack.pop)
|
|
stack.Append(Str(Wert1/Wert2))
|
|
ElseIf tokenArray(i) = "^" Then
|
|
Wert2 = Val(stack.pop)
|
|
Wert1 = Val(stack.pop)
|
|
stack.Append(Str(pow(Wert1,Wert2)))
|
|
Else
|
|
stack.Append(tokenArray(i))
|
|
End If
|
|
|
|
|
|
i = i +1
|
|
|
|
Wend
|
|
|
|
|
|
Return stack(2)
|
|
|
|
End Function
|