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中繼伺服器

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"

"Thiên thần lai" MOMOLAND khiến fan phát sốt vì màu tóc mới quá nổi trong ảnh nhá hàng