黃 琴
《枚舉算法》一課的重點是讓學(xué)生理解枚舉算法思想,并用其解決生活中的問題。在前面的教學(xué)中,學(xué)生已理解了算法的特點,學(xué)習(xí)了算法的三種表示方式,對于順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)已經(jīng)有了知識基礎(chǔ),也能閱讀一些簡單的程序段。對于學(xué)生來說,枚舉算法思想比較容易掌握,難點在于如何將枚舉算法思想轉(zhuǎn)變成具體的流程圖,又如何轉(zhuǎn)變成具體的VB程序。教材中以“單據(jù)涂抹”和“包裝問題”兩個實例引入并展開利用枚舉算法解決問題的一般過程。通過上一學(xué)年的教學(xué)實踐,感覺學(xué)生對這兩個實例的學(xué)習(xí)興趣并不高,教學(xué)效果也不很理想。本課設(shè)計打破教材編寫的順序,將教材中第二章的算法與第五章的程序結(jié)合起來組織教學(xué),通過理論結(jié)合實踐,讓學(xué)生更容易理解各種算法的基本設(shè)計思想,體驗編寫程序的成功感受。
一、教學(xué)目標(biāo)
知識與技能:理解枚舉算法的基本思想;學(xué)會用流程圖形式表示枚舉算法;理解由流程圖翻譯成的VB代碼,能上機成功調(diào)試。
過程與方法:通過具體案例分析,理解如何用三步法來解決實際問題;學(xué)會使用枚舉算法解決簡單問題。
情感、態(tài)度與價值觀:感受枚舉算法在日常生活中的廣泛應(yīng)用,培養(yǎng)對算法的興趣;通過小組合作增進(jìn)學(xué)習(xí)交流,培養(yǎng)合作能力。
二、教學(xué)重點與難點
重點:讓學(xué)生理解枚舉算法;培養(yǎng)學(xué)生運用三步法來解決實際問題的能力。
難點:讓學(xué)生理解多種控制結(jié)構(gòu)的嵌套;讓學(xué)生能夠?qū)⒚杜e算法思想轉(zhuǎn)化為流程圖,再將流程圖轉(zhuǎn)化為代碼并上機實踐。
三、設(shè)計思想
算法課一般與枯燥、晦澀、難懂等字眼聯(lián)系在一起,難以激發(fā)學(xué)生的興趣。如何打破這種局面,讓學(xué)生自主學(xué)習(xí)算法呢?
本課的設(shè)計除了遵循算法“自頂而下,逐步求精”的思想之外,新意之處在于,根據(jù)電影情節(jié)別出心裁地創(chuàng)設(shè)了一個“男女主角辨認(rèn)模糊電話號碼”的情境,在故事中不露痕跡地滲透了教學(xué)內(nèi)容。讓學(xué)生融入電影情節(jié),體驗角色的情感,不知不覺地學(xué)會枚舉算法,完成教學(xué)任務(wù)。
四、課前準(zhǔn)備
《向左走向右走》電影片段、枚舉算法的VB演示程序、多媒體網(wǎng)絡(luò)機房
五、教學(xué)過程
1.創(chuàng)設(shè)情境認(rèn)知主題
課前播放電影片段。
師:這是哪部電影中的畫面?
生:《向左走向右走》。
學(xué)生簡述電影的主要情節(jié)。
師:這部電影中講述了金城武飾演的一位小提琴家和梁詠琪飾演的一位翻譯家之間純美的愛情故事。兩人居住在同一幢公寓,中間只隔了一堵墻,卻因為兩人彼此習(xí)慣不同,一個習(xí)慣向左走,一個習(xí)慣向右走,總是不斷擦身而過,不曾相遇。電梯一上一下、月臺上分站兩邊……終于有一天,兩人同時來到公園,在水池旁相遇了。但是天意弄人,兩人在雨中匆忙交換的電話號碼在濕透的紙上模糊一片。
教師展示模糊的電話號碼(如圖1)。
師:如果你是電影中的主人公,這時你該如何找到對方的電話號碼呢?
教師可以請一位姓“金”的男生或姓“梁”的女生回答。
生:像找回密碼箱的密碼一樣,一個個按順序去撥打,如果是對方接的,就說明找對了。
師:很好,“金”同學(xué)。如果換作你,一定能找到對方。從中可以看出,如果要找到一個問題真正的解,必須把所有可能的解都列出來,再一一進(jìn)行檢驗,找到符合條件的解。剛才大家找電話號碼的方法,可以稱為“枚舉算法”。枚舉算法的基本思想是:按問題本身的性質(zhì),一一列舉出該問題所有可能的解,并在逐一列舉的過程中,檢驗每個可能的解是否真正的解,若是,就采納,否則就放棄。
師:通過對枚舉算法思想的理解,你們覺得該算法的關(guān)鍵是什么?
生:一一列舉,逐一檢驗。
師:電影中,男女主角都嘗試去撥了很多電話號碼,為什么沒有成功呢?
生:并沒有一一撥打所有可能的電話號碼。
師:對極了。在列舉的時候一定要遵循“一一列舉、逐一檢驗”的規(guī)律,做到既不遺漏也不重復(fù)。
設(shè)計意圖:引導(dǎo)學(xué)生融入電影情境中,想象自己就是故事的主角,急切地想要找到對方的電話號碼。教師順?biāo)浦?,讓學(xué)生海綿吸水般地學(xué)習(xí)枚舉算法的相關(guān)知識。
2.逐步深入體驗主題
師:這么近的兩個有情人不能相見,編劇也太整人了。今天,老師也來當(dāng)一回編劇,把電話號碼重新編一下,大家來試試看能否找出對方的電話號碼。我們先一起來看看怎么找金城武的號碼。
金城武的電話號碼(22764**5)可以看成是一個8位數(shù)的編號,其百位數(shù)和十位數(shù)處已經(jīng)變得模糊不清了。如果還知道這個8位數(shù)是13的倍數(shù)?,F(xiàn)在要找出所有滿足這個條件的8位數(shù),并統(tǒng)計其個數(shù)。
師:首先,按照枚舉算法的關(guān)鍵步驟一起來分析。步驟一是“一一列舉”。那百位和十位上的數(shù)字有哪些可能?
生:00、01、02……99。
師:還應(yīng)該怎么做?
生:這些數(shù)乘以10再加到22764005這個數(shù)字上。
師:將百位和十位的數(shù)用一個變量J來表示。讓變量J依次取0~99這100個不同的值,接著給J的每個確定的值乘以10加上22764005。這樣,就能形成一個可能解(如圖2)。
師:步驟二是“逐一檢驗”。那檢驗的條件是什么?
生:這個8位數(shù)是13的倍數(shù)。
師:怎么來表示?
生:用13整除,余數(shù)為零,即N Mod 13=0,
師:很好。用這種方法就一定能找到金城武的號碼,而且肯定不會漏下。
設(shè)計意圖:修改電影情節(jié)中的號碼,使之符合教學(xué)要求,也符合生活情境。通過尋找號碼這個過程,使學(xué)生基本能理解用單層循環(huán)枚舉算法解決問題的一般過程。
教師將解決問題的過程分步轉(zhuǎn)化成流程圖(如圖3)。
J為循環(huán)變量,其作用如下:(1)控制循環(huán)是否繼續(xù)進(jìn)行,記錄已經(jīng)執(zhí)行的循環(huán)的次數(shù)。(2)依次產(chǎn)生應(yīng)填在百位和十位上的數(shù)值。
變量N用來存儲一個可能解。
師:判斷框中的條件為J<100,還有其他答案嗎?
生:J<=99。
師:將J的初始值改為1可以嗎?為什么?
生:不可以。因為漏掉了一個可能值22764005。
師:在分析問題時一定要列出所有可能解,既不遺漏,也不重復(fù)。取值范圍可能有多種表示,考慮一定要周密,盡可能使程序簡單、執(zhí)行快速。
設(shè)計意圖:將自然語言一步步轉(zhuǎn)化成流程圖,并分析所使用的變量,為把流程圖轉(zhuǎn)變?yōu)槌绦虼a做準(zhǔn)備。
教師展示將流程圖轉(zhuǎn)化成程序代碼的過程。
3.溫故知新拓展主題
師:金城武的電話是找到了,梁詠琪的電話號碼還沒有解決呢。我們一起再來看看怎樣找梁詠琪的號碼吧!
已經(jīng)知道女主角的電話號碼(2276*2*5)也是一個8位數(shù)的編號,其千位數(shù)和十位數(shù)處已經(jīng)變得模糊不清,但這個8位數(shù)也是13的倍數(shù)。現(xiàn)在要找出所有滿足這些條件的8位數(shù),并統(tǒng)計其個數(shù)。
學(xué)生思考,鄰桌討論。
教師根據(jù)兩個關(guān)鍵步驟,逐步引導(dǎo)學(xué)生解決問題。
師:步驟一是“一一列舉”。千位與十位數(shù)字模糊,列舉時需用兩個變量i和j來表示。i和j怎么變化呢?
生:i從0到9,j從0到9。
師:列舉時需要For循環(huán)語句來一一列舉。
師:步驟二是“逐一檢驗”。檢驗時需要根據(jù)哪個條件來進(jìn)行判斷?
生:if N Mod 13 = 0。
師:選擇If語句(如圖4)來逐一判斷。
設(shè)計意圖:女主角的號碼是一個兩層循環(huán)。學(xué)生再一次體會枚舉算法解決問題的一般步驟和方法,并且理解了雙重循環(huán)。
4.學(xué)以致用實現(xiàn)主題
師:剛才我們一起運用枚舉算法找了男女主角的號碼。下面,請同學(xué)們自己通過編程找出符合條件的電話號碼??凑l用枚舉算法最先完成任務(wù)。教師展示完成后的程序效果(如圖5)。
學(xué)生操作實踐。
女生查找男主角的電話號碼22764**5。
男生查找女主角的電話號碼2276*2*5。
教師巡視,給予個別指導(dǎo)。
設(shè)計意圖:給學(xué)生獨立應(yīng)用枚舉算法的實踐機會,鞏固枚舉算法。在這一環(huán)節(jié),教師為學(xué)生提供了不完整的程序代碼,讓學(xué)生在此基礎(chǔ)上完成編寫程序,體現(xiàn)了分層教學(xué)。
5.總結(jié)算法課堂作業(yè)
教師與學(xué)生一起完成代碼填空。
教師小結(jié)。師生一起回顧枚舉算法的基本思想。
師:取1元、2元和5元的紙幣各10張,使其總和為24元,請輸出所有不同的取法。
六、課后反思
這堂課得到了學(xué)生和聽課老師的好評,我也收獲頗多。經(jīng)過反思,我認(rèn)為以下幾方面很值得去總結(jié)。
1.教學(xué)情境的創(chuàng)設(shè)
枯燥乏味的程序算法課中,如何讓學(xué)生變得愿學(xué)、樂學(xué),一直是信息技術(shù)教師追求的夢想。創(chuàng)設(shè)一個有效的生活化、故事化教學(xué)情境是一件非常困難的事情。不過,算法本來就是源于生活的,如果教師能夠細(xì)心觀察、多多思考,完全可以使算法的課堂變得充滿人情味,生活氣息十足。通過這堂課,我深深地感受到:只有試著去了解學(xué)生,融入學(xué)生,平時多關(guān)心學(xué)生看哪些書、聽哪些音樂、看哪些電影,了解了學(xué)生的興趣愛好,才能掌握他們的情感和心理特點,才能結(jié)合課堂教學(xué)內(nèi)容和教學(xué)目標(biāo),設(shè)計出富有情趣的課堂,從而有效調(diào)動學(xué)生主動探究學(xué)習(xí)的積極性。
2.課堂激勵措施
如何使用激勵措施,也是課堂要考慮的一個問題。在本節(jié)課中,我想到用《向左走向右走》作者幾米先生2008年最新的電子期刊《一個人的旅行》作為獎勵送給表現(xiàn)最突出的小組。同時,幾米的故事引領(lǐng)著每一位欣賞他作品的人看到并相信世界上的美與善,不失為一種情感教育,而作者雖身患癌癥仍積極生活的態(tài)度也很值得學(xué)生學(xué)習(xí),同樣不失教育意義。
3.程序成功的體驗
VB編程設(shè)計既需要設(shè)計界面,又需要編寫代碼、調(diào)試程序。這些工作如果完全讓學(xué)生自主去完成,對于學(xué)生的自主學(xué)習(xí)能力、探究能力的培養(yǎng)固然有幫助,但也會造成整節(jié)課的教學(xué)內(nèi)容無法得到有效落實。所以,可以對基礎(chǔ)較差的學(xué)生提供“半成品”,設(shè)計程序填空,降低編程難度。讓學(xué)生只需完成重點代碼的編寫,就能體驗程序調(diào)試成功的喜悅。對于基礎(chǔ)好的學(xué)生,除了讓其自主設(shè)計程序,還可以設(shè)計拓展任務(wù)。例如,我讓學(xué)生嘗試在程序窗口中插入故事圖片,使程序更美觀。通過這個教材并未涉及的挑戰(zhàn)性任務(wù)的設(shè)計,提高了學(xué)生的技能水平,也達(dá)到了分層教學(xué)的目的。
(作者單位:浙江富陽新登中學(xué))