理想太丰满,显示太骨干java
PSP2.1算法 |
Personal Software Process Stages函数 |
Time性能 |
Planning学习 |
计划测试 |
|
· Estimate编码 |
· 估计这个任务须要多少时间spa |
15h设计 |
Development代码规范 |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
2h |
· Design Spec |
· 生成设计文档 |
2h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
3h |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1h |
· Design |
· 具体设计 |
0.5h |
· Coding |
· 具体编码 |
10h |
· Code Review |
· 代码复审 |
2h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
5h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
1h |
· Size Measurement |
· 计算工做量 |
0.5h |
· Postmortem & Process Improvement Plan |
· 过后总结, 并提出过程改进计划 |
0.5h |
合计 |
27.5h |
此次的题目实际上是两个程序(很不能理解这么作的目的。。。。),一个任务是:本身生成四则运算表达式,本身运算出答案,另外一个任务是:根据所给的题目文件及答案文件,判断正误。
最初我认为第一个任务是比较简单的,由于当时以为比较运算符之间的优先级是比较麻烦的, 要先转化成后缀,再进行计算,一直想避免这个问题,最终仍是没绕过。第一个任务中,思路主要
是:在生成一个算式以前,先生成一个随机数,来判断这个算式中将要有几个运算符,而整数与分数的生成也是靠一个随机数决定的,很重要的一点是整数也当作分数(整数/1)进行运算。而后再
每次的循环中,随机生成一个数字与运算符,并利用运算符进行决定是否添加括号(随机数真的是一个很神奇的东西),这些都生成之后,就要调用deal()函数判断子式是否为负(小学生不懂
负数。。。),并以此决定是否舍弃本次生成的数字和运算符;
在一个式子生成之后,重头戏来了,查重!!我想了不少的方法,但对于个人程序来讲,操做起来都比较困难,最终,我选择了一个很“贱”的方法,直接比较答案,每生成一个式子,就令它的答
案与以前全部的式子的答案进行比较,若是发现相等,那么很差意思,本次生成的式子就能够滚蛋了,直接舍去!我试验了一下,生成100道题目时,查重答案的操做会多生成20道题;生成1000道
时,会多生成将近300道;但生成10000道题目时,会多生成将近7000道!!咳咳,这不是重点,重点是没有重复的题目了(我也以为这个效率有点低),而后就OK了。
第二个任务相对于第一个来讲,就是至关之简单了,只要扫描题目文件,并套用第一个任务里的函数就能够实现了。
这是在测试—r 10 -n 1000的命令时,所生成的图,在to_string上花了较长的时间,在提高程序的性能中,也想了不少的方法,但最终都没有很大程度的提升,只在部分
函数中提升了一点性能,没办法。。。。
这是测试-e 1.txt -a 2.txt 命令时,生成的图
在程序生成的过程当中,也发现了几个重要的问题(对于我而言):
1.分数运算的问题
因为程序涉及到分数的问题,因此在计算中,会出现通分,约分之类的问题;
2.存储数据的问题
因为int有范围,在运算过程当中可能出现超过int型范围的数字;
3.substr()函数
substr()函数在C++中与java中,是有差异的(这一个点坑死我了),substr(int 1,int 2) 2代表的含义是:要截取的字符串的长度,并非java中的字符位置;
4.strtok()函数
这个函数相似于java中的spilt(),char *strtok(char s[], const char *delim);
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
1. 测试-r x1 - n x2 命令时:
x1不能大于100,虽然程序亲测1000之内的也能够生成,可是时间太长,不算!
2. SIZEYUNSUAN.exe -n 10000 -r 100
//生成10000个式子,范围是100之内
3. SIZEYUNSUAN.exe -e exercise.txt -a answer.txt
//校验两个文件里面的答案,生成结果在Grade.txt
4. SIZEYUNSUAN.exe -n 10
//提示需输入正确并完整的参数
5. SIZEYUNSUAN.exe -r 10
//提示需输入正确并完整的参数
6. SIZEYUNSUAN.exe -e exercise.txt
//提示需输入正确并完整的参数
7. SIZEYUNSUAN.exe -a answer.txt
//提示需输入正确并完整的参数
8. SIZEYUNSUAN.exe -n 10001 -r 100
//提示需输入正确的题目个数
9. SIZEYUNSUAN.exe -n 1000 -r -1
//提示需输入正确的数的范围
10. SIZEYUNSUAN.exe -e 1.txt -a answer.txt
//提示文件1.txt不存在
11. SIZEYUNSUAN.exe -e exercise.txt -a 2.txt
//提示文件2.txt不存在
SIZEYUNSUAN.exe -n 10000 -r 100 -e exercise1.txt -a answer1.txt
//生成题目并完成校验,两个功能依次完成
理想很丰满,现实很骨干,我第一次看到题目的时候,虽以为有点麻烦,但仍是以为比较容易写的,就用了一个下午的时间写完了整个程序,而后发现。。。。。。和要求差
的有点多,在推倒重写和维持之前的思路这两者之间挣扎了好久,最终仍是“屈服”了——重写!
虽然说“历经艰难”,但仍是完成了,以为仍是学到了不少,没有deadline的逼迫,是不会在这么短的时间里写出来的。