计算器设计思路_第1页
计算器设计思路_第2页
计算器设计思路_第3页
计算器设计思路_第4页
计算器设计思路_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“语言课程设计”报告 姓 名程 序优 良 中 及格 不及格 学 号文 档优 良 中 及格 不及格 专 业计算机平 时优 良 中 及格 不及格 起始日期2010 年 7月总 评终止日期2010 年 9月设 计 文 档设计任务计算器任务分析1实现具有加,减,乘,除基本四则运算功能2设计基于MFC框架的,具有友好界面的Windows应用程序3科学计算器要求具有运算优先级别,包括运算符号的优先级判断,实现基于括号的优先级控制设计思路与流程首先设计出一个计算器的对话框,通过在对话框中输入计算式,然后使用相关的类对计算器进行解析计算,再将计算结果输出在对话框中。具体步骤:1 弹出对话框,提示输入算式2 用户单击按钮后调用相应的函数进行计算3 函数首先判断计算式是否合法4 如果合法的话则去除算式中全部的空白5 函数将依次递归判断,根据第一个字符来确定下一步的动作6 如果是一个左括号,则表示括号内是一个表达式,递归调用自身7 如果是一个数字,则读取后面的全部字符直到不是数字8 如果是一个运算符,如果是乘或者除则直接对运算符两边的数字进行运算,然后返回结果,因为乘除的优先级最高9 如果是一个运算符,且为加、减、取模,则先递归调用自身进行下一步运算,然后对返回的结果进行运算,最后返回结果,这样可以保证比加减运算高的操作能率先执行10. 如果是一个字母,则可能是一次函数调用,或者一个变量,继续读取余下的字母,如果剩余一个括号,表明是一个函数,则进行函数运算11如果剩余字符是一个运算符,则表明读取的是一个变量,则从符号表中读取该变量并转化为数字12如果读到了一个右括号,表明表达式结束,直接返回运算结果13如果算式为“ 字母串 = 表达式 ”的形式,说明这是一个给变量赋值的表达式,先读取变量名,然后给其赋予表达式的结果14全部表达式运算完毕后,如果还剩余字符,说明要么该字符不合法,要么表达式有语法错误,抛出异常15最后将运算结果返回给对话框,然后将其转换为字符串显示出来其中,为了实现错误检测,采用了C+的异常机制,一旦发现语法错误或者语义错误便抛出异常,然后由对话框捕捉异常并提示错误。另外保存变量的符号表直接由std:map 实现,进行函数调用时同样使用 map 将函数名和函数指针关联起来。功能介绍该计算器可以进行基础的加减乘除运算,能够判断运算符的优先级和判断括号,并且能够判断所有的语法错误和语义错误。除此以外,计算器还能使用变量,能在表达式中直接使用变量名,并且能够使用表达式对变量进行复制。同时,计算器还能进行函数运算,目前支持一元函数和二元函数。一元函数包括acos,sin, atan, ceil. cos, cosh, exp, abs, floor, log, log10, sin, sinh, sqrt, tan, pow, atan, rand, round, acosh, atanh, cbrt, asinh。二元函数包括dim, max, min, mod。同时计算器能够生成随机数进行运算,该计算器可以使用C函数库中全部的数学函数。文件与对象描述cal.h: 包括计算器全部函数的声明cal.cpp: 计算器全部函数的实现cal_exception.h: 用于表示计算错误的异常类的声明于实现cal_private.h: 一些计算器自身使用的内部函数cal_number_type.h: 用于定义数字的类型,此处直接为 doublecal_functions.h: 表达式中使用的函数的声明cal_functions.cpp: 表达式中使用的函数的实现Calculator.cpp: 计算器的对话框使用的类Calculator.h: 计算器对话框类的定义CalculatorDlg.cpp: 计算器的主程序,包括消息循环的响应菜单CalculatorDlg.h: 对话框的定义DialogAbout.cpp: 关于对话框的声明DialogAbout.h: 关于对话框的定义 测试报告1.计算器的界面 1 进行运算并保存历史记录2 进行变量的赋值,并更新变量列表总结虽然计算器这个项目比较简单,但仍能考验出实际编程的能力,在简单的计算器上进行拓展并保证日后二次开发的拓展性仍然是一个不简单的任务。设 计 文 档设计任务1.要求能够随机产生矩阵。2.要求实现两矩阵相加,相减,相乘,以及数乘基本运算功能3.设计基于MFC框架的,具有友好界面的Windows应用程序4.能够使用单选按钮,选择矩阵,并将其转置。任务分析由于矩阵的输入本身就是一个繁杂的过程,如果使用鼠标点击的方式来输入矩阵,操作将异常繁杂,所以矩阵的输入决定依旧采用手工输入的方式,考虑到矩阵运算本身和计算器就有共通之处,所以决定将矩阵运算加入计算器的功能当中,这样可以直接实现矩阵的表达式运算。设计思路与流程首先计算器中表示数字的类型需要进行包装,将原有的 double 置换成矩阵类,同时在计算器读取数字的本分进行拓展,使其能够分析并读取矩阵。另外矩阵本身的类也依旧需要进行大量的实现,加减乘除等运算需要进行重载,使其既能够实现矩阵之间的运算,还要能实现矩阵与数字之间的运算。具体步骤:1 用户输入表达式2 程序分析出用户输入的矩阵3 程序利用计算器使用的语法分析函数对矩阵进行运算4 将矩阵转化为字符串输出功能介绍本程序除了可以计算矩阵与矩阵之间的+、-、*、/ 运算,还能计算矩阵与数字之间的运算,同时能够计算包含矩阵的复杂表达式。同时还能够对矩阵进行函数运算,可以进行转置,左除,右除等操作。文件与对象描述cal_number_type.h: 矩阵类的定义cal_number_type.cpp: 矩阵类的实现DialogViewMatrix.cpp: 查看矩阵的窗口类DialogViewMatrix.h: 查看矩阵窗口类的定义NewMatrixDlg.cpp: 新建矩阵的窗口NewMatrixDlg.h: 新建矩阵窗口类的定义矩阵对象描述: number_t (double = 0.0); 使用数字初始化 number_t (number_t *, int, int, const char*); / initial matrix number_t (const number_t &); number_t (); /析构函数 number_t & operator= (const number_t &); / 赋值构造器 number_t operator+ (const number_t &) const / 重载加法运算符; number_t operator- (const number_t &) const / 重载减法运算符; number_t operator* (const number_t &) const / 重载乘法运算符; number_t operator/ (const number_t &) const / 重载除法运算符; number_t operator% (const number_t &) const / 重载取模运算符; number_t operator (const number_t &) const / 重载异或运算符; number_t operator- () const / 重载一元取负运算符; number_t operator (int index) / 取得某一项元素; number_t & operator (int index) / 取得并修改某一项元素; bool operator= (const number_t &rhs) const; bool operator!= (const number_t &rhs) const; number_t & operator+= (const number_t & rhs); number_t & operator-= (const number_t & rhs); number_t & operator*= (const number_t & rhs); n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论