Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
|
|
@ -0,0 +1,86 @@
|
|||
Global stack$
|
||||
|
||||
Function RPN(expr$)
|
||||
Debug.Print "Expression:"
|
||||
Debug.Print expr$
|
||||
Debug.Print "Input", "Operation", "Stack after"
|
||||
|
||||
stack$ = ""
|
||||
token$ = "#"
|
||||
i = 1
|
||||
token$ = Split(expr$)(i - 1) 'split is base 0
|
||||
token2$ = " " + token$ + " "
|
||||
|
||||
Do
|
||||
Debug.Print "Token "; i; ": "; token$,
|
||||
'operation
|
||||
If InStr("+-*/^", token$) <> 0 Then
|
||||
Debug.Print "operate",
|
||||
op2$ = pop$()
|
||||
op1$ = pop$()
|
||||
If op1$ = "" Then
|
||||
Debug.Print "Error: stack empty for "; i; "-th token: "; token$
|
||||
End
|
||||
End If
|
||||
|
||||
op1 = Val(op1$)
|
||||
op2 = Val(op2$)
|
||||
|
||||
Select Case token$
|
||||
Case "+"
|
||||
res = CDbl(op1) + CDbl(op2)
|
||||
Case "-"
|
||||
res = CDbl(op1) - CDbl(op2)
|
||||
Case "*"
|
||||
res = CDbl(op1) * CDbl(op2)
|
||||
Case "/"
|
||||
res = CDbl(op1) / CDbl(op2)
|
||||
Case "^"
|
||||
res = CDbl(op1) ^ CDbl(op2)
|
||||
End Select
|
||||
|
||||
Call push2(str$(res))
|
||||
'default:number
|
||||
Else
|
||||
Debug.Print "push",
|
||||
Call push2(token$)
|
||||
End If
|
||||
Debug.Print "Stack: "; reverse$(stack$)
|
||||
i = i + 1
|
||||
If i > Len(Join(Split(expr, " "), "")) Then
|
||||
token$ = ""
|
||||
Else
|
||||
token$ = Split(expr$)(i - 1) 'base 0
|
||||
token2$ = " " + token$ + " "
|
||||
End If
|
||||
Loop Until token$ = ""
|
||||
|
||||
Debug.Print
|
||||
Debug.Print "Result:"; pop$()
|
||||
'extra$ = pop$()
|
||||
If stack <> "" Then
|
||||
Debug.Print "Error: extra things on a stack: "; stack$
|
||||
End If
|
||||
End
|
||||
End Function
|
||||
|
||||
'---------------------------------------
|
||||
Function reverse$(s$)
|
||||
reverse$ = ""
|
||||
token$ = "#"
|
||||
While token$ <> ""
|
||||
i = i + 1
|
||||
token$ = Split(s$, "|")(i - 1) 'split is base 0
|
||||
reverse$ = token$ & " " & reverse$
|
||||
Wend
|
||||
End Function
|
||||
'---------------------------------------
|
||||
Sub push2(s$)
|
||||
stack$ = s$ + "|" + stack$ 'stack
|
||||
End Sub
|
||||
|
||||
Function pop$()
|
||||
'it does return empty on empty stack
|
||||
pop$ = Split(stack$, "|")(0)
|
||||
stack$ = Mid$(stack$, InStr(stack$, "|") + 1)
|
||||
End Function
|
||||
Loading…
Add table
Add a link
Reference in a new issue