#include <cstdlib> #include <ctime>
cstdlib 與 ctime 都以 c 開頭,代表這兩個是由 C 語言而來的程式庫 (library) ,引入後就可值皆使用裡頭的函數。
setcArray() 也要修改
void Encrypt::setcArray() { srand(time(0)); int a = 0; int b = 0; a = rand() % 10; b = rand() % 10; int x, y, m; char r; char c = 'a'; string s; int i; for (i = 0; i < N; i++) { x = c; y = x * a + b; m = y % N; s += (char) m + DIFF; c++; } cArray = s; }
接著來編譯測試看看囉
嗯,結果看起來有些奇怪,居然有都是 j 的密碼表,最後一次執行也發生錯誤情況,這會是什麼問題呢?經過後續測試,我們發現問題主要發生在 a 為偶數的時候,因此 setcArray() 需要再一次修改
void Encrypt::setcArray() { srand(time(0)); int a = 0; int b = 0; while (a % 2 == 0) { a = rand() % 10; b = rand() % 10; } int x, y, m; char r; char c = 'a'; string s; int i; for (i = 0; i < N; i++) { x = c; y = x * a + b; m = y % N; s += (char) m + DIFF; c++; } cArray = s; }
這個後續測試是印出 a 與 b 的值,然後找出發生問題的情況。
這樣一來, a 就不會是偶數了
密碼表沒問題了,接下來我們開始實作 toEncode() ,也就是編碼功能的函數。
中英文術語對照 | |
---|---|
函數 | function |
參數 | parameter |
程式庫 | library |
您可以繼續參考
軟體開發
相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁
參考資料
http://www.cplusplus.com/doc/tutorial/classes/
http://www.cplusplus.com/doc/tutorial/classes2/
2 則留言:
rand() 的嚴重缺點:他所產生的亂數範圍太小,
只有 0 - 32767,
time() 的缺點:他的傳回資料是 秒,
他只能精確到 秒。
rand() 與 time() 為標準程式庫中符合需求的兩個函數,兩者不是完美的,達到程式的實用目的才是最重要的。
開發軟體最重要的是達到符合需求的目的,自然無法優先考量所用程式庫,或任何自行開發的程式是否達到完美的境界。
張貼留言