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