sandyzhang 发表于 2018-1-13 13:48:07

关于计算器解析字符串原理的问题

计算器是如何实现 支持带运算符的加减乘除运算的呢?

是检测用户按键,在一个“输入内容”的变量中保存用户输入的内容,按等于号,对该变量字符串进行解析,算出答案吗?还是 显示内容和按键按下的运算符分别独立,显示内容变量只负责显示,内部其实还有个变量存用户按下按钮的顺序,对顺序进行解析,算出最后的答案?

有没有用到后缀表达式(书上说后缀表达式只能处理加减乘除带括号的简单运算,要进行复杂运算还要进行推广和改进算法) 还是压栈算法?

还有一个问题:假如输入sin(
这个函数按del删除为什么不是一个一个删除:sin》si》s
而是点del就把整一个函数全部删除?

大神们用jtag接口刷系统又是怎么入门的,我怎么无从学起,有没有相应教程贴之类的。

问题有点多,高二学生党新手一枚。{:13_322:}

感觉就是无从学起,网上的教程贴也不多,虽然会c51单片机编程,感觉离底层还很远,也无济于事。

手上有9860和nspire


zqqyyy 发表于 2018-1-13 14:15:18

好像有一个叫逆波兰表达式的东西,可以去百度一下,应该是你想问的?

sandyzhang 发表于 2018-1-13 16:10:59

zqqyyy 发表于 2018-1-13 14:15
好像有一个叫逆波兰表达式的东西,可以去百度一下,应该是你想问的?

嗯嗯就是后缀表达式呢,非常谢谢!
我觉得应该就是这么实现的,刚刚搜索了,好像开窍了。。。

那再问下,输入sin(后点删除DEL,为什么整个sin(都删除了,而不是只删除(括号?

sandyzhang 发表于 2018-1-13 16:57:45

刚刚想了想,基础的加减乘除就应该用后缀表达式实现
这篇文章写得很好http://www.cnblogs.com/chenying99/p/3675876.html
比如说2+6*8/2
用后缀表达式
20+60*80/20
把20看做一个整体,转后缀表达式用压栈计算
有同学可能会问,那2+6*8/sin(π)呢
应该这么处理:
转换为后缀表达式之前,先将各函数值计算出来,把变量值也替换,比如2+6*8/sin(π),就先把sin(π)的值计算出来并替换,如果sin里面是表达式,就算出来结果再计算sin值
直到符合“只有加减乘除括号”的条件的表达式即可,然后转换为逆波兰表达式进行计算

能看懂的凑合看吧,有人就发伪代码

ZephRay 发表于 2018-1-13 21:20:23

sandyzhang 发表于 2018-1-13 03:10
嗯嗯就是后缀表达式呢,非常谢谢!
我觉得应该就是这么实现的,刚刚搜索了,好像开窍了。。。



你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符,所以删除一次就全部删掉了。

sandyzhang 发表于 2018-1-13 21:23:11

ZephRay 发表于 2018-1-13 21:20
你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符 ...

久仰大名了,你就是那个啥项目的大神吧!

你是怎么给计算器编系统的,有兴趣加q讨论下吗,教教我呗!

sandyzhang 发表于 2018-1-13 21:24:58

ZephRay 发表于 2018-1-13 21:20
你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符 ...

能明白你说的意思,
页: [1]
查看完整版本: 关于计算器解析字符串原理的问题