作者fumizuki (小狮子)
看板Visual_Basic
标题Re: [VB6 ] 计算机
时间Sat Jun 11 13:55:10 2005
※ 引述《TrueFeeling (昨日之死)》之铭言:
: ※ 引述《fumizuki (小狮子)》之铭言:
: : 你的问题大概是
: :
: : Eval = Eval(op1) + Eval(op2): Goto EndProc 这一行吧
: :
: : 这是两行叙述,第一行执行时会去呼叫 Eval,
: : op1 和 op2 那两个 Eval 都「执行完成」的时候,才会 Goto EndProc
: ^^^^^^^^^^^
: 怎麽样算是执行完成呢@@"
s 只剩下数值的时候,
Eval 不是会把 s 分割成两部份吗? 并且这两部份不包含中间的运算子,
然後这两部份会再交给新的 Eval 处理,新的 Eval 一样会分解,去掉运算子,
再交给新的 Eval 处理...
重复这样的行为,直到 s 不再包含运算子时,传回数值,
这里就算是一个 Eval 的结束了,就是「执行完成」
另一个结束是 分成两部份的那段程式码收到了 Eval 传回的数值後,计算,
然後 Goto EndProc,就是「执行完成」了。
: :
: : 先乘除後加减啊
: :
: : 乘除优先运算,加减最後运算,这数学规则应该知道吧
: 嗯,知道
: :
: : 因为最先进入的程式是最後才会结束的,所以要倒过来,变成加减先处理,再处理乘除
: :
: : 至於乘与除先後顺序不会影响结果,加与减也是...
: 可是为什麽乘最高,其他最低呢?
: 我觉得应该是类似这样吧:
: 最高-次高-低-最低
没有,你自己试试看就知道
加与减的顺序不影响运算的结果
1 + 2 - 3 =
1 + (2 - 3) =
(1 + 2) - 3 =
0
而且数学只说过先乘除後加减,并没有说要先乘後除,还是先除後乘吧
依照我程式的撰写,运算顺序是除-乘-减-加,把它改成乘-除-加减,结果是一样的。
(如果会不同的话,就 Orz 了,那我可要好好研究为何会不同...)
: : 前面翻翻程式码吧
: :
: : 最开头就写了个 c = c + 1 了
: 嗯,这个我有看到,想问一下如果不设这个c的话,
: 方程式还可以运作吗?为什麽?
可以,因为他只是个指标,表示 Eval 被执行了几次
但是,还有个 c = c - 1,你大概会问为什麽要减 1 吧?
那是
Static c As Integer 的关系,
Static 的目的就是让 c 这个变数的值一直保存,不要因为 End Function 就消失掉。
正是因为值不会消失,所以如果这次执行了8次 Eval,
下一次再使用的时候,c 的值会是8
我设定每一次离开函数就减去一,是要 c 的值最後会归零。
下次再使用 Eval 的时候, c 的值就是 0
c = c + 1 後,c 的值就是 1,才能判定 Eval 是第一次被呼叫,
而不是 Eval(op1) 或 Eval(op2) 在做重覆呼叫...
: : 不然你以为是怎麽用@@?
: 我以为输入和输出要分开,没想到你居然把它合在一起
: 嗯嗯,高手高手^^||
: : 呼叫就是这样子用的@@"
: 嗯,我又学到了一招^^
: : op1 有两个地方在使用它,两个地方并不会冲突,用过了後就不再使用了...
新手的时候的我,也会用一大堆变数,
但後来看看程式码,会发现,有些变数可以去掉,
不过也要看情况,相同性质的才共用变数,不同性质的千万不要这样做
因为很容易用错变数,或变数相冲突...
程式码精简一点,以後比较好管理
不然常看不懂自己在写些什麽 ( ′-`)y-~
--
VB 程式设计 仓木麻衣 PTT 星爷板 行列输入法
======================================================
Visual_Basic MaiKuraki Stephen Array
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.58.156.43