作者fumizuki (小狮子)
看板Visual_Basic
标题Re: [VB6 ] 计算机
时间Sat Jun 11 16:36:08 2005
※ 引述《TrueFeeling (昨日之死)》之铭言:
: ※ 引述《fumizuki (小狮子)》之铭言:
: : s 只剩下数值的时候,
: ^^^^^^^^^^^^^^^^^^^^^^^
: 这边的"s 只剩下数值"是什麽意思?
数值是 0 1 2 3 4 5 6 7 8 9 ,不含其它符号,更不包含空格等等..
有加减乘除的都称它为运算式
: 如果拿这个例子来分析的话:
: 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(W)
: Print X
: -13
: ==
: 为什麽第3个明明W就是字串,Val()函数还可以计算阿?
Val() 并不是计算,是转换,它只取前几个字元,後面非数字的部份会舍弃。
非数字的部份之後还就算还有数字,也照样舍弃...
你最後一个的输出值抄错了吧...
输出是 2,不可能是-13
第一个字元是2,第二个字元不是数字,所以之後的通通舍弃,只剩下2...
: 这边有个问题:
: 传回数值的时候,
: 例如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 和 Val 的意思是相同的,
不过 Val 会舍弃後方非数字的部份,Eval 不会做这个动作...
Eval 就是自订的函数,用来做四则运算用的...
: : 另一个结束是 分成两部份的那段程式码收到了 Eval 传回的数值後,计算,
: : 然後 Goto EndProc,就是「执行完成」了。
: : 没有,你自己试试看就知道
: : 加与减的顺序不影响运算的结果
: : 1 + 2 - 3 = 1 + (2 - 3) = (1 + 2) - 3 = 0
: : 而且数学只说过先乘除後加减,并没有说要先乘後除,还是先除後乘吧
: : 依照我程式的撰写,运算顺序是除-乘-减-加,把它改成乘-除-加减,结果是一样的。
: : (如果会不同的话,就 Orz 了,那我可要好好研究为何会不同...)
: 嗯,这个我知道
: 只是,不明白为什麽刚刚你在说明的时候,最高最低的意思
什麽?
最高是说优先等级最高,会最先被处理的呀...
: : 可以,因为他只是个指标,表示 Eval 被执行了几次
: : 但是,还有个 c = c - 1,你大概会问为什麽要减 1 吧?
: : 那是 Static c As Integer 的关系,
: : Static 的目的就是让 c 这个变数的值一直保存,不要因为 End Function 就消失掉。
: : 正是因为值不会消失,所以如果这次执行了8次 Eval,
: : 下一次再使用的时候,c 的值会是8
: ^^^^^^^^
: 这边的下一次意思是?
: 我的想法是:
: 如果这串字串有8个运算子
8个运算子的话...
1+2+3+4+5+6+7+-8
1: 1+2+3+4+5+6+7+-8
2: 1
3: 2+3+4+5+6+7+-8
4: 2
5: 3+4+5+6+7+-8
6: 3
7: 4+5+6+7+-8
8: 4
9: 5+6+7+-8
10:5
11:6+7+-8
12:6
13:7+-8
14:7
15:-8
共15次
: 那麽Eval执行的次数会变成1+2*8次的样子
等於说 Eval 执行的次数等於 运算元的数量 + 运算子的数量
上面有 8 个运算元 (1,2,3,4,5,6,7,8),和 7 个运算子 (都是+号)
8 + 7 = 15
(其中-8是负数,-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
GoSub 和 Return 是互相配合的,有 Gosub 才有 Return
没有 GoSub,使用 Return 是会发生错误的。
Return 当然是回到 GoSub 的地方呀
: : 我设定每一次离开函数就减去一,是要 c 的值最後会归零。
: : 下次再使用 Eval 的时候, c 的值就是 0
: : c = c + 1 後,c 的值就是 1,才能判定 Eval 是第一次被呼叫,
: : 而不是 Eval(op1) 或 Eval(op2) 在做重覆呼叫...
: : 新手的时候的我,也会用一大堆变数,
: : 但後来看看程式码,会发现,有些变数可以去掉,
: : 不过也要看情况,相同性质的才共用变数,不同性质的千万不要这样做
: : 因为很容易用错变数,或变数相冲突...
: : 程式码精简一点,以後比较好管理
: : 不然常看不懂自己在写些什麽 ( ′-`)y-~
: 嗯嗯,(笔记笔记ing)^^
--
VB 程式设计 仓木麻衣 PTT 星爷板 行列输入法
======================================================
Visual_Basic MaiKuraki Stephen Array
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.58.156.43