欢迎光临:
非常感谢您光临枕善居。本站是一个免费的基于VB,VB.NET源代码交流的平台,为大家提供优质的专业的源代码,如果您有需要,本站可以帮助在业余时间里给您寻找代码。当然,如果您有好的代码也可以在本站发布,共享给大家。
专业VB和.NET源码、编程开发教程、图标资源、USB电脑遥控器、智能家电控制开关....更多东东请进入我的淘宝小店--->
VB及.NET新源码2011(3DVD,控件+资源)
智能多路控制(串口编程开关) 带源码!
09-04
07
堆栈计算器
作者:枕善居主 / 查看次数: 4979 / 评论: 2
复制内容到剪贴板
程序代码
程序代码'堆栈计算器,支持+ - * / ^ 和 三角函数 以及对数的运算,扩展也很方便。感谢作者发布!
'作者:wssccc
'QQ:151884336
Dim OV[color=#0000ff](500)
Dim OP(500)
Dim Adv(500)
Dim Ops, Ovs, K As Integer
Dim isEmpty As Boolean
Function Process(Formula As String)
ClearAll
Formula = Formula & ";"
Dim P, str, o
P = 1
Do While (P < Len(Formula))
If IsNumeric(Mid$(Formula, P, 1)) Then
str = ""
Do While ((IsNumeric(Mid$(Formula, P, 1))) or Mid$(Formula, P, 1) = ".") And (P < Len(Formula))
str = str & Mid$(Formula, P, 1)
P = P + 1
Loop
PushNum str
Else
str = ""
Do While GetAdv(str) = -1 And (P < Len(Formula))
str = str & Mid$(Formula, P, 1)
P = P + 1
Loop
Do
If GetAdv(str) > Adv(Ops) or isEmpty = True Then
If GetAdv(str) <> 1000 Then PushOP str
Exit Do
Else
Calc
End If
Loop
End If
Loop
Do While isEmpty = False
Calc
Loop
Process = PopNum
ClearAll
End Function
Sub PushNum(Num)
Ovs = Ovs + 1
OV(Ovs) = Num
End Sub
Function PopNum() As Double
PopNum = OV(Ovs)
Ovs = Ovs - 1
End Function
Sub PushOP(Oper)
Ops = Ops + 1
OP(Ops) = Oper
Adv(Ops) = GetAdv(Oper)
isEmpty = False
End Sub
Function PopOP()
PopOP = OP(Ops)
Ops = Ops - 1
If Ops <= 0 Then
isEmpty = True
Else
isEmpty = False
End If
End Function
Function GetAdv(str) As Integer
Select Case str
Case ";"
GetAdv = 0 + K
Case "+"
GetAdv = 1 + K
Case "-"
GetAdv = 1 + K
Case "*"
GetAdv = 2 + K
Case "/"
GetAdv = 2 + K
Case "sin"
GetAdv = 3 + K
Case "cos"
GetAdv = 3 + K
Case "tan"
GetAdv = 3 + K
Case "log"
GetAdv = 3 + K
Case "^"
GetAdv = 3 + K
Case "("
GetAdv = 1000
K = K + 10
Case ")"
GetAdv = 1000
K = K - 10
Case Else
GetAdv = -1
End Select
End Function
Sub Calc()
Dim o
o = PopOP
Select Case o
Case "+"
PushNum (PopNum + PopNum)
Case "-"
PushNum (0 - PopNum + PopNum)
Case "*"
PushNum (PopNum * PopNum)
Case "/"
PushNum (1 / PopNum * PopNum)
Case "sin"
PushNum Sin(PopNum)
Case "cos"
PushNum Cos(PopNum)
Case "tan"
PushNum Tan(PopNum)
Case "log"
PushNum Log(PopNum)
Case "^"
Dim a, b
a = PopNum
b = PopNum
PushNum (b ^ a)
End Select
End Sub
Sub ClearAll()
'Dim OV(500)
'Dim OP(500)
'Dim Adv(500)
'Dim Ops, Ovs, K As Integer
'Dim isEmpty As Boolean
'
Dim i
For i = 0 To 500
OV(i) = 0
OP(i) = 0
Adv(i) = 0
Next
Ops = 0
Ovs = 0
K = 0
isEmpty = True
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim P, cP
cP = Text1.SelStart + 1
If KeyAscii = 13 Then
Do While cP < Len(Text1.Text)
If Asc(Mid(Text1.Text, cP, 1)) = 13 Then Exit Do
cP = cP + 1
Loop
P = cP - 1
Do While P > 0
If Asc(Mid(Text1.Text, P, 1)) = 10 Then Exit Do
P = P - 1
Loop
Text1.Text = Text1.Text & vbCrLf & Process(Mid(Text1.Text, P + 1, cP - P))
Text1.SelStart = Len(Text1.Text)
End If
End Sub
.
发表评论
您没有权限发表评论!
上一篇
下一篇
相关日志:
文章来自:
Tags:
评论: 2 |
回复
]
