结对项目
这个作业属于哪个课程 | 网工1934-软件工程 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 实现一个自动生成小学四则运算题目的命令行程序 |
队员:
3119005317陈浩然 GitHub:https://github.com/change247/change.github.io
3119005362蔡君福 GitHub:https://github.com/smbol/3119005362
3119005381林嘉远 GitHub:https://github.com/aiqingxianjin/skr
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 930 | 1330 |
Development | 开发 | ||
Analysis | 需求分析(包括学习新技术) | 120 | 100 |
Design Spec | 生成设计文档 | 90 | 145 |
Design Review | 设计复审 | 150 | 205 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 250 | 300 |
Coding | 具体代码 | 250 | 300 |
Code Review | 代码复审 | 115 | 110 |
Test | 测试(自我测试,修改代码,提交修改) | 15 | 100 |
Reporting | 报告 | 10 | 20 |
Test Repor | 测试报告 | 10 | 10 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 930 | 1330 |
二、效能分析
本次我们编程所用到的函数:
因为算法的核心是如何生成运算表达式,所以自然而然在运行时他们占用CPU较多,如图所示
三、核心算法
我们几个采用的算法比较简单粗暴,这也是因为我们在做作业之前没有仔细思考并且上网查询资料,只是三个人简单讨论了一波就直接开始编程,所以我们在结束项目之后进行了深刻的反思。
算法如下图所示:
主要是看到了题目说要求每条算式不超过3个运算符,所以我们将这个要求分成了三种情况。首先是只含有一个运算符的,这种情况相对较简单;然后是两个运算符,这时候就要讨论符号的优先级,看第一个符号是加减还是乘除,在判断第二个符号;以此类推,便能得到三个运算符的结果。
所以我们的代码使用了许多的if else结构和switch case的选择结构,用于讨论运算符的个数。
四、代码说明
函数:
主函数:
五、运行测试
首先输入-n与-r确定好题目个数和数字大小(不超过r)
然后打开Exercises.txt做题,做完题之后在DOS命令输入你刚刚做题的文本文件名(即Exercises.txt),然后再输入参考答案的文件名(Answers.txt)进行比较,最后就会生成一个Grade.txt文件来显示出哪些题做对了,哪些题做错了。
下图故意写错几道题以用于测试
在生成10000道题目时,不知什么原因,有时可以有时不行。
项目小结
本次作业最失败的点是我们没有充分地思考就开始了编程,以至于想出了如此繁琐的一种算法,虽然最终实现了目标,但是对我们能力的提升上并没有太大的帮助。在下一次的项目中我一定要多思考,没有思路的时候一定要上上网看看别人是如何做的,后来我们在编程到一半的时候才看到了一种叫逆波兰式的算法(逆波兰式算法),是使用栈来实现的,十分方便,省去了许多非必要的判断。可惜我们当时在弯路上走得太远了,没办法回头了,所以只能继续写下去。自己选的路,含着泪也要走下去。