孫旭萍
(杭州市余杭文昌高級(jí)中學(xué),浙江 杭州)
目前基于技術(shù)素養(yǎng)培養(yǎng)的以實(shí)踐操作為重的課堂教學(xué)不能滿足計(jì)算思維培養(yǎng)的需要。因此,要改變以往教學(xué)的思路和方法,教師在實(shí)施教學(xué)的過程中,必須將計(jì)算思維的培養(yǎng)明確到教學(xué)目標(biāo)中,因?yàn)榻虒W(xué)目標(biāo)是教學(xué)的核心和靈魂,圍繞著教學(xué)目標(biāo),才能順利有效地開展教學(xué)活動(dòng)和評(píng)價(jià)。
枚舉算法是日常學(xué)習(xí)、生活、工作中用到的最普遍和最常規(guī)的算法,而且容易掌握。它利用計(jì)算機(jī)快速運(yùn)算、高準(zhǔn)確性的特點(diǎn),列舉所有可能的情況,并根據(jù)篩選條件進(jìn)行逐一檢查,找到符合條件的答案。讓學(xué)生在經(jīng)歷問題解決的過程中體會(huì)枚舉算法的基本思想和程序?qū)崿F(xiàn)是《課程標(biāo)準(zhǔn)》和《學(xué)科教學(xué)指導(dǎo)意見》對(duì)這個(gè)經(jīng)典算法學(xué)習(xí)的指導(dǎo)性要求。
在教學(xué)設(shè)計(jì)時(shí),筆者將枚舉算法的教學(xué)目標(biāo)確定為:(1)了解枚舉算法的概念和基本思想;(2)能用程序代碼實(shí)現(xiàn)枚舉算法;(3)能運(yùn)用枚舉算法解決生活中的實(shí)際問題,認(rèn)識(shí)到算法和程序設(shè)計(jì)在解決問題過程中的地位和作用。枚舉算法的基本思路可以歸納為八個(gè)字:一一列舉,逐個(gè)檢驗(yàn)。在實(shí)際使用中,“一一列舉”采用循環(huán)語句來實(shí)現(xiàn);“逐個(gè)檢驗(yàn)”采用選擇語句來實(shí)現(xiàn)。關(guān)于編程實(shí)現(xiàn)枚舉算法,根據(jù)枚舉算法的原理和計(jì)算思維處理問題的本質(zhì),可以將問題分解為三個(gè)子目標(biāo):(1)如何確定枚舉對(duì)象和枚舉范圍,做到不能遺漏,也要避免重復(fù);(2)如何確定判斷條件,逐一驗(yàn)證每個(gè)解是否是正確的解;(3)如何使可能解的范圍降至最小,以便提高解決問題的效率。通過以上三個(gè)子目標(biāo)的解決引導(dǎo)學(xué)生建構(gòu)正確的數(shù)學(xué)模型,確定枚舉方案,也是本節(jié)課需要突破的重難點(diǎn)。
這樣將復(fù)雜的算法思想和解決問題的過程分解為若干個(gè)子問題、子目標(biāo)的教學(xué)思路同樣可以應(yīng)用到其他經(jīng)典算法的教學(xué)當(dāng)中,學(xué)生在學(xué)習(xí)目標(biāo)達(dá)成的過程中逐步提升計(jì)算思維的培養(yǎng),體驗(yàn)算法的魅力,加深學(xué)習(xí)算法的欲望。
在生活和學(xué)習(xí)中,人們經(jīng)常會(huì)不經(jīng)意間運(yùn)用“枚舉算法”的基本原理進(jìn)行問題的解決。比如,讓你用一串鑰匙去開一把鎖,但是不知道具體是用哪一把鑰匙,你就會(huì)一把一把地挨個(gè)地逐個(gè)嘗試,直至打開鎖為止。本節(jié)課,筆者設(shè)計(jì)的引入環(huán)節(jié)如下:
【情境】凱凱媽媽將家里的電腦設(shè)置了密碼,并告訴凱凱密碼是四位數(shù)的偶數(shù),并且每個(gè)數(shù)位的數(shù)相同。請(qǐng)通過提示解密打開電腦。
【學(xué)生活動(dòng)】嘗試解開密碼,并說出解開密碼的過程(重點(diǎn)描述思考過程)。
【教師引導(dǎo)】各位同學(xué)嘗試解開密碼的過程就是枚舉算法。
【思維拓展】如果這個(gè)密碼的四個(gè)位數(shù)上的數(shù)不同呢?
筆者通過一個(gè)簡(jiǎn)單的、十分常見的小任務(wù)引入枚舉算法的主題,讓學(xué)生體會(huì)算法并不抽象,使其更有親切感,并親歷枚舉算法解決問題的基本思路:第一步,根據(jù)問題的要求,把所有可能的情況都考慮到,密碼可能是 2222、4444、6666、8888;第二步,對(duì)全部可能的結(jié)果(密碼)逐一進(jìn)行判斷,過濾掉不符合要求的,直至找到正確的結(jié)果(密碼)。利用“思維拓展”的設(shè)置讓學(xué)生體會(huì)到人工窮舉的局限性,發(fā)揮計(jì)算解決問題的優(yōu)勢(shì),引發(fā)學(xué)生思考生活中的例子用計(jì)算機(jī)編程解決的必要性和意義。
在枚舉算法實(shí)例教學(xué)中,采用一個(gè)任務(wù)貫穿整個(gè)教學(xué)過程,這樣可以把一個(gè)問題講透,加深學(xué)生印象,筆者稱之為“主題任務(wù)”。筆者在這一環(huán)節(jié)設(shè)置了以下這些任務(wù):
1.枚舉方案的設(shè)計(jì)及程序?qū)崿F(xiàn)
【情境】最近警方抓獲一批制造偽鈔的犯罪分子,并發(fā)現(xiàn)制造假幣用的模板,但是由于受到損壞,個(gè)位數(shù)和百位數(shù)已經(jīng)模糊不清,我們看到的后六位數(shù)僅僅是519□4□,同時(shí)據(jù)情報(bào)稱,在他們制造的這批假幣中,編號(hào)有一定的規(guī)律,后六位數(shù)能被42整除。請(qǐng)?jiān)O(shè)計(jì)算法挑選出符合要求的人民幣編碼。
【學(xué)生活動(dòng)】以4人小組討論、制定解決方案。
【教師引導(dǎo)】教師引導(dǎo)學(xué)生從以下兩個(gè)方面去思考并制定方案:
(1)先羅列:把各種可能的情況都考慮到,確定人民幣編碼列舉的范圍
(2)后篩選:對(duì)全部可能結(jié)果逐一進(jìn)行判斷,確定篩選條件
【學(xué)生活動(dòng)】小組討論分析問題、完成枚舉算法程序代碼解決問題。
筆者通過思維引導(dǎo)策略有目的性地將計(jì)算思維滲透到任務(wù)的設(shè)置中,啟發(fā)學(xué)生將抽象的概念進(jìn)行數(shù)學(xué)建模,并用循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)進(jìn)行實(shí)現(xiàn)。培養(yǎng)界定問題、抽象特征、建立結(jié)構(gòu)模型、確定算法的計(jì)算思維。以下是在實(shí)際的教學(xué)過程中,大多數(shù)學(xué)生出現(xiàn)的問題分析過程,也在筆者的預(yù)計(jì)之中:
①問題分析
先羅列范圍:這個(gè)6位數(shù)為519040-519949
后篩選條件:a.這個(gè)6位數(shù)的十位是4;
b.這個(gè)6位數(shù)能被42整除
針對(duì)以上問題分析,筆者給出了以下部分關(guān)鍵代碼,并留空,要求學(xué)生完成代碼填空,加強(qiáng)學(xué)生讀程序能力和基本語句應(yīng)用能力。
②程序?qū)崿F(xiàn):完善程序關(guān)鍵代碼。
Dim x as integer,y as integer ′x表示6位整數(shù),y表示十位上的數(shù)字
For x=to____step____
y=x10 mod 10 ′從6位數(shù)x中分離出十位上的數(shù)
If______then
Print x
Endif
Next x
學(xué)生經(jīng)過個(gè)人思考、小組討論,最后以小組討論的形式給出整個(gè)方案,這一過程培養(yǎng)了學(xué)生合作探究能力和計(jì)算思維過程描述能力,讓學(xué)生積極主動(dòng)地參與到課堂中來。任務(wù)進(jìn)行到這里并沒有結(jié)束,筆者再次提出了新的拓展任務(wù):在不遺漏任何一個(gè)正確解的前提下,如何縮小羅列的編碼范圍,從而達(dá)到循環(huán)結(jié)構(gòu)循環(huán)次數(shù)減少的目的,來提高程序的執(zhí)行效率,即實(shí)現(xiàn)程序最優(yōu)化。學(xué)生面臨新的挑戰(zhàn),產(chǎn)生更強(qiáng)烈的思維碰撞,激發(fā)解決問題的興趣,在教師引導(dǎo)、學(xué)生討論的過程中逐步完成以下新方案,進(jìn)一步提升計(jì)算思維:
①問題分析 6位數(shù) 519 m4 n
先羅列范圍:m:1-9 n:0-9
后篩選條件:這個(gè)6位數(shù)能被42整除
②程序?qū)崿F(xiàn):完善程序關(guān)鍵代碼。
Dim m as integer,n as integer ′m表示百位上的數(shù)字,n表示個(gè)位上的數(shù)字
Dim x as integer ′x表示6位整數(shù)
For m=____to____step____
For n=____to____step____
x=519000+100*m+40+n
If______then
print x
Endif
Next n
Next m
這一環(huán)節(jié)任務(wù)的設(shè)置讓學(xué)生認(rèn)識(shí)到枚舉策略的選擇對(duì)枚舉算法執(zhí)行效率的影響,從而突顯計(jì)算思維對(duì)解決問題效率的重要性。培養(yǎng)學(xué)生多維度思考問題的習(xí)慣,提升計(jì)算思維的應(yīng)用。最后筆者又設(shè)置了歸納總結(jié)和枚舉算法應(yīng)用探討的任務(wù)。
2.歸納總結(jié)
【學(xué)生活動(dòng)】(1)通過前面任務(wù)的完成過程歸納枚舉算法解決問題的基本思想
(2)通過連個(gè)方案代碼填空,總結(jié)枚舉算法程序控制結(jié)構(gòu)
(3)聯(lián)系實(shí)際,歸納枚舉算法優(yōu)缺點(diǎn)
3.拓展延伸
【學(xué)生活動(dòng)】思考以下問題能用枚舉算法解決嗎?
(1)有蜘蛛、蜻蜓、蟬三種動(dòng)物共18只,共有腿118條,翅膀20對(duì)(蜘蛛8條腿;蜻蜓6條腿,2對(duì)翅膀;蟬6條腿,1對(duì)翅膀),三種動(dòng)物各幾只?
(2)求高一年級(jí)學(xué)生圖書館借閱人均冊(cè)數(shù)。
(3)如果存在這樣一個(gè)三位數(shù):三位數(shù)等于它的每個(gè)數(shù)位上數(shù)字的立方和,如153=13+53+33,則我們稱此數(shù)為“水仙花數(shù)”。求100~999之間的全部水仙花數(shù)。
【歸納總結(jié)】從問題解決過程中提取歸納枚舉算法適用情況。
整個(gè)課堂教學(xué)中,學(xué)生經(jīng)歷了分析問題、建構(gòu)數(shù)學(xué)模型、確定算法、編程實(shí)現(xiàn)算法的基本過程,并在兩個(gè)枚舉方案的制定過程中領(lǐng)會(huì)枚舉算法解決問題的基本思路、算法優(yōu)化和枚舉算法的適用范圍,在解決問題和完成任務(wù)中提升計(jì)算思維;教師通過組織學(xué)生討論和歸納、思維啟發(fā)等教學(xué)方式來培養(yǎng)學(xué)生的計(jì)算思維,從解決實(shí)際問題中親歷枚舉算法的實(shí)現(xiàn)和知識(shí)的遷移,并且在最后設(shè)置了枚舉算法的現(xiàn)實(shí)應(yīng)用的探究,使算法的學(xué)習(xí)回歸到生活中。
因此,在高中信息技術(shù)課堂中,教師可以采用“主題任務(wù)”的教學(xué)模式來引導(dǎo)學(xué)生學(xué)習(xí),整個(gè)任務(wù)中情境的發(fā)展必須圍繞著利用計(jì)算思維處理問題過程的思路而展開。學(xué)生在“主題任務(wù)”引導(dǎo)下進(jìn)行探究,并且在任務(wù)完成時(shí)總結(jié)出知識(shí)規(guī)律、過程和方法,并將其遷移運(yùn)用到其他的實(shí)際問題中。
在教學(xué)設(shè)計(jì)過程中,為了能夠進(jìn)一步掌握學(xué)生認(rèn)知和技能存在的差異,實(shí)施因材施教,教師要充分地做好備教材、備學(xué)情這一環(huán)節(jié),然后根據(jù)計(jì)算思維培養(yǎng)目標(biāo)進(jìn)行教材的重組,為輔助教學(xué)資源的準(zhǔn)備奠定基礎(chǔ)。
筆者在枚舉算法教學(xué)設(shè)計(jì)的時(shí)候,準(zhǔn)備了自主學(xué)習(xí)任務(wù)單,而且在課前下發(fā),使學(xué)生對(duì)上文中提到的任務(wù)有充分的時(shí)間去思考,為學(xué)生計(jì)算思維的培養(yǎng)和應(yīng)用提供了載體。
教學(xué)資源的開發(fā)和使用情況有時(shí)會(huì)很大程度上影響一節(jié)課的效果,如何激發(fā)學(xué)習(xí)興趣、提高學(xué)生課堂參與度、促進(jìn)學(xué)生學(xué)習(xí)探究等等,都是教師在教學(xué)資源開發(fā)時(shí)需要思考和解決的問題。教學(xué)資源的形式可以多樣化,比如流程圖、程序代碼、自主學(xué)習(xí)任務(wù)單、視頻動(dòng)畫等,對(duì)于高中信息技術(shù)學(xué)科,教學(xué)資源可以更加的豐富。
在課堂教學(xué)結(jié)束時(shí),教師為了檢驗(yàn)學(xué)生知識(shí)點(diǎn)掌握情況,可以創(chuàng)建多元化的評(píng)價(jià)機(jī)制,為后續(xù)課程教學(xué)的設(shè)置和改進(jìn)提供依據(jù)。多元評(píng)價(jià),一方面可以是教師對(duì)學(xué)生的評(píng)價(jià),綜合利用好過程性評(píng)價(jià)和總結(jié)性評(píng)價(jià),在《枚舉算法》一課中,筆者根據(jù)學(xué)生在學(xué)習(xí)過程中的表現(xiàn)以及方案完成情況來評(píng)價(jià)學(xué)生計(jì)算思維解決問題的能力,由于學(xué)生基礎(chǔ)整體較弱,在程序代碼部分采用了留白填空來檢測(cè)學(xué)生對(duì)枚舉算法解決問題的達(dá)成度;另一方面借助學(xué)習(xí)任務(wù)單和評(píng)價(jià)表,完成學(xué)生自評(píng)和互評(píng)。筆者根據(jù)教學(xué)目標(biāo)和計(jì)算思維培養(yǎng)目標(biāo)設(shè)計(jì)了一份發(fā)展性評(píng)價(jià)表(如下表),學(xué)生在進(jìn)行自評(píng)時(shí),就能很清楚地知道自己掌握到什么程度,有利于教師完成教學(xué)設(shè)計(jì)的調(diào)整,進(jìn)而再次強(qiáng)化學(xué)生的計(jì)算思維。
“用枚舉算法解決問題”發(fā)展性評(píng)價(jià)表
計(jì)算思維的培養(yǎng)是高中生解決問題思維能力提升的基本要求,因此教師在課程教學(xué)的過程中一定要注意計(jì)算思維的培養(yǎng)。但是,筆者認(rèn)為高中信息課程中關(guān)于計(jì)算思維的培養(yǎng)和應(yīng)用給予的重視還不夠,僅以《枚舉算法》一課為例,將計(jì)算思維的培養(yǎng)滲透到課程教學(xué)設(shè)計(jì)中,嘗試通過教師引導(dǎo)幫助學(xué)生定義問題、抽象特征、建構(gòu)數(shù)學(xué)模型、設(shè)計(jì)合理算法的過程來形成解決問題的方案,并且在解決問題時(shí)總結(jié)出過程與方法,能夠舉一反三遷移到其他相關(guān)的問題解決之中,為學(xué)生核心素養(yǎng)的提升、解決問題能力的提高打下基礎(chǔ)。