2017級面向對象程序設計寒假作業3
Deadline:2018.02.22 22:00 pm
題目描述基礎:一棟10層的大樓(樓層編號1-10),設有一臺無限載重的電梯,初始時電梯停在1層。電梯移動1層的耗時為1,在某一層停靠的耗時為1(時間初始為0)。為了使得乘客等待的時間(電梯在目的層的停靠時刻 - 乘客發出請求時刻)總和最小,請你編寫一個程序來進行電梯調度。
本次作業是在上一次的電梯調度的代碼上進行改善叠代,不僅加入新的功能,也對程序的輸入輸出提出了新的要求。
作業要求
一、 輸入從文件讀取,輸出是寫入文件。
大家在學習 C 語言的時候,應該明白了控制臺程序的輸入和輸出。但文件操作往往是之前的課程中被忽略的一個部分,大家有沒有試過“如果我要將程序的輸出保存下來”、“如果我要從一個文件中獲得輸入”這些實操的環節呢?如果沒有,現在是一個再好不過的學習機會,來吧,learning by doing!
要求:輸入輸出改成文件輸入輸出操作。輸入文件的文件名為 input.txt
裏面保存著輸入樣例,一個輸入為一行,輸入的格式見作業的第二條要求。
例如:
0 1 5
2 2 5
程序輸出每次對應的決策,每一行的輸出格式為 xx時,停靠在x樓
。輸出在文件名為output.txt
的文件中。
二、這次的乘客不再像上一次作業那樣只會去頂樓或者是 1 樓了,現在要使我們的程序功能更加貼近現實。
叠代:乘客會前往任意一層,請修改程序代碼並實現。自然,輸入請求就變為了:每個請求一行,格式為 請求時刻 起始樓層數 去往樓層
。同樣,大家也需要自己構造測試樣例,讓這臺“電梯”盡可能好的工作。構造五個輸入樣例,最後輸出完成五個請求(所有乘客都到達目的地)後,各乘客的等待時間總和。輸入輸出的詳細例子可以參加上一次作業的要求。
編程語言選擇C或C++都可以,但需要符合編碼規範,且必須要有註釋。編碼規範、註釋、git commit 信息,都可以上網搜索寫法,學會合理使用搜索引擎來學習是計算機專業學生的必經之路。
github使用教程參考:http://www.cnblogs.com/schaepher/p/5561193.html
博客內容
提交一篇新博客,內容可以包含如下的參考但不僅限於:
- 記錄文件讀寫的學習過程、學習心得。
- 編碼規範、註釋、git commit 信息的學習心得和體會。
- 編碼以及 debug 的過程、體會;程序的不斷優化過程;代碼行數、bug數、花費時間等數據。
- 本次作業的github鏈接,提交日誌截圖。(要在原來的倉庫中叠代)
- 自己設計的測試樣例,設計樣例的理由,為什麽通過這樣的樣例能說明電梯的可靠性等與樣例設計有關的話題。
- 程序運行結果的截圖等。
測試說明
測試機為Windows環境,所以提交到Github上的項目均需要建立一個名字為BIN的文件夾,裏面必須含有可執行文件(以exe為後綴),相關的依賴庫,以及輸入和輸出文件。請註意以下兩點:
- 確保可執行文件的文件名為 elevator.exe,確保輸入和輸出文件的文件名為input.txt和output.txt。(註意:輸入輸出文件都需要采用相對地址,也即
./output.txt
) - 一個示例組織目錄如下所示(僅為示例,命名、文件數量等未必需要遵守):
/ ElevatorProject(工程名字自行指定即可)
/ main.cpp
/ elevator.cpp
/ elevator.h
/ BIN
/ Lib.dll (exe運行需要的動態鏈接庫文件,可以沒有)
/ elevator.exe
/ input.txt
/ output.txt
你的程序必須可以在運行時讀取 input.txt
中的數據並生成 output.txt
。方便助教在測試時進行批量測試。
一點提示
以下思路來自於鄒欣老師:
電梯調度可以從下面兩個出發點簡化:
1)先實現一個 “公共汽車” bus mode, 電梯每個樓層都停,開門,上下乘客,關門,然後繼續
2) 再實現一個 “出租車” taxi mode, 電梯一旦接到一個乘客,就直接把乘客送到目的地,途中不再響應其他乘客的需求。
讓同學從這兩個極端調度模式出發, 計算它們運行的效率。 然後再做比較符合實際的調度算法。
無法想出更優解的同學可以實現這兩個簡單思路,在博客中貼出自己的程序的構建,優化和思考過程,也算完成作業,但如果只完成最簡單的思路沒有繼續優化的話會酌情扣分。
本次作業代碼及隨筆作業皆不得抄襲。遲交5天內扣5分,不交0分,抄襲倒扣20分。
由於助教、老師精力有限,手動復制粘貼大家的博客鏈接、github主頁、項目地址,一個個幫大家編譯代碼肯定是不現實的,所以要規定各種格式(比如在博客下面回復自己的鏈接、第三次作業的文件目錄格式等),然後交給爬蟲來完成自動化測試,再由助教核對一遍數據確保無誤。不註意格式,或者忘了填上鏈接,你可能不是故意的,而是無心之舉,但這無疑要加大助教的工作量。這一次作業的文件目錄層次、文件名稱的命名務必請大家細心認真,若有錯誤的會酌情扣分。溫馨提示:在下學期結束前盡量不要更改github用戶名,因為已經爬取了大家的github主頁地址。
2017級面向對象程序設計寒假作業3