理想太豐滿,顯示太骨幹java
PSP2.1算法 |
Personal Software Process Stages函數 |
Time性能 |
Planning學習 |
計劃測試 |
|
· Estimate編碼 |
· 估計這個任務須要多少時間spa |
15h設計 |
Development代碼規範 |
開發 |
|
· Analysis |
· 需求分析 (包括學習新技術) |
2h |
· Design Spec |
· 生成設計文檔 |
2h |
· Design Review |
· 設計複審 (和同事審覈設計文檔) |
3h |
· Coding Standard |
· 代碼規範 (爲目前的開發制定合適的規範) |
1h |
· Design |
· 具體設計 |
0.5h |
· Coding |
· 具體編碼 |
10h |
· Code Review |
· 代碼複審 |
2h |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
5h |
Reporting |
報告 |
|
· Test Report |
· 測試報告 |
1h |
· Size Measurement |
· 計算工做量 |
0.5h |
· Postmortem & Process Improvement Plan |
· 過後總結, 並提出過程改進計劃 |
0.5h |
合計 |
27.5h |
此次的題目實際上是兩個程序(很不能理解這麼作的目的。。。。),一個任務是:本身生成四則運算表達式,本身運算出答案,另外一個任務是:根據所給的題目文件及答案文件,判斷正誤。
最初我認爲第一個任務是比較簡單的,由於當時以爲比較運算符之間的優先級是比較麻煩的, 要先轉化成後綴,再進行計算,一直想避免這個問題,最終仍是沒繞過。第一個任務中,思路主要
是:在生成一個算式以前,先生成一個隨機數,來判斷這個算式中將要有幾個運算符,而整數與分數的生成也是靠一個隨機數決定的,很重要的一點是整數也當作分數(整數/1)進行運算。而後再
每次的循環中,隨機生成一個數字與運算符,並利用運算符進行決定是否添加括號(隨機數真的是一個很神奇的東西),這些都生成之後,就要調用deal()函數判斷子式是否爲負(小學生不懂
負數。。。),並以此決定是否捨棄本次生成的數字和運算符;
在一個式子生成之後,重頭戲來了,查重!!我想了不少的方法,但對於個人程序來講,操做起來都比較困難,最終,我選擇了一個很「賤」的方法,直接比較答案,每生成一個式子,就令它的答
案與以前全部的式子的答案進行比較,若是發現相等,那麼很差意思,本次生成的式子就能夠滾蛋了,直接捨去!我試驗了一下,生成100道題目時,查重答案的操做會多生成20道題;生成1000道
時,會多生成將近300道;但生成10000道題目時,會多生成將近7000道!!咳咳,這不是重點,重點是沒有重複的題目了(我也以爲這個效率有點低),而後就OK了。
第二個任務相對於第一個來講,就是至關之簡單了,只要掃描題目文件,並套用第一個任務裏的函數就能夠實現了。
這是在測試—r 10 -n 1000的命令時,所生成的圖,在to_string上花了較長的時間,在提高程序的性能中,也想了不少的方法,但最終都沒有很大程度的提升,只在部分
函數中提升了一點性能,沒辦法。。。。
這是測試-e 1.txt -a 2.txt 命令時,生成的圖
在程序生成的過程當中,也發現了幾個重要的問題(對於我而言):
1.分數運算的問題
因爲程序涉及到分數的問題,因此在計算中,會出現通分,約分之類的問題;
2.存儲數據的問題
因爲int有範圍,在運算過程當中可能出現超過int型範圍的數字;
3.substr()函數
substr()函數在C++中與java中,是有差異的(這一個點坑死我了),substr(int 1,int 2) 2代表的含義是:要截取的字符串的長度,並非java中的字符位置;
4.strtok()函數
這個函數相似於java中的spilt(),char *strtok(char s[], const char *delim);
分解字符串爲一組字符串。s爲要分解的字符串,delim爲分隔符字符串。
1. 測試-r x1 - n x2 命令時:
x1不能大於100,雖然程序親測1000之內的也能夠生成,可是時間太長,不算!
2. SIZEYUNSUAN.exe -n 10000 -r 100
//生成10000個式子,範圍是100之內
3. SIZEYUNSUAN.exe -e exercise.txt -a answer.txt
//校驗兩個文件裏面的答案,生成結果在Grade.txt
4. SIZEYUNSUAN.exe -n 10
//提示需輸入正確並完整的參數
5. SIZEYUNSUAN.exe -r 10
//提示需輸入正確並完整的參數
6. SIZEYUNSUAN.exe -e exercise.txt
//提示需輸入正確並完整的參數
7. SIZEYUNSUAN.exe -a answer.txt
//提示需輸入正確並完整的參數
8. SIZEYUNSUAN.exe -n 10001 -r 100
//提示需輸入正確的題目個數
9. SIZEYUNSUAN.exe -n 1000 -r -1
//提示需輸入正確的數的範圍
10. SIZEYUNSUAN.exe -e 1.txt -a answer.txt
//提示文件1.txt不存在
11. SIZEYUNSUAN.exe -e exercise.txt -a 2.txt
//提示文件2.txt不存在
SIZEYUNSUAN.exe -n 10000 -r 100 -e exercise1.txt -a answer1.txt
//生成題目並完成校驗,兩個功能依次完成
理想很豐滿,現實很骨幹,我第一次看到題目的時候,雖以爲有點麻煩,但仍是以爲比較容易寫的,就用了一個下午的時間寫完了整個程序,而後發現。。。。。。和要求差
的有點多,在推倒重寫和維持之前的思路這兩者之間掙扎了好久,最終仍是「屈服」了——重寫!
雖然說「歷經艱難」,但仍是完成了,以爲仍是學到了不少,沒有deadline的逼迫,是不會在這麼短的時間裏寫出來的。