張明
大約在1500年前,我們的老祖宗寫了一本數學奇書《孫子算經》(這“孫子”可不是是那個提出“知彼知己”的軍事家孫子),下卷第31題記載了一個很好玩的數學問題:“今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?”
這道題就是后世“雞兔同籠”的始祖,如今已被義務教育課程標準實驗教科書人教版數學五年級上冊選為補充教材并且在部分五到六年級的課外習題所用。
關于這道題的解法有很多種,這一次我們試著用編程軟件《Scratch》求出了答案,并錄制了完整的解題過程,希望幫助大家更好地理解如何運用編程解決簡單、有趣的數學問題。
不過在開始之前,需要先明白一個問題:我們為什么要學數學,它和編程有何關系?
中科院院士、數學教授李大潛給出了答案———數學能夠提高我們的素質和能力,這些素質和能力包括:嚴密的邏輯思維能力、高度的抽象思維能力、自覺形成數量觀念和讓我們變得更細心。
數學和編程關系緊密,具備數學+編程的人優勢會更大,這和它們之間的聯系密切相關。
數學和編程的關系
1.編程所需要的很多能力和數學是相通的。比如邏輯思維、模式識別等。現在機器學習用到的算法,其本質還是數學模型計算問題。
2.編程能夠幫助孩子更好地理解數學抽象概念。孩子們可以通過編程將抽象的數學概念轉化為看得見的、會動的圖像。例如最常用的函數,書本上的概念理解起來很抽象,通過編程就可以在計算機上展示出來。
Sin和Cos在三角形上的運用如下圖。
3.編程能夠強化孩子的數學能力。如果孩子想用代碼建造飛機,那就要用到各種各樣的數學知識,并且還要調用抽象思維的能力。
想清楚了這兩個問題哦,我們再看編程解決數學問題的過程收獲會更多。
開始,需要搞清楚編程解決數學問題的邏輯:我們要解出的數學答案是什么(求兔子和雞的數量)-梳理出這個問題的邏輯-確定用怎樣的公式計算-在草稿紙上畫出流程圖-將這個順序轉化為代碼語言-輸入計算機得出結果。
下面一步步細分:
第一步:添加角色
在角色區添加角色,分別是公雞、兔子、籠子各一個:
第二步:設置邏輯運算
1.籠子角色的腳本要根據已知條件算出結果,并在界面顯示出結果(白框里的文字),我們輸入題目中已知條件:
我們要求雞和兔子的數目,就是要解出兩個未知數,把它轉化為代碼語言,這就需要創建兩個變量來代表這兩個未知數(兔子和雞)。
現在根據已知條件輸入兔+雞=35,兔×4+雞×2=94,注意左邊的綠色框,里面包含了很多邏輯關系:“且”“或”等等。孩子在這一步要思考:這兩個式子是缺一不可還是滿足一個就行呢?這就是對孩子邏輯思維最好的訓練。
接著輸入變量(發散下思維:分析一個問題時,教會孩子找出它的變量,問題就會好解決很多)。
完整代碼如下。
雞和兔要執行的任務是:當它們接受到“計算雞兔多少只”這個指令時,就要分別“喊出”結果,兔子和雞的代碼如下圖所示。

最后的結果如下圖所示。
我們求出了答案,孩子在過程中對邏輯關系“且”“或”等有了更深的了解,對變量也會有初步認識,這些收獲都能給孩子一些啟示,有助于孩子以后高效地處理任何問題。
這就是數學+編程的強大之處。
關于編程學習,最后分享一些學習編程的建議:
學習編程的前提是孩子一定要對編程感興趣。孩子有興趣了,就可以選擇合適的編程語言。
目前比較流行的編程語言有Python、C++以及Java等,而適合小朋友學習的主要是圖形化編程Scratch、Python、以及面向NOIP競賽的C++語言,Python已經成為浙江2018年高考內容。
對于零基礎、年滿7歲的孩子,這里建議從《Scratch》這款由美國麻省理工研發的圖形化編程軟件開始學習,簡單、有趣、易上手,用積木塊代替了枯燥的代碼,孩子短時間內就能學會它。