小议变式教学在信息技术算法与程序设计模块的应用

2018-03-16 09:31赵彩娟
课程教育研究 2018年3期
关键词:最大公约数程序设计变式

赵彩娟

【中图分类号】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

if a(i)

t=a(i):a(i)=a(i-1):a(i-1)=t

end if

next i

low = low + 1

loop

本次课是选考一轮复习课,复习课强调知识点掌握的同时,举一反三,通过这些冒泡排序变式的训练,同学们对冒泡排序有了各种不同的认识,拓展了他们的知识结构,同时更巩固了冒泡排序中心思想内容。“一题数变”,延伸拓展,培养了信息技术学科核心素养中总结利用计算机解决问题,并迁移到与之相关的其他问题解决中的能力。

二、“一题数解”,思维发散

“一题数解”指在算法与程序设计教学中对某一内容设计变式,然后从不同角度、层次寻找不同的方法去解决这个问题。此法可以让不同水平的学生在课堂上充分发挥主观能动性,让每一位学生参与课堂,共同合作,激发求知欲望和创造欲。

【案例2】《求两数最大公约数专题》教学片段

师:今天我们要分析求两数的最大公约数的算法与程序,请问同学们,如果让你求a,b两数的最大公约数,你会怎么求?

生思考

师:请问你还能想出别的方法吗?

生思考

师提问

生1:比较两个数,把小的那个数找出来,大数除以小数,如果能整除,那个该小数就是最大公约数,如果不能整除,那么小数依次往下找,如果该数既能被a整除又能被b整除,那么该数就是我们要找的最大公约数。(穷举法)

生2:先求出a除以b的余数,然后把b赋值给a,把余数赋值给b,再a除以b求余数,直到余数为0,最后的b就是我们要找的最大公约数。(辗转相除法)

师:两种方法了,还有别的方法吗?大家可以求助一下百度。

接着通过网络的帮助,学生又找到了两种算法:更相减损法和质因数分解法。接下来就让学生根据他们总结出的算法编写程序。

课堂在学生的思考和教师的引导下进行,学生真正成为了本堂课的主人。“一题数解”,训练学生的发散思维,并强调课堂同学间的合作学习,有意识的培养信息技术核心素养中“信息意识”之在合作解决问题的过程中,与团队成员共享信息,实现信息最大价值的方面。

三、“数题归一”,挖掘本质

“多题归一”是指在算法与程序设计模块复习中,对于同一类型内容不同题型的归纳分析,最后理解本质知识内容。多题归一的训练是培养学生聚合性思维的重要途径,让课堂的每一个创造过程都成为发散思维和聚合思维的完美结合。很多题目,虽然内容题型各异,但问题的实质相同,即算法相似,这类题目,若能对问题归类分析,抓住所反映的本质特征,进而掌握规律,触类旁通,达到举一反三、事半功倍的教学效果。

如在教学过程中,教师发现在好多的程序中都会运用到整除和求余,故有了下面的一节课。

【案例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个变式来训练学生,实践证明,这样的变式对于学生后面做题的全面性和严谨性都有很大的帮助,把信息技术学科核心素养中的“计算思维”融入在平时的学习和生活的各个方面。

总之,在高三算法与程序设计的复习课堂上运用变式教学,学生能充分发挥主观能动性,调动思维,学生在变式的训练中会慢慢的敢于思考,敢于联想,培养他们的自主探究能力与创新精神,在无穷的变化中探索算法的精髓,形成自己的知识网络,最终科学合理的落實信息技术学科核心素养。

猜你喜欢
最大公约数程序设计变式
一道拓广探索题的变式
聚焦正、余弦定理的变式在高考中的应用
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
课后习题的变式练习与拓展应用
高职高专院校C语言程序设计教学改革探索
问题引路,变式拓展
PLC梯形图程序设计技巧及应用
n个自然数的积与最小公倍数、最大公约数的关系