項目 | 内容 |
---|---|
這個作業屬于哪個課程 | 班級部落格 |
這個作業的要求在哪裡 | 作業要求 |
我在這個課程的目标是 | 學好并應用好軟體工程 |
這個作業在哪個具體方面幫助我實作目标 | 學習個人軟體開發流程 |
作業正文 | 如下 |
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 | |
· Estimate | · 估計這個任務需要多少時間 | 2 | |
Development | 開發 | ||
· Analysis | · 需求分析 (包括學習新技術) | 200 | 150 |
· Design Spec | · 生成設計文檔 | 20 | |
· Design Review | · 設計複審 (和同僚稽核設計文檔) | ||
· Coding Standard | · 代碼規範 (為目前的開發制定合适的規範) | ||
· Design | · 具體設計 | 100 | 400 |
· Coding | · 具體編碼 | 300 | |
· Code Review | · 代碼複審 | 60 | |
· Test | · 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 | ||
· Test Report | · 測試報告 | ||
· Size Measurement | · 計算工作量 | ||
· Postmortem & Process Improvement Plan | · 事後總結, 并提出過程改進計劃 | ||
合計 | 842 | 1160 |
因為看錯了需求,以為交點必須在範圍内才算,重新設計,寫代碼,是以和預估的時間差别很大。