資訊內容
scratch編程繪制數字金字塔(楊輝三角)
楊輝三角相信很多人都不陌生,它是一個無限對稱的數字金字塔,在中國南宋數學家楊輝1261年所著的《詳解九章算法》一書中出現。在歐洲,帕斯卡(1623—-1662)在1654年發現這一規律,所以這個表又叫做帕斯卡三角形。帕斯卡的發現比楊輝要遲393年,比賈憲遲600年。
在初中,我們就知道,楊輝三角的兩個腰邊的數都是 1,其它位置的數都是它頂上兩個數之和。這就是我們編程實現楊輝三角的關鍵之一。
使用scratch編寫這個程序相對于別的語言來說要更復雜一點,復雜的不是算法,而是如何展示出來,下面我們先來分析一下這個程序有哪些難點,面對這些困難我們如何克服。這就是我們所強調的,少兒編程應該重點學習如何解決問題,如何利用有限的資源去做更多的事。
問題1:找規律,將現象轉為數據
楊輝三角的兩個腰邊的數都是 1,其它位置的數都是它頂上兩個數之和。
如圖所示,我們可以利用上一行的結果,計算出下一行的數據。因此定義兩個列表(l:上一行數據;tem:下一行數據),每個列表用來存儲一行數據:
如圖,給tem首位加上1,就是1,2,1那就是第三行的數據,接下來再把l的數據清空,將tem的數據存儲到l里,并在首位添加1,如此循環就可以一層一層的輸出了。
問題二:如何將數字打印顯示到舞臺?
上面解決了數據問題,下面就要把列表l里的數據一個個顯示到舞臺上,這就是scratch的麻煩所在,無法直接打印字符。于是想辦法,用數字角色,添加造型,將0-9都包括進去,根據不同的數字切換不同的造型,利用畫筆里的圖章或者克隆將這個數留在舞臺上,為了簡單,就用圖章吧。
問題三:換行后位置如何確定?
第一行很好確定,就在舞臺中央的正上方,那換到下一行從哪里開始呢?這需要我們根據實際情況去測試一下,如下圖所示,找到這個合適的間距。
上下間距設置為30,即y坐標-30,x坐標向左移動,第二次左移20,第三層左移40,第四層就是60,總結規律就是0-(層數-1)*20,數字與數字之間的距離設置為30。
問題四:如果數字大于9怎么辦?
比如要打印出10,這怎么辦?我們的角色造型里沒有這么多,我們只有0-9。這時就想到了拆分,將多位數一位一位的拆出來(將0造型放在最后,即:換成0造型,默認就是最后一個造型)。
目前所有遇到的問題基本都有了解決辦法,我們就可以開始動手構建整個程序了。,第一行是1,這個是固定的,我們直接在開始用圖章印上去,從第二行開始,重復執行打印,計算下一行,流程如下。
完整的程序如圖
運行結果:
效果優化:
從圖中看到結果并不是我們想要的等腰三角形效果,因為后面數字變大,占據的寬度增加,所以整體向右偏移,因此就要對這些多位數進行處理,讓他們起始位置向左移動一點,這樣就可以了。
優化后的積木:
在高中我們會學到,楊輝三角中的任何一個數都等于一個組合數,如果有興趣可以利用這一公式來做。
本站部分內容轉載自網絡,如有侵權請聯系管理員及時刪除。
