編者按:本欄目特邀教育部基礎教育課程教材專家工作委員會成員、普通高中信息技術課標修訂核心組成員、四川省教育科學研究所技術教育研究室主任、正高級教師、特級教師李維明主持,望大家踴躍參與研究與討論(聯系郵箱:358211798@qq.com)。
主題闡釋
算法是普通高中信息技術內容體系中重要的大概念,它是一個有窮規則的集合,其中之規則規定了解決某一特定類型問題的一個運算系列;而計算是指數據在運算符的操作下,按規則進行的數據變換。這里無論是算法還是計算都提到了“規則”,可以理解為算法規定了任務執行或問題求解的一系列步驟,而計算是這些任務執行或問題求解的具體實現。
在教學中我們不必為算法、計算的概念去繞口地解釋,而應當領會其實質,利用計算機的優勢特點去設計解決問題的規則和實現的方法。例如,累加器S=S+X,就利用了變量賦值的特點實現了迭代的方法;斐波那契數列問題,使用了遞歸的思路;等等。這些都需要教師在教學中引導學生思考:如何建立模型,實現有效的自動計算?如何方便、高效地實現自動計算?編程是解決具體問題的途徑之一。
本期提供的三個案例,分別用不同的應用實例,讓學生體驗編程計算,初步了解算法。
教學案例
案例1:用“割圓術”計算圓周率
學業要求:能提取割圓術問題的基本特征,進行抽象處理,并用形式化的方法表述問題,運用算法設計解決問題的方案,能使用編程語言實現這一方案,把利用信息技術解決問題的過程遷移到其他相關問題中,并能采用恰當的方法優化解決方案。
知識要點:割圓術,迭代算法,近似值,精度。
教學方法:通過自主學習、推導分析、歸納總結,了解用“割圓術”計算圓周率的思想與方法;并通過運行觀察程序,感知計算機近似運算的高效。
活動步驟:
①教師展示從古至今,不同的人對π的推導和計算到的數字。②給學生閱讀材料,自主學習“割圓術”的思想方法。③請學生計算半徑為1的圓的內接三角形的面積。④請學生計算半徑為1的圓的內接六邊形的面積。 ⑤請學生繼續嘗試計算半徑為1的圓的內接十二邊形的面積,并歸納計算規律。⑥教師引導學生推導計算半徑為1的圓的內接二十四邊形的面積,并總結計算規律,用自然語言描述此算法。⑦將“割圓術”程序的可執行文件發給學生,學生運行程序,觀察結果,感知計算機近似運算。⑧請學生利用“割圓術”,通過分析初始狀態為正方形的正多邊形嘗試近似計算圓周率,并編寫程序。⑨學生程序展示,相互評價討論,提出優化或改進意見。
教學思路:
(1)按照新課程標準的要求,本課的學習目標是:針對給定的問題進行分析,明確割圓術的思想方法;能提取割圓術問題的基本特征,進行抽象處理,并用形式化的方法表述問題;運用算法設計解決問題的方案,能使用編程語言實現這一方案;把利用信息技術解決問題的過程遷移到其他相關問題中,并能采用恰當的方法優化解決方案。具體的知識要點包括割圓術、迭代算法,近似值及精度。在教學中應當把“能提取割圓術問題的基本特征,進行抽象處理,并用形式化的方法表述問題;運用算法設計解決問題的方案,能使用編程語言實現這一方案”作為教學重點,而“把利用信息技術解決問題的過程遷移到其他相關問題中,并能采用恰當的方法優化解決方案”是教學的難點。
(2)古今中外,許多人致力于圓周率的研究與計算。為了計算出圓周率的越來越好的近似值,一代代的數學家為這個神秘的數貢獻了無數的時間與心血。古人計算圓周率,一般是用割圓術。
(3)所謂“割圓術”,就是用單位半徑圓內接正多邊形的面積去無限逼近圓面積并以此求取圓周率的方法。學生通過自主學習這一思想方法,嘗試手工計算單位半徑圓內接三角形、六邊形、十二邊形的面積,在其中體會這種基于幾何的算法計算量大,速度慢。在計算機程序中,成倍地增加正多邊形的邊數n,讓所求得的π逐漸接近真實的π值,讓學生感受計算機在近似計算中的高效。
(4)在此基礎上,兩人一組,利用“割圓術”,通過分析初始狀態為正方形的正多邊形嘗試近似計算圓周率,并編寫程序。學生程序展示,相互評價討論,提出優化或改進意見。
(5)本活動設計課時為1課時。
案例2:遞歸算法的教學
學業要求:掌握遞歸算法的基本特征,能夠用遞歸算法解決相關問題,了解遞歸算法的執行過程。
知識要點:遞推算法,遞歸算法,遞歸的結束條件、條件語句、循環語句。
教學方法:講授法,任務驅動法,小組活動法。
活動步驟:
①教師通過講授法,復習前面的知識——遞推算法的編程思路,引出本課實例——斐波那契數列問題。②請學生分組討論斐波那契數列問題的編程解題思路,總結出解決這一問題的關鍵條件,得出遞推關系式:F[1]=1,F[2]=1,F[N]=F[N-1]+F[N-2](N>=3),并獨立編制出遞推算法的相關程序。③教師展示學生的編程結果,讓大家總結、提煉出遞推的條件及循環語句的組成,分析遞推程序的執行過程:從小到大,直到目標實現。④教師總結另一種編寫程序的方法:從大到小,引出遞歸算法。⑤請學生自學教材內容,分組討論、總結出遞歸算法的定義、思路以及使用遞歸算法的注意事項,并獨立編制出遞歸算法的相關程序。⑥教師展示遞歸程序執行過程,歸納總結出編寫遞歸程序的一般思路:用過程或函數方式實現遞歸程序;從底到頂分析,從頂到底求解;先判斷遞歸條件再遞歸,否則容易出現死循環。⑦請學生分組或獨立完成以下程序(任選一題完成):分解質因數(任給一正整數,將其分解成質因數并輸出);上樓梯問題(有一十級的樓梯,上樓時可以一步一級,也可以一步兩級,求出共有多少種上樓梯的方法);漢諾塔問題。⑧同學間成果展示,相互評價,討論,提出改進方案。
教學思路:
(1)按照新課程標準的要求,本單元的學習目標是:熟練掌握遞推算法的應用,掌握遞歸算法的特點,能利用遞歸算法編制程序解決常見問題,樹立遞推、遞歸算法解決問題的基本計算思維。本課時的重點內容是遞歸算法。具體知識點是:遞推算法、遞歸算法、遞歸算法的特點,遞推、遞歸算法的結束條件,用遞歸算法編制程序解決相關問題。本課時的教學難點是:遞歸算法的執行過程和遞歸的結束條件。
(2)遞推算法是按照從小到大的思維方式依次求出各級問題,思維較清楚,程序執行過程符合人的求解過程,比較好理解,但在有些較大問題上,程序的編制過程比較難。而遞歸算法是在遞推算法的基礎上,采用從小到大的分析方式。從大到小的求解過程,編制程序比較容易,但程序的執行過程比較難理解,因為要用到堆棧的理解方式,堆棧的概念在以后的學習過程中會詳細介紹,這里只是打下伏筆。
(3)遞推、遞歸兩者的共同點是:一要找到遞推的關系式;二要找到結束條件(初始化條件)。不同點是:求解過程的順序不同,遞推在編制程序時采用的是從小依次向大逐步求解的方式,而遞歸在編制程序時采用的是降低問題規模的思維方式。
(4)基于上述認識,這一節課中設計了兩個活動。
這兩個活動,重點是要讓學生理解兩個程序的執行過程(求解過程),理解遞推、遞歸算法各自的特點,培養學生的遞推、遞歸算法思想,并能根據問題的實際情況,選擇用不同的算法編程實現。
(5)在上述這兩個活動的基礎上,讓學生有選擇地完成相關問題,既能達到分層教學的目的,又能加深學生對本節課內容的理解。
(6)本活動可用兩2節課完成。
案例3:計算朋友圈人數
學業要求:能夠針對限定條件的實際問題進行數據抽象,運用數據結構合理組織、存儲數據,選擇合適的算法(排序、查找、迭代、遞歸)編程實現、解決問題。
情境設置:小明所在學校有N個學生,形成M個俱樂部。每個俱樂部的學生都有著相似的愛好,形成一個朋友圈。一個學生可以同時屬于若干個不同的俱樂部。根據“我的朋友的朋友也是我的朋友”這個推論可以得出,如果A和B是朋友,且B和C是朋友,則A和C也是朋友。小明想知道,在這些朋友圈中最大的有多少人。
研究題目:根據情境分析題意,確定數據結構,建立數學模型,探索解題思路,編程為小明同學找到答案。
項目活動:
①(或選修課)的情況,假設一個組(或一門課)為一個朋友圈,試試能否找出最大朋友圈;記下尋找過程數據,分析結構,探索計算模型、方法。②設N=7,M=4。且第一俱樂部有3人,學號為1、2、3;第二俱樂部有2人,學號為1、4;第三俱樂部有3人,學號為5、6、7;第四俱樂部有1人,學號為6。模擬計算機解決此問題。③根據前述思路,編程計算最大的朋友圈中有多少人。
教學說明:
①確定總的學生學號Total,即Total=[1、2、3、4、5、6、7]。②將4個俱樂部分為4個數組:N1=1、2、3,N2=1、4,N3=5、6、7,N4=6。③以學號1為例,尋找能與學號1成朋友關系的學號,將含有學號1的俱樂部合并在一起,即M1=N1 U N2=1、2、3、4。學號2、3、4現在都是學號1的朋友,根據朋友的朋友也是我的朋友,因此學號2、3、4的朋友也是學號1的朋友,因此學號1的朋友圈M1還有可能擴大,依次查詢包含學號2、3、4的俱樂部并與原本M1朋友圈進行合并,即M2=M1 U N1 U N2=1、2、3、4。據此,得出第一個朋友圈為1、2、3、4。④同理,現在只剩下學號5、6、7沒有劃分朋友圈,以學號5為例,按照上述步驟依次查詢得出M3朋友圈5、6、7。⑤所有學號分圈完畢,得出兩個朋友圈:M2=1、2、3、4,M3=5、6、7。⑥比較兩個朋友圈數量大小,最大的即為最大朋友圈,數組長度即為最大朋友圈中人的個數,數組內容即為朋友圈的具體人員。⑦如果學生人數和俱樂部的組成發生變化,只需要相應的在矩形數組里修改對應參數。
運行結果如下圖所示。
專家點評
案例1
我國魏晉時期數學家劉徽發明的割圓術,是以“圓內接正多邊形的面積”來無限逼近“圓面積”,即割之彌細,所失彌少,割之又割,以至于不可割,則與圓合體,而無所失矣。這里應用近似計算的方法,充分體現了我國古代數學家的智慧。該案例正是讓學生從計算半徑為1的圓的內接三角形的面積出發,逐漸增加邊數,尋找其規律;同時,將“割圓術”程序的可執行文件發給學生,學生運行程序,觀察結果,感知計算機近似運算;在此基礎上,再讓學生利用“割圓術”,通過分析初始狀態為正方形的正多邊形嘗試近似計算圓周率,并用計算機編程計算。這一思路既體現了數學中的極限思想,又符合計算機解決問題所使用的近似方法,思路正確,方法得當,值得肯定。
但從案例本身來看,對計算機解決問題使用的近似計算方法中的近似值及精度的要求體現不夠充分,學生探究的目的不太明確。新課標要求學生依據解決問題的需要,設計和表示簡單算法。在本案例中,算法如何體現是引導學生解決問題的關鍵:需不需要使用通項式,什么地方使用迭代算法,怎么實現預定的精度等思想和方法,在案例中體現得不夠充分,不利于學生計算思維的形成,應當改進。
(案例1提供:成都石室中學 唐佩、杜妮香、曾貴勝;點評人:四川省教育科學研究所 李維明)
案例2
新課標要求學生能夠針對限定條件的實際問題進行數據抽象,運用數據結構合理組織、存儲數據,選擇合適的算法(排序、查找、迭代、遞歸)編程實現、解決問題。而該案例正是從討論斐波那契數列問題的編程解題思路出發,讓學生總結出解決這一問題的關鍵條件,得出遞推關系式并引出遞推算法,并在此基礎上,采用從小到大的分析方式、從大到小的求解過程,引出實現遞歸的算法,教學思路清晰。在具體活動中讓學生解決諸如分解質因數、上樓梯問題、漢諾塔問題等實例問題,由簡至繁,體驗遞歸思想,感受計算樂趣,處理得當。如果在案例整體設計上,能以具體的實際問題解決的例子為項目活動的內容,引導學生逐步分析,理解迭代、遞歸的含義,進而形成解決此類問題的思路,找到解決此類問題的方法,達到發展計算思維的目的,項目活動的效果就更好了。
(案例2提供:四川省教育廳教育物資裝備中心 李大國;點評人:四川省教育科學研究所 李維明)
案例3
新課標要求學生能夠在掌握常用數據結構的概念、特點、操作、編程實現方法等內容的基礎上,對簡單的數據問題進行分析,選擇恰當的數據結構,用一種程序設計語言編程實現,在問題解決過程中對數據抽象、數據結構的思想與方法有初步的認識。該案例在解決問題時,首先將4個俱樂部設為4個數組,然后查找數組中的等價元素,并將各數組等價集合并,通過比較等價集的規模,找出最大朋友圈,這一方法,正是課標要求的具體呈現。
本案例是按選修I中模塊1“數據與數據結構”的要求設計的,其核心素養水平屬于水平2,是用計算機解決數學問題的案例。教學時要充分利用活動①、②的探索,明確其數學問題的歸屬。解決問題時需要用到集合、樹的概念和方法,也需要使用遞歸的思想和方法來提高其查詢效率,所以有一定的難度。教學時,可以引導學生分步實現,逐步形成正確的解題思路,提高數字化學習與創新能力,強化信息意識,提升計算思維水平。
(案例3提供:四川省教育廳教育科學研究所 張馨月;點評人:四川省教育科學研究所 李維明)