投机的做法

 

https://github.com/Lucius3451/Simple-Arithmetic.git

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

60

· Estimate

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

500

500

Development

开发

450

450

· Analysis

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

100

100

· Design Spec

· 生成设计文档

0

0

· Design Review

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

0

0

· Coding Standard

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

0

0

· Design

· 具体设计

80

80

· Coding

· 具体编码

300

300

· Code Review

· 代码复审

30

30

· Test

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

100

100

Reporting

报告

10

6

· Test Report

· 测试报告

0

0

· Size Measurement

· 计算工作量

0

0

· Postmortem & Process Improvement Plan

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

0

0

合计

 

1600

1596

 

设计实现过程

这里就说下思路好了

理解了需求之后

核心就是制造算式和苏安出答案

一开始就有了所谓的传统正规做法的想发:

用栈装入随机的项数和运算符

计算答案时再利用栈变成逆波兰表达式

然后再用栈算出答案

这种做法的好处大概就是可以不被括号约束,另外就是生成的运算式没有上限

但我们想偷鸡:

先制造答案 再制造随机项数和随机运算符

       这样还可以自己写个字符串修改函数随便插入括号

不过等写完运行发现由于是先生成答案 会导致项数总会超过需求中的项数限制值

并且容易出现负数。 虽然可以会精力去修正概率和表达式,但这显然违背了初心

故决定放弃这种做法

(你可以在上面那个仓库上的old.cpp看到我的做法)

所以再次认真分析了需求,我们发现最多就4个项数的限制条件。我们将乘除当作A(优先级都为1),同理加减当作B,那么总共就用14中情况而已

从这里入手 不用传统做法也可以

至于复杂的括号情况 也因此在此变得简单,但我们没有去实现,因为这不是很重要了。

具体的可以看源码

类什么的不说, 个人认为比较重要的是自定义了struct 结构来应对分数等麻烦的细节 将自定义的数据类型再升级 代码可以更易读和高效

但我不想再在这个上再多耗费时间 不过倒是也算得到了教训吧

 

效能分析

       个人认为我们所采用的做法比传统做法肯定是要会花费少的,因为需求规定了运算规模就那么大,故自然是我们这种”一次性代码”的针对性更强 和 效率更高。

不过需要承认的是我们的做法是不可拓展的(随着运算符数目的增加,分类情况会指数式的增加)

      

 

测试运行

 投机的做法_第1张图片

程序正确我们不能保证, 虽然每段代码都看了两次以上,以及从有限次的运行来看已经修正完毕。因为这次项目是赶工出来的,自然无法对复杂的程序块进行全面剖析。

虽然封装的次数还没有最大化, 但也足够保证一定的正确性了。

其他图就不贴了(你可以从源码看见)

 

项目小结

首先是没有对时间进行合理的规划,另外从需求分析来全局出发真的很重要,

以及记录下曾经的想法也是必要的。做得不好的地方 还有代码的可维护性和注释基本没怎么写。虽然项目是勉强合格(在我看来),但我不会忘记这个项目给我的警示。

细致和勤快 是不能丢下的东西。

你可能感兴趣的:(投机的做法)