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

VPN Gate Client 4.27.9668 (201805030) 簡體中文版 - 不限流量免費VPN軟體 手機可用公共VPN中繼伺服器

JavaScript 入門指南 - 完成版的 Encode Software

Tình cờ gặp nhau 3 lần trên một chuyến xe, tài xế bus kết hôn với nữ hành khách vì "có duyên phận"