摘要:隨著信息技術(shù)課程的發(fā)展,計(jì)算思維已經(jīng)成為信息技術(shù)核心素養(yǎng)四要素之一,如何培養(yǎng)學(xué)生具備一定的算法思維能力,已成為每一位信息技術(shù)教師面對(duì)的課題。筆者依托圖例化教學(xué)方式,巧妙搭建了問(wèn)題分析與程序代碼之間的橋梁,培養(yǎng)學(xué)生構(gòu)建算法思維的能力,落實(shí)了計(jì)算思維的培養(yǎng)與提高。
關(guān)鍵詞:核心素養(yǎng);計(jì)算思維;圖例化;算法思維
普通高中信息技術(shù)學(xué)科的核心素養(yǎng)概括為信息意識(shí)、計(jì)算思維、數(shù)字化學(xué)習(xí)與創(chuàng)新、信息社會(huì)責(zé)任四個(gè)要素,其中計(jì)算思維是指?jìng)€(gè)體運(yùn)用計(jì)算機(jī)科學(xué)領(lǐng)域的思想方法,在形成解決問(wèn)題方案的過(guò)程中產(chǎn)生的一系列思維活動(dòng)。本人嘗試以圖例化分析為依托,編制適合計(jì)算思維培養(yǎng)的學(xué)案,培育思維構(gòu)建方法,有效地培養(yǎng)了學(xué)生的計(jì)算思維能力。
一、 現(xiàn)狀分析:忽視計(jì)算思維的算法教與學(xué)
算法問(wèn)題的解決是由問(wèn)題分析、思維構(gòu)建、程序?qū)崿F(xiàn)三部分組成的,這一過(guò)程中算法思維構(gòu)建是關(guān)鍵。然而在實(shí)際教學(xué)活動(dòng)中,教師由于缺乏有效的思維構(gòu)建方式,而不自覺(jué)地將算法思維構(gòu)建簡(jiǎn)單化;學(xué)生會(huì)忽視算法思維對(duì)程序理解的重要作用,反而把機(jī)械的讀程序作為理解和學(xué)習(xí)算法的途徑。于是便會(huì)出現(xiàn)教師無(wú)論怎么教也無(wú)法讓學(xué)生理解算法,學(xué)生不管怎么努力也找不到有效的算法學(xué)習(xí)方式的怪圈。
因此,本人設(shè)計(jì)了圖例教學(xué)法,來(lái)幫助教師開(kāi)展有效的算法思維教學(xué),幫助學(xué)生形成高效的算法思維方式。
二、 探究與實(shí)踐:“展,推,解”,圖例化算法教學(xué)實(shí)踐
圖例教學(xué)法可以靈活運(yùn)用于新課講授、思維構(gòu)建與難題解決等情況,分別采用“展、推、解”三種不同手段,來(lái)解決算法學(xué)習(xí)、問(wèn)題分析和難題解題上碰到的不同問(wèn)題。
(一) 展:循序漸進(jìn),圖例展知識(shí)要點(diǎn)
高中算法教學(xué)中需要學(xué)生掌握解析算法、枚舉算法、排序算法(冒泡排序和選擇排序)、查找算法(順序查找和對(duì)分查找)、遞歸算法等基礎(chǔ)算法。
例如對(duì)分查找算法,我們可以將數(shù)組中的數(shù)據(jù)假想成一列連續(xù)的數(shù)據(jù)塊,而上標(biāo)i、下標(biāo)j和查找位置m的變化可以設(shè)計(jì)成由“←”和偽代碼組成的符號(hào)來(lái)演示:
以查找鍵值key=25為例
算法思想總結(jié)如下:
1. 圖1中,出現(xiàn)了a(m)>key,下標(biāo)j移動(dòng)到m-1的位置上:若a(m)>key,則j=m-1。
2. 圖2中,出現(xiàn)了a(m) 3. 圖3的情況與圖2相同,但是不能將此圖去掉,因?yàn)樗故玖藢?duì)分查找算法是一個(gè)按照固定規(guī)律重復(fù)執(zhí)行的算法:對(duì)分算法是一個(gè)循環(huán)算法。 4. 圖4中,我們可以明顯地看到,上標(biāo)的i已經(jīng)移動(dòng)到下標(biāo)j的下面,此時(shí)算法結(jié)束:采用“Do While i<=j”的結(jié)構(gòu)來(lái)實(shí)現(xiàn)對(duì)分查找。 圖例的演示和總結(jié),還能幫助學(xué)生理解程序設(shè)計(jì)中相應(yīng)的代碼。 偽代碼與圖例的關(guān)系如下: i=∶j=n Do While i<=j由圖4歸納而來(lái) m=(i+j)\\2圖1,圖2中表示 IF a(m)=key ThenExit do歸納得來(lái) IF a(m)>key Thenj=m-1Else i=m+1圖1,圖2中歸納得來(lái) Loop IF i>j Then查找失敗Else輸出查找結(jié)果'從圖4中推論得出 學(xué)生通過(guò)圖例的演算推導(dǎo),不僅理解了對(duì)分查找的思維過(guò)程,理解了標(biāo)準(zhǔn)對(duì)分查找程序代碼中各段代碼的作用,而且對(duì)于對(duì)分查找結(jié)束后結(jié)果判斷表達(dá)式的理解也起到了很重要的作用。 (二) 推:情景再現(xiàn),圖例推思維過(guò)程 實(shí)際情景類(lèi)的算法的問(wèn)題往往以實(shí)際問(wèn)題為背景,此時(shí)的算法是根據(jù)實(shí)際問(wèn)題分析得到的,這類(lèi)算法問(wèn)題才是日常程序設(shè)計(jì)中真正解決的問(wèn)題,也是我們?cè)诮虒W(xué)中要培養(yǎng)的計(jì)算思維的精髓所在。 如題:【摘自金華一中《信息技術(shù)選考全案導(dǎo)學(xué)》】 經(jīng)典的狐貍抓兔子故事:圍繞著山頂有10個(gè)洞,狐貍要吃兔子,兔子說(shuō):“可以,但必須找到我,我就藏身于這下個(gè)洞中,你從10號(hào)洞出發(fā),先到1號(hào)洞找,第二次隔1個(gè)洞找(即3號(hào)洞),第三次隔2個(gè)洞找(即第6號(hào)洞),以后如此類(lèi)推,次數(shù)不限?!钡倧脑绲酵磉M(jìn)進(jìn)出出了1000次,仍沒(méi)有找到兔子。問(wèn)兔子究竟藏在哪個(gè)洞里? 實(shí)現(xiàn)上述功能的程序如下,但加框處代碼有誤,請(qǐng)改正。 Private Sub Command1_Click()Const n = 10Dim hole(10) As Integer Dim i,j,number As IntegerFor i=1 To 10hole(i)=0 Next inumber=0For j=1 To 1000 number=number+1(1)應(yīng)改為 i=number Mod n If i=0 Theni=1(2)應(yīng)改為 hole(i)=1 Next jFor i=1 To nIf hole(i)=0 Then List1. AddItem“兔子可能藏在”& Str(i) &“號(hào)洞”End IfNext iEnd Sub 筆者采用圖例化方式再現(xiàn)狐貍尋找的過(guò)程,幫助學(xué)生理清思路,找到突破口。 圖例設(shè)計(jì)分析: 1. 由于這10個(gè)洞不是線(xiàn)性排列的,而是成環(huán)形的,因此圖例表示時(shí)采用環(huán)形來(lái)表達(dá)各個(gè)洞的排列。 2. 狐貍尋找時(shí)洞穴號(hào)是一個(gè)變化的數(shù)字,且有一定的規(guī)律。 由此得到如下所示的圖例: 問(wèn)題解決: “(1)”處代碼原為“number=number+1”,通過(guò)上面的分析可知number=上一次的洞穴數(shù)+第幾次找洞穴且變量j代表了現(xiàn)在是第幾次找洞穴。
故應(yīng)當(dāng)改為“number=number+j”。
“(2)”處代碼原為“if i=0 Then i=1”,從圖1可以看到當(dāng)尋找洞穴號(hào)為10的時(shí)候(即number=10)時(shí),變量i會(huì)計(jì)算出0,而此時(shí)需要尋找的洞穴是10號(hào)。
故應(yīng)當(dāng)改為“If i=0 Then i=n”或“If i=0 Then i=10”。
我們利用圖例將狐貍尋找兔子的過(guò)程再現(xiàn),即理解了算法設(shè)計(jì)的思維過(guò)程,也通過(guò)圖例總結(jié)出了算法設(shè)計(jì)的關(guān)鍵點(diǎn),再來(lái)解決程序代碼改錯(cuò)也就水到渠成了。
(三) 解:抽絲剝繭,圖例解難題要點(diǎn)
有不少算法雖然給出了具體的算法過(guò)程,但是將這一過(guò)程轉(zhuǎn)化為程序代碼后,難免會(huì)有一些設(shè)計(jì)上的變化,如果學(xué)生能夠在閱讀程序過(guò)程中輔以圖例演算,那么就能夠在難題解決上找到突破口。
如題:【摘自2016年4月浙江省高中學(xué)業(yè)水平統(tǒng)一考試】
某數(shù)據(jù)壓縮方法描述如下:
1)原始數(shù)據(jù)中,某數(shù)不為0且相鄰無(wú)重復(fù),壓縮數(shù)據(jù)用該數(shù)據(jù)表示;2)原始數(shù)據(jù)中,某數(shù)為0且相鄰無(wú)重復(fù),壓縮數(shù)據(jù)用兩個(gè)數(shù)表示,第1個(gè)位0,第2個(gè)位0;3)原始數(shù)據(jù)中,某數(shù)據(jù)相鄰有重復(fù),壓縮數(shù)據(jù)用3個(gè)數(shù)表示:第1個(gè)位0,第2個(gè)為重復(fù)數(shù)的個(gè)數(shù),第3個(gè)為該數(shù)本身;
根據(jù)上述壓縮方法,對(duì)應(yīng)的解壓縮方法示例如圖a所示。
程序運(yùn)行界面如圖b所示。
部分代碼如下:
pa=1∶pb=1Do While pa<=nfirstdata=a(pa)
If firstdata<>0 Then示例1情況處理b(pb)=firstdata
pa=pa+1∶pb=pb+1
Elsecount=a(pa+1)If count=0 Then示例2情況處理
b(pb)=0pa=①∶pb=pb+1Else示例3情況處理
Fori=1 To count②
Next ipa=pa+3∶pb=pb+count
End If
End If
Loop
Text2. Text=Str(b(1))For i=2 To ③
Text2. Text=Text2.Text+,+Str(b(i))
Next i
由于本題中涉及兩個(gè)不同的數(shù)組,且數(shù)組之間有數(shù)據(jù)的賦值,我們可以設(shè)計(jì)上下兩個(gè)圖例來(lái)演示它們的數(shù)據(jù)交換過(guò)程,并用題目中所給的數(shù)據(jù)為演算數(shù)據(jù)。結(jié)合部分程序代碼,我們可以用圖例還原兩個(gè)數(shù)組之間數(shù)據(jù)交換的全部過(guò)程。
問(wèn)題解決:
“①”處代碼為示例2情況下將數(shù)組b賦值完后,兩個(gè)數(shù)組指針pa和pb的移動(dòng),從圖中可以看到對(duì)于示例2需要數(shù)組a中出現(xiàn)兩個(gè)連續(xù)的0,因此處理完成后要跳過(guò)這兩個(gè)0。故答案為:pa=pa+2
“②”處代碼為示例3情況下將數(shù)組a中從pa出發(fā)第3個(gè)元素的值賦值到數(shù)組b中,且要放在count個(gè)元素中。故答案為:b(pb+i-1)=a(pa+3)
“③”處代碼為最后輸出數(shù)組b中的內(nèi)容,從圖中可以看出指示數(shù)組位置的指針pb在每一次完成處理后,肯定會(huì)移動(dòng)到下一次處理的開(kāi)始位置,因此最后統(tǒng)計(jì)數(shù)組b中有多少元素時(shí)只需要將pb-1就可以得到。故答案為:pb-1
該題的算法演變過(guò)程非常的精準(zhǔn),兩個(gè)指針pa和pb的移動(dòng)也非常的講究。我們通過(guò)圖例的方式,完美地將算法思想與程序代碼結(jié)合,即分析了算法中的變化過(guò)程,也讓學(xué)生很容易地理解了算法的代碼,從而順利地解決了題目中的難點(diǎn)。
圖例化教學(xué)的核心在于過(guò)程的展示、思維的推理和模型的解釋?zhuān)茖W(xué)合理地運(yùn)用圖例來(lái)解釋算法、構(gòu)建思路和重現(xiàn)過(guò)程,能夠有效地幫助學(xué)生理解算法的精要。運(yùn)用圖例教學(xué)法遵循了從感性到理性的演變,從感性的圖例來(lái)推導(dǎo)出理性的代碼,更重要的是在問(wèn)題分析過(guò)程中讓學(xué)生體會(huì)到了算法設(shè)計(jì)的真實(shí)思路與思維方式。這是一種能力上的鍛煉與提高,也為我們培養(yǎng)學(xué)生的計(jì)算思維起到了至關(guān)重要的作用。
參考文獻(xiàn):
[1]普通高中信息技術(shù)課程標(biāo)準(zhǔn)(征求意見(jiàn)稿)[S],2016.
[2]陶增樂(lè)等.算法與程序設(shè)計(jì)[M].浙江教育出版社,2005.
作者簡(jiǎn)介:張霖,浙江省義烏市,義烏市第四中學(xué)。endprint