• 个人项目博客作业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++ 的使用也相当广泛,所以掌握这门语言本身来说对我也是很有帮助的。

  • 相关阅读:
    Spring Tool Suite 配置和使用
    自动提示在线/离线状态
    Excel数据导入数据库的SQL快速生成
    MySQL查询和删除重复数据
    内存不足时,调用ajax报的错
    订单支付成功后存储过程
    下订单存储过程
    课程表,订单表(统计报名人数),评论表(统计评论的人数),点赞表(点赞人数)
    更改浏览器的滚动条样式
    自定义文本选中样式
  • 原文地址:https://www.cnblogs.com/fusluv/p/4830993.html
Copyright © 2020-2023  润新知