cnCalc计算器论坛 [原fx-es(ms)论坛]

 找回密码
 注册
搜索
查看: 476|回复: 6

[求助] 关于计算器解析字符串原理的问题

[复制链接]
发表于 2018-1-13 13:48:07 | 显示全部楼层 |阅读模式
计算器是如何实现 支持带运算符的加减乘除运算的呢?

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

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

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

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

问题有点多,高二学生党新手一枚。

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

手上有9860和nspire


发表于 2018-1-13 14:15:18 | 显示全部楼层
好像有一个叫逆波兰表达式的东西,可以去百度一下,应该是你想问的?
 楼主| 发表于 2018-1-13 16:10:59 | 显示全部楼层
zqqyyy 发表于 2018-1-13 14:15
好像有一个叫逆波兰表达式的东西,可以去百度一下,应该是你想问的?

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

那再问下,输入sin(后点删除DEL,为什么整个sin(都删除了,而不是只删除(括号?
 楼主| 发表于 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值
直到符合“只有加减乘除括号”的条件的表达式即可,然后转换为逆波兰表达式进行计算

能看懂的凑合看吧,有人就发伪代码
发表于 2018-1-13 21:20:23 | 显示全部楼层
sandyzhang 发表于 2018-1-13 03:10
嗯嗯就是后缀表达式呢,非常谢谢!
我觉得应该就是这么实现的,刚刚搜索了,好像开窍了。。。

你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符,所以删除一次就全部删掉了。
 楼主| 发表于 2018-1-13 21:23:11 | 显示全部楼层
ZephRay 发表于 2018-1-13 21:20
你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符 ...

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

你是怎么给计算器编系统的,有兴趣加q讨论下吗,教教我呗!
 楼主| 发表于 2018-1-13 21:24:58 | 显示全部楼层
ZephRay 发表于 2018-1-13 21:20
你会注意到nspire就是删除括号的,而9860我记得是删除整体。原因是,9860内部sin(是1个字符而不是4个字符 ...

能明白你说的意思,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|Archiver|手机版|cnCalc计算器论坛  

GMT+8, 2019-2-23 19:32 , Processed in 0.034482 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表