候繼倉(cāng) 孫波
項(xiàng)目情境分析
本案例選自上??萍冀逃霭嫔绲慕滩摹缎畔⒓夹g(shù)(必修1 數(shù)據(jù)與計(jì)算)》第三單元算法與程序設(shè)計(jì)之項(xiàng)目七:以計(jì)算圓周率為例——設(shè)計(jì)簡(jiǎn)單數(shù)值數(shù)據(jù)算法。該項(xiàng)目通過(guò)設(shè)計(jì)簡(jiǎn)單數(shù)值型數(shù)據(jù)算法解決計(jì)算圓周率問(wèn)題,對(duì)程序三種控制結(jié)構(gòu)進(jìn)行深入探究,并通過(guò)比較不同算法的運(yùn)行時(shí)間感受算法效率,引導(dǎo)學(xué)生主動(dòng)對(duì)程序或算法進(jìn)行優(yōu)化。本項(xiàng)目引導(dǎo)學(xué)生利用計(jì)算機(jī)科學(xué)領(lǐng)域的思想方法界定問(wèn)題,抽象特征,并能設(shè)計(jì)合理的算法形成解決問(wèn)題的方案,有效促進(jìn)計(jì)算思維素養(yǎng)的逐步養(yǎng)成。
圓周率π是一個(gè)在數(shù)學(xué)及物理學(xué)中常用的數(shù)學(xué)常數(shù),它是圓的周長(zhǎng)與直徑的比值,也等于圓的面積與半徑平方之比。π是一個(gè)無(wú)限不循環(huán)小數(shù),可以借助計(jì)算機(jī)編程,利用歐拉公式、沃利斯公式及隨機(jī)投點(diǎn)法等方法來(lái)計(jì)算圓周率,并可比較不同算法的效率,有意識(shí)地對(duì)算法和程序進(jìn)行優(yōu)化。
項(xiàng)目活動(dòng)安排
1.活動(dòng)1:用沃利斯公式計(jì)算圓周率
活動(dòng)要求:
(1)給出幾個(gè)簡(jiǎn)單的累乘或累加公式,如5!=5*4*3*2*1,s1=1+3+5+7+9,s2=1+1/2+1/4+1/8+1/16+1/32,分別討論它們的通項(xiàng)及累乘或累加變量的初值。
(2)分析沃利斯公式可知,這是一個(gè)累乘問(wèn)題,通過(guò)觀察找出通項(xiàng)公式,確定累乘變量的初值,確定控制循環(huán)的方法。注意:通項(xiàng)公式并不唯一,因此累乘變量初值和循環(huán)控制方法也會(huì)相應(yīng)發(fā)生改變。
(3)分組討論,結(jié)合循環(huán)控制方法,分別用自然語(yǔ)言和流程圖描述沃利斯公式求解π的算法。
(4)根據(jù)小組討論確定的算法,使用for循環(huán)或while循環(huán)編寫(xiě)Python程序,并調(diào)試運(yùn)行。
2.活動(dòng)2:對(duì)比兩種計(jì)算圓周率的算法
活動(dòng)要求:
(1)改寫(xiě)數(shù)學(xué)公式法求解圓周率的程序設(shè)計(jì),要求可以輸入精確度要求,并輸出運(yùn)行時(shí)間。
(2)多次運(yùn)行程序,改變limit的值,得到不同的圓周率近似值,并在表格3-4中記錄每次的運(yùn)行結(jié)果。
(3)改寫(xiě)隨機(jī)投點(diǎn)法的程序,要求可以輸入總投點(diǎn)數(shù),并輸出運(yùn)行時(shí)間。
(4)多次運(yùn)行程序,改變總投點(diǎn)數(shù),得到不同的圓周率近似值,并用表格3-4記錄每次的運(yùn)行結(jié)果。
(5)對(duì)比兩種算法計(jì)算圓周率的運(yùn)行情況,并填寫(xiě)表格3-5。
3.拓展思考
(1)用歐拉公式和沃利斯公式計(jì)算圓周率的時(shí)候,對(duì)累加器或累乘器變量初值的設(shè)置有什么不同?
(2)在隨機(jī)投點(diǎn)法中,隨著總投點(diǎn)數(shù)的增加,圓周率的值有什么變化?如何使圓周率的值更加精確?
(3)在日常生活中,哪些事情是反復(fù)操作的?類(lèi)似于本節(jié)課學(xué)習(xí)的循環(huán)程序設(shè)計(jì),你能舉兩個(gè)例子嗎?
4.活動(dòng)實(shí)施說(shuō)明
(1)圓周率π是一個(gè)在數(shù)學(xué)及物理學(xué)中常用的數(shù)學(xué)常數(shù),在這個(gè)問(wèn)題的計(jì)算上,一代一代的數(shù)學(xué)家貢獻(xiàn)出了自己的智慧,本項(xiàng)目中分別給出了歐拉公式、沃利斯公式和計(jì)算機(jī)模擬隨機(jī)投點(diǎn)法來(lái)計(jì)算圓周率,讓學(xué)生通過(guò)Python編程來(lái)實(shí)現(xiàn)用計(jì)算機(jī)從不同的方法和角度來(lái)解決問(wèn)題,并對(duì)解決問(wèn)題的效率進(jìn)行比較,從而實(shí)現(xiàn)“運(yùn)用基本算法設(shè)計(jì)解決問(wèn)題的方案,能使用編程或其他數(shù)字化工具實(shí)現(xiàn)這一方案”的目標(biāo)。
(2)活動(dòng)1的難點(diǎn)是提取問(wèn)題的基本特征,進(jìn)行抽象處理,并用形式化的方法表述問(wèn)題,重點(diǎn)是設(shè)計(jì)算法、理解并掌握如何構(gòu)建一個(gè)循環(huán)結(jié)構(gòu)來(lái)解決問(wèn)題。該項(xiàng)目適用于學(xué)科核心素養(yǎng)要求在水平2的教學(xué)場(chǎng)合。
在本活動(dòng)中,s=s*item這個(gè)式子為累乘的通項(xiàng)公式,對(duì)上述沃利斯公式來(lái)說(shuō),item的一種表示方式是item=(i/(i-1))*(i/(i+1)),i從2開(kāi)始,每次增加2。解決本問(wèn)題需要重復(fù)進(jìn)行的工作就是:①構(gòu)造item值,即item=(i/(i-1))*(i/(i+1)),i=i+2;②累乘item到s,即s=s*item。這里的循環(huán)控制條件是變量i的值達(dá)到指定值。i的初值為2,終值自己設(shè)定,每次加2。上述累乘算法可用自然語(yǔ)言描述,具體如圖1所示。
活動(dòng)1中用流程圖描述算法時(shí),要注意強(qiáng)調(diào)循環(huán)結(jié)構(gòu)的畫(huà)法,如圖2所示。
(3)分別用for循環(huán)和while循環(huán)的程序設(shè)計(jì)實(shí)現(xiàn)沃利斯公式計(jì)算圓周率,對(duì)比兩種循環(huán)的不同點(diǎn)(如圖3)。本次兩種循環(huán)均為確定次數(shù)的循環(huán),for循環(huán)此時(shí)采用遍歷結(jié)構(gòu)中元素的個(gè)數(shù)來(lái)體現(xiàn)。while循環(huán)可以實(shí)現(xiàn)確定次數(shù)的循環(huán),也可以實(shí)現(xiàn)不確定次數(shù)的循環(huán)。
(4)活動(dòng)2是在活動(dòng)1的基礎(chǔ)上進(jìn)行的,通過(guò)對(duì)兩種算法做簡(jiǎn)單的改寫(xiě)和對(duì)比,讓學(xué)生學(xué)會(huì)分析問(wèn)題,確定算法,并正確組織問(wèn)題解決過(guò)程中涉及的各種數(shù)據(jù),體驗(yàn)不同算法的效率。程序中涉及到了Python對(duì)函數(shù)庫(kù)的引用方法,格式是:from〈庫(kù)名〉import〈函數(shù)名〉。
Python語(yǔ)言中time庫(kù)是處理時(shí)間的標(biāo)準(zhǔn)庫(kù),math庫(kù)用于進(jìn)行科學(xué)計(jì)算,均為Python自帶庫(kù),安裝好Python之后可直接導(dǎo)入,不需另外安裝。clock()函數(shù)以浮點(diǎn)數(shù)計(jì)算的秒數(shù)返回當(dāng)前的CPU時(shí)間。兩次調(diào)用clock()用來(lái)衡量不同程序的耗時(shí)。
(5)程序中用到了關(guān)系與運(yùn)算符,特別要注意的是,Python中使用“=”表示賦值語(yǔ)句,使用“==”表示“等于”。此外,Python語(yǔ)言中支持連續(xù)比較,如判斷x是否為100和200之間的一個(gè)數(shù),其表達(dá)式為:100<=x>=200。
(6)注意在完成表3-4時(shí)會(huì)發(fā)現(xiàn),運(yùn)行程序,輸入相同的limit值,會(huì)得到相同的pi的值,但是每次得到的運(yùn)行時(shí)間是不一樣的,這與系統(tǒng)運(yùn)行的外部環(huán)境相關(guān)。在完成表格3-5時(shí),應(yīng)該強(qiáng)調(diào)這一比較的前提是在數(shù)據(jù)規(guī)模相同的情況下進(jìn)行的。
(7)拓展思考(1)的意義在于讓學(xué)生理解在用計(jì)算機(jī)解決相同問(wèn)題時(shí),根據(jù)算法的不同,其初值的設(shè)置是不一樣的。拓展思考(2)是為了讓學(xué)生體驗(yàn)隨機(jī)投點(diǎn)法在數(shù)據(jù)量較小的情況下,不確定性很大,但是隨著數(shù)據(jù)規(guī)模的增大,結(jié)果也越來(lái)越精確。拓展思考(3)是為了實(shí)現(xiàn)知識(shí)的遷移,總結(jié)利用計(jì)算機(jī)解決問(wèn)題的過(guò)程和方法,并遷移到與之相關(guān)的其他問(wèn)題解決中去。
項(xiàng)目學(xué)習(xí)目標(biāo)
1.學(xué)科核心素養(yǎng)目標(biāo)
能夠采用計(jì)算機(jī)科學(xué)領(lǐng)域的思想方法界定問(wèn)題、抽象特征;運(yùn)用合理的算法形成解決問(wèn)題的方案;總結(jié)利用計(jì)算機(jī)解決問(wèn)題的過(guò)程和方法,并遷移到與之相關(guān)的其他問(wèn)題的解決中。
2.內(nèi)容目標(biāo)
從生活實(shí)例出發(fā),概述算法的概念與特征,運(yùn)用恰當(dāng)?shù)拿枋龇椒ê涂刂平Y(jié)構(gòu)表示簡(jiǎn)單算法。掌握一種程序設(shè)計(jì)語(yǔ)言的基本知識(shí),使用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單算法。通過(guò)解決實(shí)際問(wèn)題,體驗(yàn)程序設(shè)計(jì)的基本流程,感受算法的效率,掌握程序調(diào)試與運(yùn)行的方法。
3.學(xué)業(yè)目標(biāo)
依據(jù)解決問(wèn)題的需要,設(shè)計(jì)和表示簡(jiǎn)單算法;掌握一種程序設(shè)計(jì)語(yǔ)言的基本知識(shí),利用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單算法,解決實(shí)際問(wèn)題。
4.課時(shí)建議
活動(dòng)1共2課時(shí),建議連堂進(jìn)行?;顒?dòng)2在活動(dòng)1進(jìn)行完之后開(kāi)展,時(shí)間為2課時(shí)。