現代程序設計 作業9 - 綜合練習

經過大半學期的學習和練習, 我們把學到的東西綜合起來。

在作業2 (http://www.cnblogs.com/xinz/p/3318230.html ) 中, 同學們用各種方法 (主要是動態規劃,外加一些遍歷)計算了一維和二維數組中最小最大子數組的和。 當然,程序在飛快地運行的時候,我們可以通過debug 工具中的 單步執行 命令看到中間結果。 中間結果一般有這些數據:

這個數組目前暫定的最大子數組的範圍是哪裏?  目前的值是多少?

目前計算到哪些部分, 目前的牽涉到的子數組的和是多少?

我們的要求是,設計並實現一個系統,讓一個普通用戶就能通過單步執行的方式看到你的算法是如何工作的。 一個典型的流程是:

1. 用戶用你的程序讀入一個數組文件 (就像我們以前做過的那樣),顯示初始狀態 (就像圍棋打譜程序那樣)

1.1. 用戶也可以自行定義數組的大小,或者要求隨機生成一個數字矩陣。

2. 用戶這時候有兩個選擇

2.1  按 單步執行 鍵, 在 GUI 看到你的程序是如何一步一步算出目前最大子數組的範圍,當前計算到的臨時子數組是在哪裏,等等。 最好用不同的顏色標識不同的狀態。

2.2  按 自動運行 鍵, 在 GUI 看到程序自動運行,並自動顯示過程, 每次改變狀態的時候要稍作停留 (例如 1 秒鐘的時間)

3. 咳,我沒看清楚!  這時最好有一個 倒帶 / 回滾 的鍵, 讓用戶可以看清楚關鍵的幾步。

(當然,用戶可以選擇是普通模式還是擴展定義的連通模式)

 

要求: 這個要求的各個方面我們都已經單獨寫代碼試驗過了,把它們合起來也不是太難。  要求還那樣: 寫程序和單元測試,簽入GitHub,寫博客描述,總結所花費的時間和估計。

評分:

功能 (分數範圍 –30 到 30分):  在PC 桌面上運行  (滿分 20 分); 如果能在程序能直接在網上顯示 (例如使用 Javascript 在網頁上讓用戶直接看到過程),則滿分是 30 分。

代碼質量 (分數範圍:  -30 分到 30 分):  同學們在課程中已經看了很多書,實踐了不少原理,也看過爛的代碼 (很多同學還大義凜然地鄙視過爛代碼),並且紛紛表示要寫高效/好懂/可擴展的算法。現在就來試試看,請寫博客,截圖,畫圖描述:

    註釋,命名: 有一致規範的規範,合適的註釋  

    結構: 結構清晰,各種類/結構的定義 正確地反映了現實世界實體,以及實體之間的關係.

    單元測試: 有單元測試保證 非UI 模塊的正確性  (UI 模塊不要求單元測試自動覆蓋),有代碼覆蓋率。

(注:  以上的各個部分,達不到基本要求的,倒扣分,扣到 –30 分爲止。 抄襲按學校規定處理)

 

附加題:  你已經做了這麼多,不妨再進一步: 如果博客中描述了動態規劃的原理,並通過錄製屏幕的方式讓一般的讀者 (例如,正在學習算法的大學生)能通過你的動態程序理解動態規劃的算法,以及這個算法的擴展,那麼可以得到附加分  10 分。你可以宣傳你的博客,讓大家都來學習


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章