现代程序设计 作业 2
我們上節(jié)課講了 返回整數(shù)數(shù)組中最大子數(shù)組的和 這個問題。 我們第二次作業(yè)在這個基礎(chǔ)上擴(kuò)展。
程序要使用的數(shù)組放在一個叫 input.txt 的文件中,? 文件格式是:
數(shù)組的行數(shù),
數(shù)組的列數(shù),
每一行的元素,? (用逗號分開)
每一個數(shù)字都是有符號32位整數(shù), 見 MSDN 的定義.? 當(dāng)然, 行數(shù)和列數(shù)都是正整數(shù)。
例如下面的文件說明數(shù)組是有1行, 6列, 元素依次是:? 5, 6, –3, 8, –9, 2
?
用你選擇的語言 (C, C#, C++, Java) 在Windows 系統(tǒng)下實現(xiàn)下面的功能, 并作單元測試和統(tǒng)計測試覆蓋率。 建議用VS2012, 如果你有其它的工具可以達(dá)到同樣的效果, 歡迎使用。
?
1) 絕大部分同學(xué)都已經(jīng)做出來了單維數(shù)組的 求數(shù)組中最大子數(shù)組的和, 但是你不妨試一試:
把你的程序編譯為可執(zhí)行文件, 然后執(zhí)行 例如? maxsum.exe? <file name>
輸出就是最大子數(shù)組的和, 上面的例子就應(yīng)該輸出 16.
?
如果輸入的數(shù)組很大,? 并且有很多大的數(shù)字,? 就會產(chǎn)生比較大的結(jié)果 (考慮一下數(shù)的溢出), 請保證你的程序能正常輸出。
另外, 如果輸入文件的參數(shù)有錯誤, 這個程序應(yīng)該能正常退出, 并顯示相應(yīng)的錯誤信息。 任何輸入錯誤都不能導(dǎo)致你的程序崩潰 (對的,? TA 會模擬一些有錯誤的文件來檢查)。
?
2) 如果上面的問題解決了,? 那我們就順利地進(jìn)入第二個階段 - 處理二維數(shù)組.?? 在這個階段, 我們要求二維數(shù)組的子數(shù)組必須是矩形的
??
maxsum.exe? <file name>
會返回 28
這是一個比較大的數(shù)組的例子:
?
3) 如果 “子數(shù)組” 并不要求是一個矩形, 而是聯(lián)通的元素即可 (上下或左右相鄰即視為聯(lián)通),? 那解法會是怎么樣呢?
上面文件的正解就是:
(圖 3-1,一個簡單的例子)
請實現(xiàn)這一算法, 命令行要加一個參數(shù), 表示這一特殊要求:
maxsum.exe? /a <file name>
輸出是: 50
注: 考慮到同學(xué)們的反饋, 在這一問中, 可以假設(shè)數(shù)組的長度和寬度不大于 32.? 同時,在和同學(xué)們的討論中,我們列舉了幾種較有意思的形狀,見下。
(圖3-2,兩個大正數(shù) (50)通過它們之間的最小權(quán)值路徑相連)????
? (圖 3-3,子連通圖中有環(huán))
(圖 3-4,和是135,是三個大正數(shù)通過公共的最小權(quán)值聯(lián)通路徑相連)
(圖3-5,和圖3-4 一樣,但是此圖的解法是通過兩兩大正數(shù)之間的最小連通圖得到。它們的和是 134,不是最佳)
?
4) 在步驟 2) 的基礎(chǔ)上, 我們還可以做另一個擴(kuò)展, 假設(shè)數(shù)組的一頭一尾在水平方向上是首尾相連的。 我們用 /h 表示它在水平方向上相連。 如果在垂直方向上相連可以么?? 當(dāng)然可以, 我們用 /v 表示它在垂直方向相連。 這樣, 我們有:
maxsum.exe? /h <file name>
maxsum.exe? /v <file name>
?
5) 那么, 可以同時 /h? /v 么?? 我想是可以的。 這個矩陣會成一個什么樣呢?? 是球形, 還是…?
?
啊, 是個輪胎, 可能還是備胎!
maxsum.exe? /v /h <file name>
會輸出什么呢?
當(dāng)然, 我們還有: maxsum.exe? /v /h /a <file name>
6) 哇, 還有第六步? 仿佛聽到同學(xué)們叫苦連天…?? 那就算了, 以后再說 ?
?
要求還是老一套:
a) 代碼都簽入你的 GitHub,? TA 用你的代碼編譯并運行他們的測試用例,? 來驗證你的程序的正確性。
b) 博客
描述在這么多相似的需求面前, 你怎么維護(hù)你的設(shè)計 (父類/子類/基類, UML, 設(shè)計模式,? 或者其它方法) 讓整個程序的架構(gòu)不至于崩潰的?
給出你做單元測試/代碼覆蓋率的最終覆蓋率的報告, 用截屏顯示你的代碼覆蓋率
閱讀 工程師的能力評估和發(fā)展 和相關(guān)文章, 在完成作業(yè)的時候記錄自己花費的時間, 并填下表。如果你對有些術(shù)語不太清楚,請查看教材和其它資料。如果你認(rèn)為你不需要做某個步驟, 那就跳過去。?
你在這個作業(yè)中學(xué)到了什么?? 有什么好的設(shè)計值得分享?? 感想如何 (太容易 / 太難 / 太無趣)?
?
?
| ? | Personal Software Process Stages | 時間百分比(%) | 實際花費的時間 (分鐘) | 原來估計的時間 (分鐘) |
| Planning | 計劃 | ? | ? | ? |
| ·???????? Estimate | ·???????? 估計這個任務(wù)需要多少時間,把工作細(xì)化并大致排序 | ? | ? | ? |
| Development | 開發(fā) | ? | ? | ? |
| ·???????? Analysis | ·???????? 需求分析 (包括學(xué)習(xí)新技術(shù)) | ? | ? | ? |
| ·???????? Design Spec | ·???????? 生成設(shè)計文檔 | ? | ? | ? |
| ·???????? Design Review | ·???????? 設(shè)計復(fù)審 (和同事審核設(shè)計文檔) | ? | ? | ? |
| ·???????? Coding Standard | ·???????? 代碼規(guī)范 (制定合適的規(guī)范) | ? | ? | ? |
| ·???????? Design | ·???????? 具體設(shè)計 | ? | ? | ? |
| ·???????? Coding | ·???????? 具體編碼 | ? | ? | ? |
| ·???????? Code Review | ·???????? 代碼復(fù)審 | ? | ? | ? |
| ·???????? Test | ·???????? 測試(自我測試,修改代碼,提交修改) | ? | ? | ? |
| Reporting | 總結(jié)報告 | ? | ? | ? |
| ·???????? Test Report | ·???????? 測試報告 | ? | ? | ? |
| ·???????? Size Measurement | ·???????? 計算工作量 | ? | ? | ? |
| ·???????? Postmortem & Improvement Plan | ·???????? 事后總結(jié), 并提出改進(jìn) | ? | ? | ? |
| Total | 總計 | 100% | 總用時 | 總估計的用時 |
總結(jié)
以上是生活随笔為你收集整理的现代程序设计 作业 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代软件工程 - 代码量等于树叶量
- 下一篇: 现代软件工程 作业 最后一周总结