Swift 入門指南 V1.00 - 單元 15 - 實作 setCode()





































Swift 入門指南 V1.00 - 單元 15 - 實作 setCode()









setCode() 的工作就是建立密碼表餘數陣列 (array) ,我們需要的密碼表就是一個攪亂順序的英文字母表





先來溫習一下用來編碼的數學公式



y = a * x + b

m = y % n



ab 預定是 09 之間的隨機整數,要取得隨機整數的話,程式庫 (library) 中有程式可用,倒是現在先不用急著一次到位,我們先把 a 設定成 3b 設定成 5 好了, setCode() 的實作如下























// 設定密碼表

func setCode() {
   var a = 3
   var b = 5
 
   var c = 97
   var i, x, y, m: Int
   // 以迴圈取得每一個餘數
   for i = 0; i < 26; i++ {
      x = c
      y = x * a + b
      m = y % 26
      code.append(m)
      c++
   }
 
   // 移除第一個預設值
   code.removeAtIndex(0)
}


因為英文字母表的小寫字母共有 26 個,因此公式用迴圈 (loop) 跑了 26












// 以迴圈取得每一個餘數

for i = 0; i < 26; i++ {
   x = c
   y = x * a + b
   m = y % 26
   code.append(m)
   c++
}


我們多用了除了公式外的變數 (variable) cc 為起始字元 (character) ,初值設定成英文字母表的第一個字母 'a' 的數字,這裡並沒有直接拿變數 c 進行計算,而是把變數 c 的值指派給 x



x = c


會這樣做的原因很簡單,因為需要一個變數表示目前處理的字元,因此迴圈最後利用遞增將變數 c 轉移到下一個字元,例如迴圈從 'a' 開始,也就是數字 97 ,第二個處理的字元為 'b' ,也就是數字 98 ,第三個為 'c' ,也就是數字 99 ,以此類推



c++


setCode() 的最後, code 屬性 (property) 呼叫陣列的 removeAtIndex() 方法 (method) 移除第一個,也就是索引值為 0 的元素






// 移除第一個預設值
code.removeAtIndex(0)


請自行將上述程式碼加入到 Encrypt 中,再加入以下的測試程式碼







var demo = Encrypt()
demo.code


記得建構子 (initializer) 中的 // setCode() 要拿掉 // ,取消註解化才能順利執行。


輸入到 Playground ,測試程式碼的結果如下





結果如預期,產生 025 隨機排列的數字,這樣我們的公式就 ok 了嗎?嗯,因為我們希望 ab 可以是 09 之間的任意整數,這樣就有 100 種組合說,所以我們接下來要繼續測試,看看是不是每一種組合都 ok 囉!



中英文術語對照




































陣列array
程式庫library
迴圈loop
變數variable
字元character
屬性property
方法method
建構子initializer







沒有留言:




















window.___gcfg = { 'lang': 'zh-TW' };





Popular posts from this blog

迅雷 Thunder 7.9.43.5054 免安裝版 (9.1.41.914 安裝版) - 支援BT下載的萬用 檔案下載工具

Nhiều đồn đoán cho rằng bộ đồ "phá vỡ quy tắc" của Meghan Markle được lấy cảm hứng từ trang phục của Công nương Diana

Cụ ông 92 tuổi gào khóc vì mất hết tiền tiết kiệm cả đời, càng cay đắng hơn khi kẻ trộm là đứa cháu trai 34 tuổi