tian-y-x / C-assignment

Calculator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Assignment 2

Part 1. Description

1. 概述

​ 本次assignment的计算器采用正则表达式读入数据,以二维数组存储了优先级,map对应正则式,有良好的鲁棒性,实现了实数范围表达式的计算,优先级的判断,常用数学函数:开方、三角函数、指数、对数、阶乘的操作,以及自定义变量,并实现计算。高精度计算因笔者对于大数开方、三角函数的计算过程实在搞不明白又因时间太过紧张而没有实现=_=| 。

2. 优先级

​ 本程序中利用了C++ STL 栈模板确保了优先级,分别用double型的数字栈、int型的符号栈(为什么用int下面会解释)具体操作为遇到数字即将其保存到数字栈、遇到符号时进行如下判断:如果当前符号优先级高于栈顶符号将其保存到符号栈,如果小于则弹出符号栈栈顶元素,并判断该符号是一元运算符还是二元运算符,从而知道弹出一个还是两个数字来运算,运算结果再次保存到数字栈。

3. 自定义优先级

​ 用英文格式下的“(” , “)”实现自定义优先级,读入左括号时,表明应先计算括号内部表达式,故左括号应优先级应小于一切符号,同理,读到右括号时应将存储在栈中的符号弹出计算,故右括号优先级大于一切符号。一个小技巧是,当遇左括号遇到右括号时,表明括号内部已处理完毕,这对括号使命也完成了,可弹出左括号,扔掉右括号,进行下面的操作。请注意,本程序中的括号格式与计算机规则相同,不允许出现中括号及大括号。

4. 数学函数

​ 本程序加入了一元运算符阶乘、三角函数、以e为自然底数的对数式、开方,二元运算符指数式。只需读入中注意不要将关键字读成非法字符即可,这些函数都有相应的库函数调用。

5. 变量的定义与计算

​ 因用正则表达式读入,所以读入较为方便,“=”左边为变量名,右边为表达式时,为变量定义,将表达式算出并将其与变量对应。当第二次出现该变量且该式子没有等号时,为带参计算,将变量对应的值压入数字栈中将其看成常数计算即可。

About

Calculator


Languages

Language:C++ 100.0%