作者TrueFeeling (昨日之死)
看板Visual_Basic
標題Re: [VB6 ] 計算機
時間Sat Jun 11 17:38:32 2005
※ 引述《fumizuki (小獅子)》之銘言:
: ※ 引述《TrueFeeling (昨日之死)》之銘言:
: 正確程式碼是這樣...
: Public Function Eval(s As String)
: 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, " ", "")
: p = InStr(s, "+")
: If p > 0 Then GoSub SplitProc: Eval = Eval(op1) + Eval(op2): GoTo EndProc
: If s Like "-*" Then p = 2 Else p = 1
: p = InStr(p, s, "-")
: If p > 0 Then
: op1 = Mid(s, p - 1, 1)
: If 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
: ElseIf op1 = "/" Then
: p = p - 1: GoSub SplitProc: Eval = Eval(op1) / Eval(op2): GoTo EndProc
: ElseIf op1 = "^" Then
Then後面沒寫任何東西也可以喔@@?!!
那如果程式跑到這裡的話,接下它會怎麼跑?
: 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
: p = InStr(s, "^")
: If p > 0 Then GoSub SplitProc: Eval = Eval(op1) ^ Eval(op2): GoTo EndProc
: Eval = Val(s)
: EndProc:
: c = c - 1: Exit Function
: SplitProc:
: op1 = Left(s, p - 1): op2 = Mid(s, p + 1): Return
: End Function
: 為什麼
: ElseIf op1 = "^" Then
: p = p - 1: GoSub SplitProc: Eval = Eval(op1) / Eval(op2): GoTo EndProc
^^^
↑
這是打錯嗎?
(應該是^號吧)
: 會錯誤,我算了一下,
: 是因為 ^ 的優先等級的問題...
: 因為 ^ 這個運算子的優先等級比 * 、 / 還要高
: 所以優先順序應該是 ^ / * - +
: 程式要反過來變成 + - * / ^
嗯嗯,我也是這麼想
: ElseIf op1 = "^" 的下面那行全部消掉, p = p - 1: Gosub SplitProc 根本也沒意義
: ^ 這個運算子是要留在最後處理的,所以在 ElseIf 這裡就不做處理
但是不做處理的時候,程式不是會在這裡斷掉嗎
: 如果真的打成這樣...
: ElseIf op1 = "^" Then
: p = p - 1: GoSub SplitProc: Eval = Eval(op1) / Eval(op2): GoTo EndProc
^^^
↑
這是打錯嗎?
(應該是^號吧)
: 會變成
: 5 ^ (-3 * 2)
嗯,我是過,結果答案似乎也不是這樣
例如我輸入2^-1*2
答案是0.5@@!!
(不知道電腦怎麼算的!!)
: 正確的結果應該是
: (5 ^ -3) * 2
--
少年讀書,如隙中窺月;
中年讀書,如庭中望月;
老年讀書,如臺上玩月。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.141.159.236