2019年12月30日 星期一

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)⋯⋯。

接下來的每個數都繼續以這種跳步法產生 

費氏數列001.png

程式的邏輯演算方法如下:

一.首先建立三個變數,分別命名為暫存、費氏數1、費氏數2,並將費氏數初始值1設定給費氏1,初始值0設定給費氏2。

二.於迴圈中,先把變數費氏1紀錄在暫存,迴圈每執行一次,暫存數值就更新一次。

三.最新的費氏數(費氏1)是前面兩個數值相加。

四.第二個新的費氏數(費氏2),就是原先的暫存。

費氏數列002.png

範例程式結果如下

費氏數列003.png

點選綠色旗標後運作:

2019年12月20日 星期五

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

今天我們試著用小貓程式來求出兩數的最大公因數。

而輾轉相除法是歷史上最著名的演算法之一,是求兩數的最大公因數(GCD) 極快速的方法,故我們使用輾轉相除法來演算程式。

首先我們讓小貓程式可以輸入二個整數,先輸入大的整數,再輸入小的整數。

輸入整數之後,將該數新增至清單(陣列)之中,較大的整數新增至餘數A的清單,較小的整數新增至餘數B的清單。

輾轉相除法001.JPG

餘數A(陣列)中的第一項整數,設定給變數A,餘數B(陣列)中的第一項整數,設定給變數B。

整數A為較大之整數,故整數A為被除數,故將整數A除以整數B,取得餘數後設定給變數A。

以取得之餘數當做除數,再將整數B除以整數A,取得另一餘數後,將其設定給變數B。

如此重覆不停的做,直到A或B一數值等於0為止。

輾轉相除法002.JPG

以下運算範例則為

一.整數A(12921)除以整數B(4234),取得餘數219(商為3)。

二.整數B(4234)除以整數A(219),取得餘數73(商為19)。

三.整數A(219)除以整數B(73),取得餘數0(商為3),故得知兩數最大公因數為73。

輾轉相除法003.JPG

程式完成結果如下
(建議使用Google Chrome瀏覽)