[发明专利]基于逆波兰算法的数字示波器数学运算处理方法有效
| 申请号: | 202010610481.3 | 申请日: | 2020-06-30 |
| 公开(公告)号: | CN111767004B | 公开(公告)日: | 2022-02-11 |
| 发明(设计)人: | 黄武煌;张沁川;帅维维;赵勇;叶芃;田书林;王厚军 | 申请(专利权)人: | 电子科技大学 |
| 主分类号: | G06F3/05 | 分类号: | G06F3/05;G06F17/15 |
| 代理公司: | 北京正华智诚专利代理事务所(普通合伙) 11870 | 代理人: | 李林合;何凡 |
| 地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 波兰 算法 数字 示波器 数学 运算 处理 方法 | ||
1.一种基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,包括以下步骤:
S1、输入字符参数,生成运算表达式;
S2、对算术运算表达式进行中缀表达式向逆波兰式转换解析,并检测解析过程中表达式的合法性;所述检测解析过程中表达式的合法性具体包括以下分步骤:
C1、创建一存放操作数及括号的数据栈;
C2、在中缀表达式转换为逆波兰式过程中,进行函数校验,判断过程具体为:
C21、判断校验栈是否为空,若是则说明表达式不完整,结束流程;否则输出布尔值doPop为真,进行下一判断;
C22、判断校验栈是否不为空且布尔值doPop为真,若是则从校验栈中弹出一个元素,进行步骤C26;否则进行下一判断;
C23、判断校验栈是否为空且布尔值doPop为真,若是则进行下一判断,否则说明缺少左括号,结束流程;
C24、判断检验区操作数个数是否匹配函数要求个数,若是则说明公式正确,结束流程;否则进行下一判断;
C25、判断检验区操作数个数是否小于函数要求个数,若是则说明参数过少结束流程;否则说明参数过少结束流程;
C26、判断该元素是否为操作数,若是则将该元素输出至待检验区;否则进行下一判断;
C27、判断该元素是否为左括号,若是则输出布尔值doPop为假,并返回步骤C22;否则说明出现非法字符,结束流程;
S3、逐元素对逆波兰形式表达式进行计算;
S4、将计算结果存储至对应的数学通道的数据缓冲区内;
S5、将运算结果显示于示波器屏幕上。
2.根据权利要求1所述的基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,所述步骤S1还包括:
将生成的运算表达式转换为半角输入以及小写格式。
3.根据权利要求2所述的基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,所述步骤S1之后还包括以下分步骤:
A1、根据测量项字符串以及操作符字符串将运算表达式进行拆分处理;
A2、通过遍历的方式,以“+-*/(),=!|~”为分割符标志,将运算表达式元素进行提取,并使用队列方式进行存储。
4.根据权利要求3所述的基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,所述步骤A2中,定义Token数据结构作为数据结构体,所述Token数据结构包括类型、单位、标识符、元素位于表达式的位置,其中类型包括操作数、运算符、函数、分隔符,设置运算表达式字符串为ListToken。
5.根据权利要求4所述的基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,所述步骤S2中,对算术运算表达式进行中缀表达式向逆波兰式转换解析具体包括以下分步骤:
B1、创建一存放操作符的数据栈,并按照优先级存放操作符;
B2、依次遍历中缀表达式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个中缀表达式中的所有元素:
若该元素是操作数,则将该元素输出到逆波兰式队列;否则进行下一判断;
若该元素是函数,使用临时变量保存该元素;否则进行下一判断;
若该元素是运算符,当操作符栈为空或栈顶操作符具有更高的优先级或栈顶为左括号时,将该元素压入栈;否则从栈中弹出一个元素输出至逆波兰式,并重复操作符栈判定步骤,直至将该元素压入栈;否则进行下一判断;
若该元素是左括号,且临时变量不为空,则将该元素输出到逆波兰式的同时将该元素与临时变量压入栈中,然后将临时变量置为空;否则直接将该元素压入栈;否则进行下一判断;
若该元素是右括号,当栈顶为函数时,将该元素输出至逆波兰式队列,并从栈顶弹出一个元素至逆波兰式队列;当栈顶为运算符时,从栈顶弹出一个元素至逆波兰式队列,然后重复判断此时栈是否为空;若栈顶为左括号,从栈顶弹出一个元素;否则进行下一判断;
若该元素为逗号,则依次弹出操作符栈中的所有操作符,输出至逆波兰式队列,直至遇见函数源;否则获取下一个元素进行判断。
6.根据权利要求1所述的基于逆波兰算法的数字示波器数学运算处理方法,其特征在于,所述步骤S3逐元素对逆波兰形式表达式进行计算具体包括以下分步骤:
D1、创建一存放中间结果的数据栈;
D2、依次遍历逆波兰式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个逆波兰式中的所有元素:
若该元素为操作数或左右括号,则直接压入栈中;否则进行下一判断;
若该元素为运算符,则首先获取当前运算符定义的操作数个数,并从栈中弹出满足个数的操作数,经过计算后将结果数据压入栈中;否则进行下一判断;
若该元素为函数,则将离栈顶最近的一对括号的范围内操作数从栈中弹出并作用于该函数进行运算,经过计算后将运算结果压入栈中;否则从栈中弹出最后一个数值作为带显示波形的数据结果输出。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010610481.3/1.html,转载请声明来源钻瓜专利网。





