發表文章

目前顯示的是有「演算法」標籤的文章

Scratch 費氏數列

圖片
  相信大家都聽過費氏數列,它是1200年代的歐洲數學家,曾經提到: 「若有一隻免子每個月生一隻小免子,一個月後小免子也開始生產。起初只有一隻免子,一個月後就有兩隻免子,二個月後有三隻免子,三個月後有五隻免子(小免子投入生產)......」。 簡單的說,費氏數列的第一個數是1,接著還是1; 第三個數是 1+1(前兩數之和),也就是 2;第四個數是 1+2=3 (F4);第五個數是 2+3=5 (F5);3+5=8 (F6)、5+8=13 (F7)、8+13=21 (F8)⋯⋯。 接下來的每個數都繼續以這種跳步法產生   程式的邏輯演算方法如下: 一.首先建立三個變數,分別命名為暫存、費氏數1、費氏數2,並將費氏數初始值1設定給費氏1,初始值0設定給費氏2。 二.於迴圈中,先把變數費氏1紀錄在暫存,迴圈每執行一次,暫存數值就更新一次。 三.最新的費氏數(費氏1)是前面兩個數值相加。 四.第二個新的費氏數(費氏2),就是原先的暫存。 範例程式結果如下 點選綠色旗標後運作:

Scratch 最大公因數(輾轉相除法)

圖片
今天我們試著用小貓程式來求出兩數的最大公因數。 而輾轉相除法是歷史上最著名的演算法之一,是求兩數的最大公因數(GCD) 極快速的方法, 故我們使用輾轉相除法來演算程式。 首先我們讓小貓程式可以輸入二個整數,先輸入大的整數,再輸入小的整數。 輸入整數之後,將該數新增至清單(陣列)之中,較大的整數新增至餘數A的清單,較小的整數新增至餘數B的清單。 餘數A(陣列)中的第一項整數,設定給變數A,餘數B(陣列)中的第一項整數,設定給變數B。 整數A為較大之整數,故整數A為被除數,故將整數A除以整數B,取得餘數後設定給變數A。 以取得之餘數當做除數,再將整數B除以整數A,取得另一餘數後,將其設定給變數B。 如此重覆不停的做,直到A或B一數值等於0為止。 以下運算範例則為 一.整數A(12921)除以整數B(4234),取得餘數219(商為3)。 二.整數B(4234)除以整數A(219),取得餘數73(商為19)。 三.整數A(219)除以整數B(73),取得餘數0(商為3),故得知兩數最大公因數為73。 程式完成結果如下 (建議使用Google Chrome瀏覽)

Scratch 列出50以內的質數

圖片
今天來試做一個小程式,程式功能為自動列出50個質數。 首先先瞭解一下,什麼是質數,所謂的質數,又稱為素數, 是指在一個大於1的自然數中,除了1和該整數自身外,無法被其他自然數整除。 因此質數只有1和本身兩個因數。 按照上述定義,列出下圖10以內的質數。 首先設定被除數由2開始,迴圈跑完一次後,遞增一,執行第50次後結束。 條件判斷如下: 一.重覆執行被除數除以除數,取餘數等於0,若被除數尚未等於除數可以整除,表示被除數是合數。 二.重覆執行被除數除以除數,取餘數等於0,若被除數等於除數可以整除,表示被除數是質數,新增資料到質數表。 程式流程圖如下 程式完成結果如下 (建議使用Google Chrome瀏覽)

Scratch 九九乘法

圖片
九九乘法使用程式表示時,我們會執行一個大迴圈時,在大迴圈條件尚未滿足前,同時也在執行小迴圈。 已知九九乘法表中的乘數為{2,3,4,5,6,7,8,9},初始值為2,每執行一次後(重覆執行八次),變數(i)加1。 小迴圈的表示方式,以變數j來代表被乘數,每執行一次後(重覆執行九次),變數加1。 第一個小迴圈,乘數(i)=2,被乘數(j)=1,故得2,被乘數(j)+1,執行下一個迴圈 第二個小迴圈,乘數(i)=2,被乘數(j)=2,故得4,被乘數(j)+2,執行下一個迴圈.... 大迴圈加小迴圈的完整圖示如下 範例程式如下: