小议变式教学在信息技术算法与程序设计模块的应用
2018-03-16赵彩娟
赵彩娟
【中图分类号】G633.67 【文献标识码】A 【文章编号】2095-3089(2018)03-0225-02
算法与程序设计之变式教学是指在教学过程中,教师根据学生的知识水平和教学内容,精心设计一系列问题或程序的变式,引导学生的思维逐步朝着预期的结果靠近,即要让学生理解算法与程序设计模块的知识内容、算法思想、编程方法等,又能深刻地体会算法的思维模式,提高学生在实际生活中利用算法思想来解决实际问题的能力,下面笔者是在实际课堂中探索变式教学的运用。
一、“一题数变”,延伸拓展
在教学过程中,笔者经常会发现一些相近的问题或原题隔段时间再给学生解答,很多学生依然无从下手或者做错,我们教师在说学生上课不用心的同时也该反思我们自己的教学,教学设计是否合理、教学过程是否学生都在参与,在讲解例题时,更要关注学生的思维参与度,反思该题是否能设计变式,通过变式训练帮助学生归纳总结出某一类题目最本质的解法,让学生达到举一反三、触类旁通的水平。
【案例1】《冒泡排序之变式探索》教学设计
变1:优化的冒泡排序
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也可以用一个逻辑变量来代替,代码应该怎么改呢?
变3:双向冒泡,程序段如下,请根据题意把下列程序补充完整。
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
如在教学过程中,教师发现在好多的程序中都会运用到整除和求余,故有了下面的一节课。
【案例3】《神奇的整除求余兄弟》教学设计
变1:以下程序段为十进制转八进制,请学生填空:
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:如果是十进制转化成二进制或十六进制,那么只要把8的位置改成2或16就可以了,即十进制转化成n进制,上两式8的位置改成n即可。
变3: (2015浙江学考模拟,3分)小明想编一个反转数字游戏,要用键盘输入一个正整数,然后把该数的每位数字按逆序输出。例如:输入685,则输出586,输入100,则输出001。为实现这一目标,请在程序划线处填入的合适表达式或语句。
Private Sub Command1_Click()
Dim x As Integer
x=InputBox(“请输入一个正整数”)
do While x>0
Print (1) ;
x= (2)
loop
End Sub
答案为(1)x mod 10,(2)x\10
本题通过求余整除得出每个数位上的数。
框线处通过求余整除得到该数位上的数和该数位有没有超过10的结果放入到jiewei变量中。
本课通过三个完全不一样的题目,却需要完全一样的答案的变式训练,不断的强化学生对整除和求余这一知识的认识和理解,引导学生从变的现象中发现不变的本质,从不变中探索规律,逐步培养学生灵活多变的思维品质,增强其应变能力,不断的完善学生做题经验,对学生应付万变的高考试题有很大的帮助,也让学生深刻体会“万变不离其宗”这句话的深刻含义。
四、易错易混,着眼细节
因为学生的知识背景、解题经验、思维方式等都跟教师不同,他们在解题时有可能不能跟教师一样考虑到位或思维产生偏差,这就会出现“解题误区”,因此,教师在算法与程序设计模块复习中若能在易错易混处进行变式教学,就能以误治误,加深理解,训练思维。
【案例4】在某一次的练习讲解课教学片段
当老师讲解下面习题时,课堂出现了争论:
小明编写了一个数据插入程序。程序输入一个数字,将该数字插入一列有序数据:-5,3,4,12,20,45,70,并使数据序列保持有序。设计的算法是从前往后找位置插入。
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),但是部分同学却认为是a(j+1)=a(j)
师:请错误的同学再仔细看看此处for语句的初值。
错误的同学其实是懂这个算法的,但是具体程序细节没有去探究,for语句的初始值是8,a数据在没有插入数据之前只有7个元素,第8个元素是空的。
变1:如果要想答案为a(j+1)=a(j),程序该怎么改。
生1:把for语句改成For j = 7 To i + 1 Step -1
师:同学们在理解整个题目算法的基础上,在填空时要特别注意循环的初始值和终值,自己写好的答案再用初值或终值去代入试试看,有没有相差1的错误。
纵观真题卷和各类的模拟卷,在程序填空题上学生经常出错在+1或-1上面,这样的错误很可惜,学生其实程序是懂的,只是在思维的严谨度上还欠缺些,趁着这次机会,笔者通过3个变式来训练学生,实践证明,这样的变式对于学生后面做题的全面性和严谨性都有很大的帮助,把信息技术学科核心素养中的“计算思维”融入在平时的学习和生活的各个方面。
总之,在高三算法与程序设计的复习课堂上运用变式教学,学生能充分发挥主观能动性,调动思维,学生在变式的训练中会慢慢的敢于思考,敢于联想,培养他们的自主探究能力与创新精神,在无穷的变化中探索算法的精髓,形成自己的知识网络,最终科学合理的落實信息技术学科核心素养。