|
马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 wang220211 于 2016-7-18 15:02 编辑
这段时间宽带坏了就自己没事写个计算器试试。我写的是输入完一个带括号的算式后按等号计算。后来没有找到把字符串转为计算式的命令,就找了一下这方面的介绍,看到一个介绍栈的文章,勉强写出来了,但有些问题请教一下大神们。
1,问题一,tc中有把字符串直接转为计算式(比如"1-(1+1)")的命令吗?还是我没有找到?
2,问题二, 延时到底应该加在什么样的语句后面?当我连续点击数字时反应节奏非常慢,改了半天延时也只是略有不同,看看我的应该怎么改?
功能 点击(b,qw)
变量 a, f=数组(),g
分割字符串(a,f,g)
变量 re=字符串截取右侧(a,1)
等待(20)
如果(a=="0")
变量 ret=字符串移除(a,1,假)
等待(20)
编辑框设置文本("编辑框0",ret&b)
等待(20)
否则如果(re==qw)
错误()
否则
编辑框设置文本("编辑框0",a&b)
等待(20)
结束
结束
3,问题三,上面这段必须先获得文本再设置文本吗?有没有其他写法?
4,问题四,比如
如果((f="+")||(f="-")||(f="*"))
这样的语句到底可不可以写成
如果(f=("+"||"-"||"*"))
怎么我这样写有语句正常判断,有的就不行呢?
5, 问题五,其中我有几句是这样的
否则如果(k==0)
字符栈[k]=f k=k+1
否则如果(f=="(")
字符栈[k]=f
k=k+1
否则如果(字符栈[k-1]=="(")
字符栈[k]=f
k=k+1
我要是写成
否则如果((k==0)||(f=="(")||(字符栈[k-1]=="(")}
就会有问题,但如果
否则如果((k==0)||(f=="(")}
只并列两个条件就可以,这是什么原因啊?我单独实验并列多个条件可以执行啊。
6,问题六,其中一部分命令相同我想改成单独定义一个功能,就出现了问题
其中一句是:
否则如果(f==")")
j=j-1
k=k-1
循环(真)
如果(字符栈[k-1]=="(")
……
另外一句是:
j=j-1
k=k-1
循环(真)
如果(k==0)
……
这样两句怎么写才能定义一个功能使用,其中j,k传址,我改了半天也不对。
7,问题七,请教字符串转计算式有么有没有简单点的写法?
8,问题八,看看我写的能精简不?
谢谢了!
下面我写的代码(等号部分)
变量 线程ID
//从这里开始执行
功能 执行()
//从这里开始你的代码
转数值()
结束
//终止热键操作
功能 终止_热键()
线程关闭(线程ID)
结束
功能 转数值()
变量 a=编辑框获取文本("编辑框0")
a=字符串替换(a,"(","(|")
a=字符串替换(a,")","|)")
a=字符串替换(a,"+","|+|")
a=字符串替换(a,"-","|-|")
a=字符串替换(a,"*","|*|")
a=字符串替换(a,"/","|/|")
变量 f=数组(),h
变量 g=字符串分割(a,"|",f)
变量 数字栈=数组(),字符栈=数组(),j=0,k=0
遍历(变量 i = 0; i < g; i++)
如果( h=是否浮点型(f) )
数字栈[j]=f
j=j+1
否则如果(h=是否整型(f))
数字栈[j]= 转浮点型(f)
j=j+1
否则如果(k==0)
字符栈[k]=f
k=k+1
否则如果(f=="(")
字符栈[k]=f
k=k+1
否则如果(字符栈[k-1]=="(")
字符栈[k]=f
k=k+1
否则如果((字符栈[k-1]=="+"||字符栈[k-1]=="-")&&(f=="*"||f=="/"))
字符栈[k]=f
k=k+1
否则如果((字符栈[k-1]=="+"||字符栈[k-1]=="-")&&(f=="+"||f=="-"))
数字栈[j-2]=计算(数字栈[j-2],数字栈[j-1],字符栈[k-1])
字符栈[k-1]=f
j=j-1
否则如果((字符栈[k-1]=="*"||字符栈[k-1]=="/")&&(f=="*"||f=="/"))
数字栈[j-2]=计算(数字栈[j-2],数字栈[j-1],字符栈[k-1])
字符栈[k-1]=f
j=j-1
否则如果((字符栈[k-1]=="*"||字符栈[k-1]=="/")&&(f=="+"||f=="-"))
数字栈[j-2]=计算(数字栈[j-2],数字栈[j-1],字符栈[k-1])
字符栈[k-1]=f
j=j-1
否则如果(f==")")
j=j-1
k=k-1
循环(真)
如果(字符栈[k-1]=="(")
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
数组指定位置删除(字符栈,k)
k=k-1
数组指定位置删除(字符栈,k)
跳出
否则如果((字符栈[k-1]=="+"||字符栈[k-1]=="-")&&(字符栈[k]=="*"||字符栈[k]=="/"))
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
否则如果(字符栈[k-1]=="+")
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
否则如果(字符栈[k-1]=="-")
数字栈[j-1]=反计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
结束
结束
// 最后计算(字符栈[k-1],"\"(\"",j,k,数字栈,字符栈)
// k=k-1
// 数组指定位置删除(字符栈,k)
否则
编辑框设置文本("编辑框0","无法计算")
结束
结束
j=j-1
k=k-1
循环(真)
如果(k==0)
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
数组指定位置删除(字符栈,k)
跳出
否则如果((字符栈[k-1]=="+"||字符栈[k-1]=="-")&&(字符栈[k]=="*"||字符栈[k]=="/"))
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
否则如果(字符栈[k-1]=="+")
数字栈[j-1]=计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
否则如果(字符栈[k-1]=="-")
数字栈[j-1]=反计算(数字栈[j-1],数字栈[j],字符栈[k])
数组指定位置删除(数字栈,j)
j=j-1
数组指定位置删除(字符栈,k)
k=k-1
结束
结束
// 最后计算(k,0,j,k,数字栈,字符栈)
调试输出(数字栈)
调试输出(字符栈)
结束
功能 计算(a,b,c)
变量 d
选择(c)
条件 "+"
d=a+b
条件 "-"
d=a-b
条件 "*"
d=a*b
条件 "/"
d=a/b
结束
返回 d
结束
功能 反计算(a,b,c)
变量 d
选择(c)
条件 "+"
d=a-b
条件 "-"
d=a+b
结束
返回 d
结束
功能 按钮0_点击()
//这里添加你要执行的代码
线程ID=线程开启("执行","")
结束
最后完整程序及代码
附
计算器.rar
(3.8 MB, 下载次数: 289)
|
|