作者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