作者fumizuki (小狮子)
看板Visual_Basic
标题Re: [VB6 ] 计算机
时间Fri Jun 10 19:57:16 2005
※ 引述《TrueFeeling (昨日之死)》之铭言:
: 不好意思,再问程式码部分
: ※ 引述《fumizuki (小狮子)》之铭言:
: : 哇哈!这种运算式真不好写...好不容易才试了出来...
: : 用递回法写的,写了一长串,看起来颇复杂的...~.~
: : Private Sub Command1_Click(Index As Integer)
: : Text1.Text = Text1.Text & Index
: : End Sub
: : Private Sub Command2_Click(Index As Integer)
: : Text1.Text = Text1.Text & Command2(Index).Caption
: : End Sub
: : Private Sub Command3_Click()
: : Label1.Caption = Eval(Text1.Text)
: : End Sub
: : Function Eval(s As String)
: 方程式名:Eval ?
对的
: 方程式参数s设为字串?
限制只能传入字串
: : Dim p As Integer, op1 As String, op2 As String, o As String
: : Static c As Integer: c = c + 1
: : If c = 1 Then s = Replace(s, " ", "")
: 请问上面这段,c的作用是?
: : p = InStr(s, "+")
: : If p > 0 Then GoSub SplitProc: Eval = Eval(op1) + Eval(op2): GoTo EndProc
: 我猜的意思是:
: If p > 0 -->如果有+号的话,然後执行SplitProc,不过後面就不知道为什麽
分成两部份,再相加,传回,然後离开。
: : If s Like "-*" Then p = 2 Else p = 1
: 我猜的意思是:
: 如果字串s里面是-号後面是一串字元的话,然後後面还是看不懂
p 是 InStr 的第一个参数,指定要从第几个字元开始寻找 "-",可省略这个参数不写。
: : p = InStr(p, s, "-")
: : If p > 0 Then
: 如果有减号的话,然後
下面这串程式码在刚才的范例我没有说明的很清楚...
这是用来分辨正负号用的
在运算式中可能出现四种运算式(a+-b),(a--b),(a*-b),(a/-b)
这四种运算式的共通特性都是有「负号」
当「-」前方也是运算子的时候,则「-」为负号,否则就是减法运算。
: : op1 = Mid(s, p - 1, 1)
: op1=字串中,减号的前一个字元
: : If op1 = "+" Then
负号前是「+」
: 这边看不懂,为什麽op1刚刚代表减号,现在为什麽代表加号
: : p = p - 1: GoSub SplitProc: Eval = Eval(op1) + Eval(op2): GoTo EndProc
: p = p-1 ==>看不懂,後面也看不懂
: : ElseIf op1 = "-" Then
负号前是「-」
: : p = p - 1: GoSub SplitProc: Eval = Eval(op1) - Eval(op2): GoTo EndProc
: : ElseIf op1 = "*" Then
负号前是「*」
: : p = p - 1: GoSub SplitProc: Eval = Eval(op1) * Eval(op2): GoTo EndProc
: : ElseIf op1 = "/" Then
负号前是「/」
: : p = p - 1: GoSub SplitProc: Eval = Eval(op1) / Eval(op2): GoTo EndProc
因为先前 p 是负号的位置,但我 SplitProc 要求的是 加减乘除 四个运算子的位置,
所以要再减去 1...
: : Else
: : GoSub SplitProc: Eval = Eval(op1) + Eval("-" & op2): GoTo EndProc
: : End If
: : End If
: : p = InStr(s, "*")
: : If p > 0 Then GoSub SplitProc: Eval = Eval(op1) * Eval(op2): GoTo EndProc
: 如果字串中有*号,.....
: : p = InStr(s, "/")
: : If p > 0 Then GoSub SplitProc: Eval = Eval(op1) / Eval(op2): GoTo EndProc
: 如果字串中有/号....
: : Eval = Val(s)
: 这里传回的模式也看不懂
哪里不懂?
Val() 是将 字串型态 转换成 数值型态,得到的数值为 Double 型态的数值。
如果来源 s 不是个数字的话,就会传回零。
所以 Eval = Val(s) 作用就是把 s 转换成 Double 型态,再传回。
: : EndProc:
: : c = c - 1: Exit Function
: c = c - 1的作用是?
: : SplitProc:
: : op1 = Left(s, p - 1): op2 = Mid(s, p + 1): Return
: 将字串拆成2份(以p的位置为分界点)
: 第1份是p的左边
: 第2份是p的右边
: : End Function
--
VB 程式设计 仓木麻衣 PTT 星爷板 行列输入法
======================================================
Visual_Basic MaiKuraki Stephen Array
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.58.156.43