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