作者TrueFeeling (昨日之死)
看板Visual_Basic
标题Re: [VB6 ] 计算机
时间Sat Jun 11 17:05:06 2005
※ 引述《fumizuki (小狮子)》之铭言:
: ※ 引述《TrueFeeling (昨日之死)》之铭言:
: : ^^^^^^^^^^^^^^^^^^^^^^^
: : 这边的"s 只剩下数值"是什麽意思?
: 数值是 0 1 2 3 4 5 6 7 8 9 ,不含其它符号,更不包含空格等等..
: 有加减乘除的都称它为运算式
这我就不懂了,如果s只剩下数值的话,Eval应该不会再继续分割下去才对
: : 如果拿这个例子来分析的话:
: : 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
现在我是的结果:
竟然又变成0了@@||
而且3种都是0
然後游标是一个"半形"的黑色长方体
怎麽会这样?!
: 第一个字元是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 就是自订的函数,用来做四则运算用的...
: : 嗯,这个我知道
: : 只是,不明白为什麽刚刚你在说明的时候,最高最低的意思
: 什麽?
: 最高是说优先等级最高,会最先被处理的呀...
嗯嗯,我们理解的应该都一样,这应该只是表达的不同^^
: : ^^^^^^^^
: : 这边的下一次意思是?
: : 我的想法是:
: : 如果这串字串有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 的地方呀
以这段程式为例:
p = InStr(s, "+")
If p > 0 Then GoSub SplitProc: Eval = Eval(op1) + Eval(op2): GoTo EndProc
你的意思是说,执行到GoSub SplitProc的时候
它会跳到
SplitProc:
op1 = Left(s, p - 1): op2 = Mid(s, p + 1): Return
然後SplitProc跑完又会回到GoSub SplitProc
然後在跳到
SplitProc:
op1 = Left(s, p - 1): op2 = Mid(s, p + 1): Return
就这样反覆循环,
然後最後才进入Eval = Eval(op1) + Eval(op2)然後GoTo EndProc吗?
如果是这样的话,
在GoSub Return的循环过程中
Eval并没有被分割,没有被定义成Eval = Eval(op1) + Eval(op2)
它只在这一小段的程式中跳过去在跳回来,
没有跑到程式的其他部分,这样的话我无法理解
我一直以为是GoSub SplitProc以後,配合着
SplitProc:
op1 = Left(s, p - 1): op2 = Mid(s, p + 1): Return
有了op1 = Left(s, p - 1): op2 = Mid(s, p + 1)其中op1,op2的定义之後,
继续定义Eval = Eval(op1) + Eval(op2)得到新的Eval(即Eval(op1)和Eval(op2)),
然後再用新的Eval(即Eval(op1)和Eval(op2))重Function的一开始,
原原本本的再跑一次
: : 嗯嗯,(笔记笔记ing)^^
--
少年读书,如隙中窥月;
中年读书,如庭中望月;
老年读书,如台上玩月。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.141.159.236