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