个人项目博客作业1

PSP2.1

Personal Software Process Stages

Time(预测/实际)

Planning

计划

 3天

  · Estimate

  · 估计这个任务需要多少时间

 3天

Development

开发

 

  · Analysis

  · 需求分析 (包括学习新技术)

 半天/半天

  · Design Spec

  · 生成设计文档

 2小时/1小时

  · Design Review

  · 设计复审 (和同事审核设计文档)

 null/null

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 1小时/1小时

  · Design

  · 具体设计

 3小时/2小时

  · Coding

  · 具体编码

 1天半/1天半

  · Code Review

  · 代码复审

 半天/半天

  · Test

  · 测试(自我测试,修改代码,提交修改)

 半天/一天

Reporting

报告

 

  · Test Report

  · 测试报告

null/1小时

  · Size Measurement

  · 计算工作量

 null/10分钟

  · Postmortem & Process Improvement Plan

  · 事后总结, 并提出过程改进计划

 null/半小时

 

合计

 

 

 

 

2.性能分析(...)

3.共享测试的10个样例

正确的格式举例:

(1)正确的格式举例1:-r 10 -n 10 或者 -n 10 -r 10 

(2)正确的格式举例2:-e 文件 -a 文件 或者 -a 文件 -e 文件  -e exercise.txt -a answer.txt

(3)-r 10 -n -10 int i=0;i<n;i++ 来遍历的,所以随着i增大再也无法满足条件了。加入一个输入判断即可解决这个问题

(4)参数输入错误:未按照规定的格式输入,程序会无法运行直到正确输入参数

(5)-n 100000 -r-10 超范围的算式数量,由于程序效率不是很高,所以程序会死,加入一个输入数判断语句后可以解决这个问题

(6)-e 空 -r 空 指定的路径没有文件,打开文件失败,程序无法继续运行

(7)exercises.txt (100道题)和answer.txt  (200道题)两个文件的题目数目不一样,由于是首先读exercises然后再堵answer,判断eof也是以exercises为基准的,所以answer比exercises多的话是没有问题的

(8)exercises.txt (200道题)和answer.txt  (100道题)根据(5)的原因,程序执行到100道题之前是完全没有问题的,当answer不够的时候,由于判断的条件所致,101到200判断条件都不满足,所以直接一路false到exercises的eof结束,结果是后100道题算wrong。

(9)-n 10000 -r 1 n输入大,r输入小  我的程序并没有计算给定r之后n的最大值,只是不断通过随机来尽量扩大生成算式的规模,但是1是无论如何生成不了10000个式子的,所以程序无法继续运行。

(10)-n 10000 -r 1000 虽然n很大,但是r的值很大,所以随机遍历的结果很多,可生成的算式很多,可以遍历完全

4.个人项目设计思路

首先先粘一下各个函数头和main(),函数命名都是很直接的,所以一眼就能看懂函数是干什么的

四则运算生成

  首先,先讲-n -r 的部分。输入参数-n -r 之后会调用createToFile,也就是将算式生成到文件当中。

 一开始的分析有多种考虑:

  (1)生成表达式的类型:后缀还是中缀呢,中缀可以直接输出,后缀便于计算

  (2)查重复算式的要求

  (3)运算过程中不能出现负数的要求

  (4)极限测试,给定r之后n的最大值

  一开始,比较偏向与生成中缀,因为既可以直接输出,中缀计算也不是很复杂,只要像往常的中缀转后缀算一下就可以了。接下来考虑(2)(3),查重的话,产生重复式子的原因主要有两个,括号改变计算顺序和+×的交换律

  ①中缀判断起来的话需要很麻烦,因为生成的过程中需要直接生成括号。但是后缀表达式就没有这个麻烦,后缀表达式没有括号,一旦表达式确定,计算顺序就确定了,这样就省去了括号的烦恼。

  ②交换律的问题,如果保证生成的时候只有一种的话就没有问题了,所以我的解决方法是决定生成的运算数是有大小顺序的,降序排列,这样就保证只有一种情况了,而且这样的话能够保证减法的过程中没有负数的产生,这样就同时保证了两个限制条件

  ③极限测试的要求,一开始我还想算出给定r的时候n的最大值,然后限制住,但是发现算起来有点麻烦,而且由于我①②的限制规则,我舍弃掉了好多算式,更无法保证最大值。而且计算的过程中发现,哪怕r很小的话,事实上n的限定值也可以很大的,因为可生成的算式实在是太多了。哪怕仅仅是3、4,可生成的算式也能够超过1万(我舍弃掉了好多,所以太小的满足不了了,但是r给10生成1万的话还是能够保证的)

 

  生成的细节就不叙述了,规则确定之后生成就不是很复杂了。

  生成之后需要计算,由于是支持分数的计算的,所以索性计算的过程中直接就先全部转化为分数计算,0的话也转换成0/1一起计算。分数计算的细节也不讲了,简单的很,加减就是先通分-计算-约分,乘除就直接乘除然后约分。

  计算之后需要print出来,所以还是要转成中缀表达式打印出来,后缀转中缀只需要用一点栈的知识就可以解决,括号也直接跟随着就生成了

 

  接下来,讲一下-e -a 的部分,有了前一部分的基础,这一部分就很简单了,只需要将exercises中的计算出来之后和answers中的逐个对比就可以了,然后生成grades。计算的过程就是中缀表达式的计算,数据结构就讲过,所以这一部分只是算出结果之后简单的对比即可。

5感受及收获

  1.首先,是第一次按照psp里面的顺序开发程序,虽然其中有的过程没有经历,表格中也填的是null,比如写规范的设计文档之类的暂时没有了,但是设计的过程还是很完整的,这样的过程对以后项目的开发是很有帮助的,而且这样的话,看似很繁琐,但是效率却比以往要高出许多。

  2.其次,就是这个程序本身了,刚开始留这个作业的时候,看起来很简单,但是写起来的过程中却发现了好多难题。后来和同学讨论的过程中也发现,由于设计思路不同,产生的难题也不太相同,比如说查重的问题,如果是直接生成中缀表达式的话,我想查重应该是很麻烦的(自己没写但是分析过),而我的程序由于直接生成的就是后缀,所以查重这一方面的好了许多。

  3,还有,第一次写c++额,虽然写的和c没有什么大区别,写的也只是面向过程的程序,但是了解到了好多c++的函数以及库,也就是了解了好多C++语言本身的特性之类的,而且由于有上学期oo的基础,所以我想再了解点C++的语法知识之后,写出“”真正的“c++应该不是很难的。而且现在c++ 的使用也相当广泛,所以掌握这门语言本身来说对我也是很有帮助的。

原文地址:https://www.cnblogs.com/fusluv/p/4830993.html