四则运算计算与生成器的开发笔记
本次要做的工作分为两个部分:一:程序应该能够进行四则运算题目的随机生成,二:程序可以对已经给出的题目和答案进行正误判定,并给出判定结果。
预计时间以及实际所花费时间表
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
24小时 |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
3小时 |
· Design Spec |
· 生成设计文档 |
2小时 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
1小时 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1小时 |
· Design |
· 具体设计 |
2小时 |
· Coding |
· 具体编码 |
4小时 |
· Code Review |
· 代码复审 |
1小时 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
3小时 |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
4小时 |
· Size Measurement |
· 计算工作量 |
1小时 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1小时 |
合计 |
23小时 |
设计分析:
首先是第一个功能 ,要求为:1,。不允许出现负数,2.每道运算式子的运算符不超过三个,3.运算式及结果中分数的表示应该使用真分数,4.生成的多道题目应属于不同题目,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。当然还有关于生成题目数目以及运算数范围的限定,这些都很容易做到,不再赘述。
接着就是对需求进行实现的过程。对于负数,只需要对减法重载即可,如果出现负数则交换减数与被减数的位置即可。运算符不超过三个,则可以通过随机1-3个数来决定运算符的数目。而对于真分数的处理,我使用了一个数字类可以同时处理分数与整数,并且重新定义了加减乘除的方式。而题目的生成则采用下面的过程:1:随机一个1-3的整数,确定运算符的个数
2:随机生成相应数目的运算符以及数字类对象
3:随机出每个运算符的运算优先级,并根据优先级及自身确定括号
的有无及相应位置
4:将确定还的运算式以字符串形式输到相应文件中去
其中,数字类定义如下 class shuzi{
public: int fenzi;
int fenmu;
...... }
若是整数则分母为1.且类中定义了该类的对象所对应的加减乘除运算方式。
当然,此处还有一个功能需要实现:去除重复表达式。对于重复表达式的判定我是采用以下方法:对每个得到的算式字符串进行重新编排,编排遵从以下规则:对于要进行加法或者乘法的左右两个数,通过比较大小的结果把大的放在前面,并对每个需要进行加法或者乘法的两个数加上括号,然后就可以通过比较字符串相等的方式找到相同的式子予以去除,重新生成新的式子。到了这里,关于四则运算式子的生成已经完成了。
然后就是第二个功能的实现,这里只需要写一个计算的函数即可,计算方式是先把读取过来的中缀表达式通过队列及栈的方式转换为后缀表达式,然后再做计算,关于转换方法在数据结构书中都有详细介绍,这里也不再赘述了。
以上就是对于本次工作需求所进行的实现和处理,接下来说说此次工作中遇到的问题以及得到的收获。首先就是语言的问题。之前对于c++没有任何的了解,所以在代码编写过程中,一些语法及库函数的应用让我很是头疼。还有就是要特别注重数据结构和一些常用算法的熟练掌握和使用,能够将这些知识应用到实际的具体生活中去,做到立足实际,服务生活。