趙彩娟
【中圖分類號(hào)】G633.67 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】2095-3089(2018)03-0225-02
算法與程序設(shè)計(jì)之變式教學(xué)是指在教學(xué)過(guò)程中,教師根據(jù)學(xué)生的知識(shí)水平和教學(xué)內(nèi)容,精心設(shè)計(jì)一系列問(wèn)題或程序的變式,引導(dǎo)學(xué)生的思維逐步朝著預(yù)期的結(jié)果靠近,即要讓學(xué)生理解算法與程序設(shè)計(jì)模塊的知識(shí)內(nèi)容、算法思想、編程方法等,又能深刻地體會(huì)算法的思維模式,提高學(xué)生在實(shí)際生活中利用算法思想來(lái)解決實(shí)際問(wèn)題的能力,下面筆者是在實(shí)際課堂中探索變式教學(xué)的運(yùn)用。
一、“一題數(shù)變”,延伸拓展
在教學(xué)過(guò)程中,筆者經(jīng)常會(huì)發(fā)現(xiàn)一些相近的問(wèn)題或原題隔段時(shí)間再給學(xué)生解答,很多學(xué)生依然無(wú)從下手或者做錯(cuò),我們教師在說(shuō)學(xué)生上課不用心的同時(shí)也該反思我們自己的教學(xué),教學(xué)設(shè)計(jì)是否合理、教學(xué)過(guò)程是否學(xué)生都在參與,在講解例題時(shí),更要關(guān)注學(xué)生的思維參與度,反思該題是否能設(shè)計(jì)變式,通過(guò)變式訓(xùn)練幫助學(xué)生歸納總結(jié)出某一類題目最本質(zhì)的解法,讓學(xué)生達(dá)到舉一反三、觸類旁通的水平。
【案例1】《冒泡排序之變式探索》教學(xué)設(shè)計(jì)
變1:優(yōu)化的冒泡排序
Private Sub Command1_Click()
Dim tmp As Integer, i As Integer, j As Integer, k As Integer
For i = 1 To 9
k = 0
For j = 10 To i + 1 Step -1
If a(j) > a(j - 1) Then
tmp = a(j): a(j-1) = a(j): a(j) = tmp (1)
k = k + 1
End If
Next j
If k > 0 Then i = 10 (2)
Next i
For i = 1 To 10
List2.AddItem Str(a(i))
Next i
End Sub
Private Sub Form_Load()
Dim i As Integer
Randomize
For i = 1 To 10
a(i) = Int(Rnd()?鄢100)
List1.AddItem Str(a(i))
Next i
End Sub
變2:上述程序中的k也可以用一個(gè)邏輯變量來(lái)代替,代碼應(yīng)該怎么改呢?
變3:雙向冒泡,程序段如下,請(qǐng)根據(jù)題意把下列程序補(bǔ)充完整。
low=1:high=n
do while low < high
for i=low to high-1
if a(i)>a(+1) then
t=a(i):a(i)=a(i+1):a(i+1)=t
end if
next i
high = high - 1
for i=high to low+1 step -1
如在教學(xué)過(guò)程中,教師發(fā)現(xiàn)在好多的程序中都會(huì)運(yùn)用到整除和求余,故有了下面的一節(jié)課。
【案例3】《神奇的整除求余兄弟》教學(xué)設(shè)計(jì)
變1:以下程序段為十進(jìn)制轉(zhuǎn)八進(jìn)制,請(qǐng)學(xué)生填空:
Private Sub Command1_Click()
Dim y As Integer
Dim s As String
Dim r As Integer
y = Val(Text1.Text):s = ""
Do While y <> 0
(1)
s = Str(r) + s
(2)
Loop
Text2.Text = s
End Sub
答案:(1)r = y Mod 8, (2)y = y \ 8
變2:如果是十進(jìn)制轉(zhuǎn)化成二進(jìn)制或十六進(jìn)制,那么只要把8的位置改成2或16就可以了,即十進(jìn)制轉(zhuǎn)化成n進(jìn)制,上兩式8的位置改成n即可。
變3: (2015浙江學(xué)考模擬,3分)小明想編一個(gè)反轉(zhuǎn)數(shù)字游戲,要用鍵盤(pán)輸入一個(gè)正整數(shù),然后把該數(shù)的每位數(shù)字按逆序輸出。例如:輸入685,則輸出586,輸入100,則輸出001。為實(shí)現(xiàn)這一目標(biāo),請(qǐng)?jiān)诔绦騽澗€處填入的合適表達(dá)式或語(yǔ)句。
Private Sub Command1_Click()
Dim x As Integer
x=InputBox(“請(qǐng)輸入一個(gè)正整數(shù)”)
do While x>0
Print (1) ;
x= (2)
loop
End Sub
答案為(1)x mod 10,(2)x\10
本題通過(guò)求余整除得出每個(gè)數(shù)位上的數(shù)。
框線處通過(guò)求余整除得到該數(shù)位上的數(shù)和該數(shù)位有沒(méi)有超過(guò)10的結(jié)果放入到j(luò)iewei變量中。
本課通過(guò)三個(gè)完全不一樣的題目,卻需要完全一樣的答案的變式訓(xùn)練,不斷的強(qiáng)化學(xué)生對(duì)整除和求余這一知識(shí)的認(rèn)識(shí)和理解,引導(dǎo)學(xué)生從變的現(xiàn)象中發(fā)現(xiàn)不變的本質(zhì),從不變中探索規(guī)律,逐步培養(yǎng)學(xué)生靈活多變的思維品質(zhì),增強(qiáng)其應(yīng)變能力,不斷的完善學(xué)生做題經(jīng)驗(yàn),對(duì)學(xué)生應(yīng)付萬(wàn)變的高考試題有很大的幫助,也讓學(xué)生深刻體會(huì)“萬(wàn)變不離其宗”這句話的深刻含義。
四、易錯(cuò)易混,著眼細(xì)節(jié)
因?yàn)閷W(xué)生的知識(shí)背景、解題經(jīng)驗(yàn)、思維方式等都跟教師不同,他們?cè)诮忸}時(shí)有可能不能跟教師一樣考慮到位或思維產(chǎn)生偏差,這就會(huì)出現(xiàn)“解題誤區(qū)”,因此,教師在算法與程序設(shè)計(jì)模塊復(fù)習(xí)中若能在易錯(cuò)易混處進(jìn)行變式教學(xué),就能以誤治誤,加深理解,訓(xùn)練思維。
【案例4】在某一次的練習(xí)講解課教學(xué)片段
當(dāng)老師講解下面習(xí)題時(shí),課堂出現(xiàn)了爭(zhēng)論:
小明編寫(xiě)了一個(gè)數(shù)據(jù)插入程序。程序輸入一個(gè)數(shù)字,將該數(shù)字插入一列有序數(shù)據(jù):-5,3,4,12,20,45,70,并使數(shù)據(jù)序列保持有序。設(shè)計(jì)的算法是從前往后找位置插入。
Private Sub Command1_Click()
Dim a(1 To 8) As Integer
Dim n, i, j, x As Integer
list1.Clear
list2.Clear
a(1) = -5: a(2) = 3: a(3) = -4: a(4) = 12: a(5) = 20
a(6) = 45: a(7) = 70
For j = 1 To 7
list1.AddItem Str(a(j))
Next j
x = Val(text1.Text)
Do While x > a(i) And i < 8
i = i + 1
Loop
For j = 8 To i + 1 Step -1
________________
Next j
a(i) = x
For j = 1 To 8
list2.AddItem Str(a(j))
Next j
End Sub
正確答案是a(j)=a(j-1),但是部分同學(xué)卻認(rèn)為是a(j+1)=a(j)
師:請(qǐng)錯(cuò)誤的同學(xué)再仔細(xì)看看此處for語(yǔ)句的初值。
錯(cuò)誤的同學(xué)其實(shí)是懂這個(gè)算法的,但是具體程序細(xì)節(jié)沒(méi)有去探究,for語(yǔ)句的初始值是8,a數(shù)據(jù)在沒(méi)有插入數(shù)據(jù)之前只有7個(gè)元素,第8個(gè)元素是空的。
變1:如果要想答案為a(j+1)=a(j),程序該怎么改。
生1:把for語(yǔ)句改成For j = 7 To i + 1 Step -1
師:同學(xué)們?cè)诶斫庹麄€(gè)題目算法的基礎(chǔ)上,在填空時(shí)要特別注意循環(huán)的初始值和終值,自己寫(xiě)好的答案再用初值或終值去代入試試看,有沒(méi)有相差1的錯(cuò)誤。
縱觀真題卷和各類的模擬卷,在程序填空題上學(xué)生經(jīng)常出錯(cuò)在+1或-1上面,這樣的錯(cuò)誤很可惜,學(xué)生其實(shí)程序是懂的,只是在思維的嚴(yán)謹(jǐn)度上還欠缺些,趁著這次機(jī)會(huì),筆者通過(guò)3個(gè)變式來(lái)訓(xùn)練學(xué)生,實(shí)踐證明,這樣的變式對(duì)于學(xué)生后面做題的全面性和嚴(yán)謹(jǐn)性都有很大的幫助,把信息技術(shù)學(xué)科核心素養(yǎng)中的“計(jì)算思維”融入在平時(shí)的學(xué)習(xí)和生活的各個(gè)方面。
總之,在高三算法與程序設(shè)計(jì)的復(fù)習(xí)課堂上運(yùn)用變式教學(xué),學(xué)生能充分發(fā)揮主觀能動(dòng)性,調(diào)動(dòng)思維,學(xué)生在變式的訓(xùn)練中會(huì)慢慢的敢于思考,敢于聯(lián)想,培養(yǎng)他們的自主探究能力與創(chuàng)新精神,在無(wú)窮的變化中探索算法的精髓,形成自己的知識(shí)網(wǎng)絡(luò),最終科學(xué)合理的落實(shí)信息技術(shù)學(xué)科核心素養(yǎng)。