2015个人项目——四则运算题目生成程序

2015个人项目——四则运算题目生成程序

性能测试

生成表达式

首先我们来看一组图:

812270-20150922214145412-1697426372.jpg
812270-20150922214209131-1427343050.jpg
生成500算式

812270-20150922214222115-873704382.jpg
812270-20150922214230240-655061587.jpg
生成1000算式

812270-20150922214238490-1177905522.jpg
812270-20150922214248037-536880904.jpg
生成3000算式

812270-20150922214444131-1174127182.jpg
812270-20150922214453053-1922251239.jpg
生成6000算式

812270-20150922214506365-1669093645.jpg
812270-20150922214517334-1654038032.jpg
生成10000算式

由这一组图可以明显的看出,我的程序主要用时点是calc()、find()这两个函数,其实原因很简单:

生成运算表达式是完全随机的方式,而且是用标准文法的方式生成,所以运算式很容易产生,因而占用时间不是很多;

calc是对运算式进行运算,运算时有用到迭代,有用到多次判断,很复杂,所以会花费很多时间;

find是查找函数,为了查重,会不断对先前产生的运算式进行查重,这个运算量是(1+2+……+n)=n(n+1)/2,所以会随着算式量的增加而快速上升。

答案中的对错并进行数量统计

我们仍然看一组图片:
812270-20150922221147365-396420462.jpg
812270-20150922221155756-126346196.jpg
检查1000算式

812270-20150922220857319-1308887693.jpg
812270-20150922220907881-753503994.jpg
检查6000算式

812270-20150922221406647-8706234.jpg
812270-20150922221414490-1413211382.jpg
检查10000算式

由这一组图可以明显的看出,我的程序主要用时点是calc()、getline()这两个函数,其实原因很简单:

calc是对运算式进行运算,运算时有用到迭代,有用到多次判断,很复杂,所以会花费很多时间;
getline是每个循环中必然会出现的函数,当算式多了,循环量级也会增加,所以花费时间也会增加。但这间接说明程序运算速度很快。

测试样例

1.测试速度,是否能生成超过10000的题,表示形式是否正确,是否出现超过3个运算符的算式

(1)输入:Myapp.exe -n 10000 -r 10
测试:看Exercises.txt, Answers.txt是否有10000项;看Exercise.txt中算式是否符合要求;看Answers.txt是否正确形式的答案

(2)输入:Myapp.exe -e Exercises.txt -a Answers.txt
测试:看Grade.txt的Correct项是否包含所有的序号,Wrong项包含的0个序号

2.测试-n的参数小于等于0,或者-r的参数小于等于0的特殊情况

(1)输入:Myapp.exe -n 0 -r 10
输出:“command is not correct!”

(2)输入:Myapp.exe -n -5 -r 10
输出:“command is not correct!”

(3)输入:Myapp.exe -n 10 -r 0
输出:“command is not correct!”

(4)输入:Myapp.exe -n 10 -r -5
输出:“command is not correct!”

3.测试是否产生相同的题目,是否有运算式中间产生负数,测试-n,-r调换顺序的情况

(1)输入:Myapp.exe -n 100 -r 10
测试:看这100个运算式是否存在相同的题目,当然也要看中间是否产生了负数的算式

(2)输入:Myapp.exe -r 10 -n 100
测试:首先看这是否能生成符合形式的算式和答案,再看这100个运算式是否存在相同的题目,当然也要看中间是否产生了负数的算式

4.测试是否能够正确地判断答案是否正确。

(1)对于评测的输入问题,我们要求的是输入的题目和答案都是从1开始顺序编号的,不能缺也不能多;否则,请提示输入有错误。

(2)由于我们的题目都是按规范生成的,为简单起见,可以认为输入的题目都是按照顺序编号的符合规范的题目。

(3)(但是答案缺少的话请报错并给出提示。)我把这一条忽略,如果缺少的话就算它是错的。

(4)所有题号必须是按照顺序递增的,而且题数一致。

为了比较这个,我把总共10个算式的正确答案中的部分改错,删掉其中一个答案(题号不删除),最后得到的答案符合要求。

5.为了符合题目要求,我需要测试cmd数据不对的情况。

(1)输入:Myapp.exe -n 10
输出:“command is not correct!”

(2)输入:Myapp.exe -n 10 -e Exercises.txt
输出:“command is not correct!”

6.测试超大数据。

(1)输入:Myapp.exe -n 100000 -r 15
输出:能正常产生,但是时间确实非常大259.234s

(2) 输入:Myapp.exe -n 100 -r 50
输出:虽然能正常产生,答案也是对的,但是我的算法无法保证对大型的数值进行运算都能生成正确数值,所以最终可能会导致越界的后果。

6.测试超小数据。

(1)输入:Myapp.exe -n 100 -r 3
输出:r limit is too tight

(2) 输入:Myapp.exe -n 5 -r 2
输出:r limit is too tight,这是我的算法无法保证的,由于运算式是完全随机化的产生,所以很有可能会产生相同算式,虽然对此有一定的次数限制,但是无法完全去掉这种不符合的情况。这里面其实是是可以得到5个算式的,但是我的随机化让过程变得无迹可寻,最终得不到理想的结果。

8.测试是否是真分数结果

(1)输入:Myapp.exe -n 100 -r 10
输出:得到正确的结果,而且能够完整的正确的表示出所有的值。

(2)输入:Myapp.exe -n 10 -r 4
输出:得到正确的结果,而且能够完整的正确的表示出所有的值。

9.测试测试-r,-n调换顺序的情况

(1)输入:Myapp.exe -a Answers.txt -e Exercises.txt
测试:看Grade.txt的Correct项是否包含所有的序号,Wrong项包含的0个序号

(2)非规范的测试文件也有输入,最后结果符合

10.测试每个算式的正确性,测试每个答案的正确性

这是一个十分繁杂的工作,在多个样例中不断查找;从同学那儿要不同的数据;自己拼凑出无法满足的数据等等。最终可以得到令人满意的答案。

转载于:https://www.cnblogs.com/DarkNightEye/p/4830784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值