1. 思考程式的處理方式與步驟
上課中講解範例,自問題、程式碼到執行結果都一覽無遺,如此確實能夠增進語法的熟悉,但還有更重要的,是「如何處理輸入資訊」,才能解決問題。課堂中缺少思考的過程,不應該直接公布程式答案,將思維局限於框架中。是否應該讓同樣的問題,鼓勵每個人創造不同的方式解決,殊途同歸也更靈活呢?
2. 輸入範圍的設定與測試資料的完備性
不論是例題或課後作業,總是缺少「輸入」範圍。在生活中,飛機有設定運輸載客量,電梯有設定最大乘載人數,電器有設定額定輸入電壓範圍。在程式設計中,考量輸入狀態相當重要,給定正常範圍是必要條件。以下列程式為例:
請輸入a、b兩數字,輸出為a*b
這乍看之下是個完整的題目,但實際上,要求
-1000<a<1000;
-1000<b<1000;
-1000000<a*b<1000000
與
-100000000000<a<100000000000;
- 100000000000<b<100000000000;
-1000000000000000<a*b<1000000000000000
或要求a與b皆為小數,a*b需計算至小數點後10位
有極大不同。當輸入範圍愈大、愈廣,考慮因素便愈複雜。
另外,應提供數筆測試資料,以供檢驗程式正確性;當題目狀態多元時,經由比對測試資料及程式輸出,可驗證設計可行性。讓我們來看看網站「高中生程式解題系統」 中的一個題目-因數分解:
----------------------------------------------------------------------------------------
內容 :
各位在國小時都學過因數分解,都瞭解怎麼樣用紙筆計算出結果,現在由你來敎電腦做因數分解。
因數分解就是把一個數字,切分為數個質數的乘積,如 12=2^2 * 3
其中, 次方的符號以 ^ 來表示
輸入說明 :
一個整數, 大於1 且 小於等於 1000000
輸出說明 :
一個字串
範例輸入 :
20
17
999997
範例輸出 :
2^2 * 5
17
757 * 1321
----------------------------------------------------------------------------------------
輸入說明、輸出說明、範例輸入、範例輸出是不是很清楚呢?
3. 評估執行時間、記憶體用量
為了比較程式的性能,除了結果正確;更應該以執行時間愈短、記憶體用量愈小為目標,提升軟體效能。
沒有留言:
張貼留言