作者TrueFeeling (昨日之死)
看板Visual_Basic
標題Re: [VB6 ] 計算機
時間Sat Jun 11 14:44:04 2005
※ 引述《fumizuki (小獅子)》之銘言:
: ※ 引述《TrueFeeling (昨日之死)》之銘言:
: : ^^^^^^^^^^^
: : 怎麼樣算是執行完成呢@@"
: s 只剩下數值的時候,
^^^^^^^^^^^^^^^^^^^^^^^
這邊的"s 只剩下數值"是什麼意思?
如果拿這個例子來分析的話:
Eval(2-3*5+7/5-9)=Eval(2-3*5)+Eval(7/5-9)
2-3*5或7/5-9這樣算是數值嗎?
還有就是我再即時運算視窗中:
===
W=2-3*5
X=Val(2-3*5)
Print X
-13
===
W=2-3*5
X=Val(W)
Print X
-13
==
W="2-3*5"
X=Val(W)
Print X
-13
==
為什麼第3個明明W就是字串,Val()函數還可以計算阿?
: Eval 不是會把 s 分割成兩部份嗎? 並且這兩部份不包含中間的運算子,
: 然後這兩部份會再交給新的 Eval 處理,新的 Eval 一樣會分解,去掉運算子,
: 再交給新的 Eval 處理...
: 重複這樣的行為,直到 s 不再包含運算子時,傳回數值,
: 這裡就算是一個 Eval 的結束了,就是「執行完成」
這邊有個問題:
傳回數值的時候,
例如Eval(2-3*5+7/5-9)=Eval(2-3*5)+Eval(7/5-9):
假設到了算到了Eval(3)*Eval(5)的時候
這時會變成Val(3)*Val(5),對嗎?
然後Eval=Val()....Val()...Val()....對嗎
: 另一個結束是 分成兩部份的那段程式碼收到了 Eval 傳回的數值後,計算,
: 然後 Goto EndProc,就是「執行完成」了。
: : 嗯,知道
: : 可是為什麼乘最高,其他最低呢?
: : 我覺得應該是類似這樣吧:
: : 最高-次高-低-最低
: 沒有,你自己試試看就知道
: 加與減的順序不影響運算的結果
: 1 + 2 - 3 = 1 + (2 - 3) = (1 + 2) - 3 = 0
: 而且數學只說過先乘除後加減,並沒有說要先乘後除,還是先除後乘吧
: 依照我程式的撰寫,運算順序是除-乘-減-加,把它改成乘-除-加減,結果是一樣的。
: (如果會不同的話,就 Orz 了,那我可要好好研究為何會不同...)
嗯,這個我知道
只是,不明白為什麼剛剛你在說明的時候,最高最低的意思
: : 嗯,這個我有看到,想問一下如果不設這個c的話,
: : 方程式還可以運作嗎?為什麼?
: 可以,因為他只是個指標,表示 Eval 被執行了幾次
: 但是,還有個 c = c - 1,你大概會問為什麼要減 1 吧?
: 那是 Static c As Integer 的關係,
: Static 的目的就是讓 c 這個變數的值一直保存,不要因為 End Function 就消失掉。
: 正是因為值不會消失,所以如果這次執行了8次 Eval,
: 下一次再使用的時候,c 的值會是8
^^^^^^^^
這邊的下一次意思是?
我的想法是:
如果這串字串有8個運算子
那麼Eval執行的次數會變成1+2*8次的樣子
然後傳回
這邊有個問題:
SplitProc裡面的Return是Return到哪裡?
感覺像是c=c+1
Eval0=Eval1+Eval2然後c=c-1
c=c+1
然後Eval1=Eval1a+Eval1b
然後c=c-1
c=c+1
然後Eval1=Eval2a+Eval2b
然後c=c-1
: 我設定每一次離開函數就減去一,是要 c 的值最後會歸零。
: 下次再使用 Eval 的時候, c 的值就是 0
: c = c + 1 後,c 的值就是 1,才能判定 Eval 是第一次被呼叫,
: 而不是 Eval(op1) 或 Eval(op2) 在做重覆呼叫...
: : 我以為輸入和輸出要分開,沒想到你居然把它合在一起
: : 嗯嗯,高手高手^^||
: : 嗯,我又學到了一招^^
: 新手的時候的我,也會用一大堆變數,
: 但後來看看程式碼,會發現,有些變數可以去掉,
: 不過也要看情況,相同性質的才共用變數,不同性質的千萬不要這樣做
: 因為很容易用錯變數,或變數相衝突...
: 程式碼精簡一點,以後比較好管理
: 不然常看不懂自己在寫些什麼 ( ′-`)y-~
嗯嗯,(筆記筆記ing)^^
--
少年讀書,如隙中窺月;
中年讀書,如庭中望月;
老年讀書,如臺上玩月。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.141.159.236