c#实现科学计算器 —— 总体分析篇

来源:互联网 发布:祖玛java 7723 编辑:程序博客网 时间:2024/06/06 01:52
引言
  早在一年前,我就用VC++设计了一个能够计算表达式的科学计算器,但由于当时才大二,对于“编译原理”这种东西根本就没有概念,因此设计时遇到了有关错误文法分析的问题(当时只知道要在用户输入不正确的表达式格式时报错),不知道怎么做,因此就把这个项目搁置了下来,本学期正好学到编译原理,发现还是可以用一些理论化的东西来解决文法问题,于是决定重新启动这个项目,并把代码移植到C#中。

设计科学计算器的用意
  在计算机里,我们用得最多的计算器恐怕就是Windows自带的那个计算器了。该计算器当然有不少值得学习的功能,如进制转换、三角函数计算、指数运算、幂运算等,但有一个令人遗憾的功能就是不能输入表达式进行计算(我们看到的永远只是一个中间结果),往往我们用起来的时候必须先把要计算的表达式写下来,然后一个一个的输入,如果一不小心输错了,就只能重新输入,这对于普通用户来说是个不小的考验。
  另一方面,我现在已经大三下学期,想把学过的一些理论的东西融合在一起,能够有所突破。计算器尽管看起来是一个再简单不过的软件,但仔细想想,还是有很多文章可做的,就我个人的分析来看,该计算器将涉及到《数据结构》、《编译原理》、《软件工程》等多门学科的知识,对于我来说既是考验也是挑战。
  从这两点来看,设计该科学计算器自然是值得的!(不知道大家有啥建议,大家可以发表一下评论)

功能分析
  作为一个科学计算器,最重要的自然是能够计算东西,以下是我罗列的一些需要实现的基本功能:
1. 基本四则运算
2. 三角函数计算
3. 指幂运算
4. 表达式求值
5. log运算
6. 提供一些基本常数,如PI、e等
7. 进制转换
8. 变量存储
    基本上以上海市中小学教材指定用计算器的功能为参照,当然可能以后还会考虑增加函数绘图、概率分析、化学方程式配平、线性方程求解等高级功能,暂时就不列入功能列表中了。

打算支持的运算符
根据以上功能,打算支持的运算符包括:
+、-、*、/、%、!、cos、sin、tg、ctg、asin、acos、atg、actg、ln、log、lg、cbrt(立方根)、sbrt(平方根)、1/(倒数)、^(次方)、=
可能还会引入一些其他的运算符和操作符,暂时不写入需求中。

目前已划分的功能模块
1. 词法分析模块:负责分析输入的表达式的词法,存入特定的数据结构中
2. 文法分析模块:负责分析表达式的语法,如果存在任何不符合规定文法的格式,则报错,拒绝计算。
3. 计算模块:在假设输入表达式正确的前提下,进行计算,计算精度为double

大家如果有好的建议,还请多多发表评论,献计献策,先谢谢大家!