李敏 程建娜
● 教材分析
本節(jié)課選自人教-地圖版《數(shù)據(jù)與計(jì)算》的第二章《算法與程序?qū)崿F(xiàn)》,本章按照計(jì)算機(jī)解決問題的過程展開,其中第四節(jié)是在學(xué)生掌握算法與程序設(shè)計(jì)基本知識(shí)的基礎(chǔ)上,進(jìn)一步理解常見算法及其程序?qū)崿F(xiàn)的過程,并考慮算法的效率。本節(jié)課為第四節(jié)的第2課時(shí),主要內(nèi)容為理解枚舉算法,是在本章前面章節(jié)項(xiàng)目實(shí)施的基礎(chǔ)上進(jìn)行的,考慮到借班上課中學(xué)生的基礎(chǔ)和課堂實(shí)施效果,我對(duì)教材內(nèi)容進(jìn)行了處理,刪減了算法效率內(nèi)容,重新設(shè)計(jì)了本節(jié)課的研究問題。
● 學(xué)情分析
當(dāng)今社會(huì),信息技術(shù)已廣泛應(yīng)用于社會(huì)生活的各個(gè)領(lǐng)域,學(xué)生習(xí)慣用技術(shù)解決問題,但他們只是被動(dòng)的使用者,很少關(guān)注算法在其中所起的作用,也很少有意識(shí)地主動(dòng)用技術(shù)去創(chuàng)新或研究問題。另外,學(xué)生從小就學(xué)習(xí)大量古詩,他們對(duì)詩人間的“關(guān)系”了解不多,但卻非常感興趣。而對(duì)于施教班級(jí)所屬學(xué)校的騰沖一中的學(xué)生而言,他們之前沒有接觸過算法與程序,沒有Python編程基礎(chǔ)。
● 教學(xué)目標(biāo)
(1)了解枚舉算法求解問題的基本過程,理解其基本思想,能用流程圖描述該算法。(計(jì)算思維)
(2)理解枚舉算法的編程實(shí)現(xiàn)過程,能編寫程序并調(diào)試運(yùn)行實(shí)現(xiàn)問題求解。(計(jì)算思維、數(shù)字化學(xué)習(xí)與創(chuàng)新)
(3)通過項(xiàng)目研究,認(rèn)識(shí)枚舉算法在學(xué)習(xí)生活中的應(yīng)用價(jià)值,理解用計(jì)算機(jī)解決問題的優(yōu)勢(shì)。(信息意識(shí)、信息社會(huì)責(zé)任)
● 教學(xué)重難點(diǎn)
教學(xué)重點(diǎn):理解枚舉算法思想,能用流程圖描述該算法,體驗(yàn)用枚舉思想解決問題的過程。
教學(xué)難點(diǎn):編寫程序?qū)崿F(xiàn)枚舉算法解決相關(guān)問題。
● 課時(shí)安排
1課時(shí)。
● 教學(xué)方法與手段
項(xiàng)目學(xué)習(xí)、合作探究、啟發(fā)式、探究法。
● 教學(xué)準(zhǔn)備
網(wǎng)絡(luò)機(jī)房、教學(xué)機(jī)房、學(xué)習(xí)單以及半成品Python程序。
● 教學(xué)過程
1.項(xiàng)目活動(dòng)熱身,認(rèn)識(shí)枚舉算法
教師談及現(xiàn)代社會(huì)通過朋友圈點(diǎn)贊等判斷兩人之間的關(guān)系,提問:“古時(shí)候如何判斷兩個(gè)人之間的關(guān)系呢?”
學(xué)生回答可通過書信詩詞判斷古時(shí)兩人之間的關(guān)系,并舉例說出詩人及對(duì)應(yīng)的古詩。
學(xué)生觀看視頻,梳理盛唐幾位詩人之間的關(guān)系。
教師引出本節(jié)課的項(xiàng)目主題和研究范圍:
項(xiàng)目主題:解密唐朝詩人之間的關(guān)系。
研究范圍:以盛唐幾位詩人(如杜甫、李白、孟浩然、王維等)為例進(jìn)行研究,感興趣的學(xué)生可以拓展研究更多的唐朝詩人。
學(xué)生以小組為單位,在規(guī)定時(shí)間內(nèi)查找唐詩文檔中杜甫創(chuàng)作的提及李白的古詩,并填寫在學(xué)習(xí)單中。
教師分析學(xué)生的查找過程,整理問題解決思路——需要在唐詩庫中對(duì)每一首古詩進(jìn)行列舉并判斷,引出這種解決問題的方法即為枚舉算法,并提出枚舉算法的兩個(gè)關(guān)鍵點(diǎn)——逐一列舉和逐個(gè)驗(yàn)證。
設(shè)計(jì)意圖:本環(huán)節(jié)由學(xué)生熟識(shí)的朋友圈點(diǎn)贊和微博@引入古代詩人間關(guān)系的判斷,問題的切入比較獨(dú)特,很容易激發(fā)學(xué)生的研究興趣,為后續(xù)項(xiàng)目實(shí)施奠定基礎(chǔ)。此外,從人工枚舉解決問題入手,既初步幫助學(xué)生認(rèn)識(shí)枚舉算法及其基本原理,又讓學(xué)生感受到枚舉算法在實(shí)際生活中應(yīng)用的普遍性,為后續(xù)計(jì)算機(jī)枚舉做好鋪墊。
2.項(xiàng)目分析與算法設(shè)計(jì),理解枚舉算法
教師分析人工枚舉的問題,引出用計(jì)算機(jī)實(shí)現(xiàn)問題解決。
教師對(duì)照人工枚舉的過程,先確定計(jì)算機(jī)枚舉的輸入與輸出,再分析計(jì)算機(jī)實(shí)現(xiàn)枚舉過程的步驟,指出采用流程圖的圖塊表示每個(gè)步驟。
教師布置學(xué)習(xí)單任務(wù):將每個(gè)步驟連接起來,用流程圖描述剛才問題解決的完整過程。(如圖1)
學(xué)生補(bǔ)充繪制流程圖。
教師展示學(xué)生的流程圖,分析問題,補(bǔ)充流程控制線,形成完整的流程圖(如圖2)。
教師再次引導(dǎo)學(xué)生理解枚舉算法解決該問題的過程。
設(shè)計(jì)意圖:本環(huán)節(jié)用流程圖描述計(jì)算機(jī)求解詩人關(guān)系的枚舉算法,這是本節(jié)課的重點(diǎn),也是本節(jié)課的難點(diǎn),同時(shí)也是發(fā)展計(jì)算思維的關(guān)鍵。其中,通過對(duì)人工枚舉過程的細(xì)化,幫助學(xué)生進(jìn)一步深化對(duì)枚舉算法的認(rèn)識(shí),理解算法步驟在計(jì)算機(jī)解決問題過程中的作用。最后設(shè)計(jì)得到的完整流程圖,既是本節(jié)課學(xué)習(xí)的關(guān)鍵內(nèi)容,也是后面程序?qū)崿F(xiàn)的重要依據(jù)。
3.項(xiàng)目初體驗(yàn),編寫程序語句實(shí)現(xiàn)枚舉算法
教師引導(dǎo)學(xué)生認(rèn)識(shí)流程圖中算法步驟所對(duì)應(yīng)的關(guān)鍵程序語句(如圖3)。考慮到學(xué)生的基礎(chǔ),教師給出采用Python語言編程的具體語句示范。
師:計(jì)算機(jī)如何判斷古詩里面哪里是作者、題目、詩句呢?
教師以《春曉》這首古詩為例,講授計(jì)算機(jī)用列表的數(shù)據(jù)類型表示古詩的方法(如圖4)。
學(xué)生依據(jù)學(xué)習(xí)單,分組完善Python程序,查找詩人關(guān)系,并填寫表格(如下表)。
教師巡視并及時(shí)發(fā)現(xiàn)問題,針對(duì)共性問題進(jìn)行講解。
設(shè)計(jì)意圖:本環(huán)節(jié)主要是根據(jù)設(shè)計(jì)好的算法進(jìn)行程序?qū)崿F(xiàn)??紤]到學(xué)生之前沒有接觸過Python語句,不太了解相關(guān)程序語句及功能,因此這是本節(jié)課的第二個(gè)教學(xué)難點(diǎn)。為了在短時(shí)間內(nèi)有效突破難點(diǎn),設(shè)計(jì)了兩個(gè)半成品程序,分別指向枚舉算法的兩個(gè)關(guān)鍵點(diǎn),學(xué)生通過補(bǔ)全半成品的程序,關(guān)注枚舉算法的核心實(shí)現(xiàn)。
4.項(xiàng)目實(shí)現(xiàn),修改枚舉算法完善程序
教師展示學(xué)生的程序運(yùn)行結(jié)果并提出疑問:“杜甫提及李白的古詩為10首,但對(duì)比史料記載,杜甫提及李白的古詩為12首,這是為什么呢?”
生:很多詩人都有別稱,詩人乙出現(xiàn)在古詩中的方式可能會(huì)以別稱的方式出現(xiàn)。
師生確定結(jié)果遺漏的解決方案:需要加入對(duì)詩人別稱的檢驗(yàn),應(yīng)該在枚舉過程中,增加一個(gè)判斷檢驗(yàn)條件。
師:如何修改枚舉算法呢?
學(xué)生交流討論并結(jié)合任務(wù)單進(jìn)行思考。
師:算法完善的位置應(yīng)該是A還是B?(如圖5)
生:位置B。
師生共同修改完善程序,完成項(xiàng)目的研究。
學(xué)生圍繞程序運(yùn)行結(jié)果進(jìn)行討論。
師:根據(jù)表格中的數(shù)據(jù),大家有哪些啟發(fā)和結(jié)論呢?
設(shè)計(jì)意圖:本環(huán)節(jié)結(jié)合對(duì)程序運(yùn)行結(jié)果的問題分析,引導(dǎo)學(xué)生關(guān)注程序調(diào)試運(yùn)行的作用,并進(jìn)一步加深對(duì)算法作用的理解,在采用枚舉法解決問題的過程中,驗(yàn)證條件至關(guān)重要。其中,對(duì)項(xiàng)目研究結(jié)果的討論,再次讓學(xué)生從技術(shù)學(xué)習(xí)回歸到真實(shí)的問題解決中,給學(xué)生一種基于數(shù)據(jù)研究唐詩的視角,激發(fā)他們后續(xù)綜合應(yīng)用語文、歷史等學(xué)科知識(shí)進(jìn)行深入探索研究的興趣。
5.項(xiàng)目總結(jié),歸納枚舉算法拓展研究視角
教師總結(jié)本節(jié)課項(xiàng)目研究的過程以及枚舉算法的基本思想,提問:“那枚舉法可以解決生活中所有的問題嗎?”
學(xué)生嘗試歸納枚舉算法適合解決的問題的特點(diǎn)。
師:枚舉法適用于解決求解方案數(shù)量有限、答案可以按照某種規(guī)則一一列舉出來的項(xiàng)目。
枚舉算法是最簡單也是應(yīng)用范圍最廣的一種基本算法,那你認(rèn)為枚舉法還可以解決生活和學(xué)習(xí)中的哪些問題呢?
學(xué)生討論作答。
師:一起來看看下列這些應(yīng)用中,哪些可以采用枚舉法來解決?分析其中對(duì)應(yīng)的枚舉算法兩要素。(如圖6)
學(xué)生分析每個(gè)選項(xiàng),教師引導(dǎo)分析兩個(gè)關(guān)鍵點(diǎn)對(duì)應(yīng)的內(nèi)容。
師:枚舉法可以完成很多項(xiàng)目,如導(dǎo)航地圖中的乘車路線規(guī)劃。需要注意的是,雖然用計(jì)算機(jī)實(shí)現(xiàn)枚舉算法比較高效,但如果確定枚舉范圍太大,數(shù)據(jù)量會(huì)很大,同樣會(huì)消耗大量運(yùn)行時(shí)間,在這種情況下,我們還需要考慮算法效率,優(yōu)化算法,所以也期待大家進(jìn)一步進(jìn)行學(xué)習(xí)。
設(shè)計(jì)意圖:本環(huán)節(jié)的設(shè)計(jì)是對(duì)枚舉算法的延伸和總結(jié)。一方面,引導(dǎo)學(xué)生思考枚舉算法的適用特點(diǎn);另一方面,引導(dǎo)學(xué)生思考在日常生活中的應(yīng)用案例,幫助學(xué)生對(duì)枚舉算法有一個(gè)全面的認(rèn)識(shí)。