项目 | 内容 |
---|---|
这个作业属于哪个课程 | 班级博客 |
这个作业的要求在哪里 | 作业要求 |
我在这个课程的目标是 | 学好并应用好软件工程 |
这个作业在哪个具体方面帮助我实现目标 | 学习个人软件开发流程 |
作业正文 | 如下 |
github地址:https://github.com/pyb19991125/Experiment.git
解题思路描述
拿到题目后,以为是求在一定范围内的交点个数,采用分治的思想,随机挑选一条直线将平面分开,将所有直线分为左边的直线(未与这条直线相交)、右边的直线(未与这条直线相交)、中间的直线(与这条直线相交),然后分别递归调用左边和右边,再计算中间直线分别和左右直线相交的交点个数,加上中间直线自己相交的交点个数。
后来发现题目看错了,因为时间原因,直接采用两两搜索的方法,每两条不平行的直线算出交点,最后将这些交点去重,输出交点个数。
设计实现过程
代码包括三个主要函数:
两个结构体:
input_and_deal函数读取输入文件内容,将直线变为Ax+By+C=0(使用y=kx+b可能会导致斜率无穷大);
add_point函数:每两条直线相比较,如果不平行,计算出交点坐标,放入向量中;
point_number函数:将相同的交点去重,因为是double类型,使用abs(x1-x2)<eps进行高精度的比较;
三个函数顺序执行;
单元测试测试这三个主要函数和求两个数最大公因数的函数,测试中间结果和最终结果:
(没有设计对边界的用例,只考虑了一般情况下的测试,测试不够细致)
单独测试求两个数最大公因数的函数
设计一些用例测试中间结果和最终结果
改进的思路
性能分析图:
在改进程序性能上花费时间30分钟;
最大消耗函数为point_number()函数,计算不同交点个数;改进思路,求不同交点个数先快排后去重。
代码说明
通过公式求A,B,C;
这段代码用于求不平行直线的交点坐标,因为有可能A或B等于0,需要分别讨论;
比较交点坐标,记录不同的交点个数。
时间记录
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 2 | |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 200 | 150 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | ||
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | · 具体设计 | 100 | 400 |
· Coding | · 具体编码 | 200 | 300 |
· Code Review | · 代码复审 | 100 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 100 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 842 | 1160 |
因为看错了需求,以为交点必须在范围内才算,重新设计,写代码,所以和预估的时间差别很大。
经过 Code Quality Analysis 工具的分析