《枚举算法》教学案例
2009-03-02黄琴
黄 琴
《枚举算法》一课的重点是让学生理解枚举算法思想,并用其解决生活中的问题。在前面的教学中,学生已理解了算法的特点,学习了算法的三种表示方式,对于顺序、选择、循环三种基本控制结构已经有了知识基础,也能阅读一些简单的程序段。对于学生来说,枚举算法思想比较容易掌握,难点在于如何将枚举算法思想转变成具体的流程图,又如何转变成具体的VB程序。教材中以“单据涂抹”和“包装问题”两个实例引入并展开利用枚举算法解决问题的一般过程。通过上一学年的教学实践,感觉学生对这两个实例的学习兴趣并不高,教学效果也不很理想。本课设计打破教材编写的顺序,将教材中第二章的算法与第五章的程序结合起来组织教学,通过理论结合实践,让学生更容易理解各种算法的基本设计思想,体验编写程序的成功感受。
一、教学目标
知识与技能:理解枚举算法的基本思想;学会用流程图形式表示枚举算法;理解由流程图翻译成的VB代码,能上机成功调试。
过程与方法:通过具体案例分析,理解如何用三步法来解决实际问题;学会使用枚举算法解决简单问题。
情感、态度与价值观:感受枚举算法在日常生活中的广泛应用,培养对算法的兴趣;通过小组合作增进学习交流,培养合作能力。
二、教学重点与难点
重点:让学生理解枚举算法;培养学生运用三步法来解决实际问题的能力。
难点:让学生理解多种控制结构的嵌套;让学生能够将枚举算法思想转化为流程图,再将流程图转化为代码并上机实践。
三、设计思想
算法课一般与枯燥、晦涩、难懂等字眼联系在一起,难以激发学生的兴趣。如何打破这种局面,让学生自主学习算法呢?
本课的设计除了遵循算法“自顶而下,逐步求精”的思想之外,新意之处在于,根据电影情节别出心裁地创设了一个“男女主角辨认模糊电话号码”的情境,在故事中不露痕迹地渗透了教学内容。让学生融入电影情节,体验角色的情感,不知不觉地学会枚举算法,完成教学任务。
四、课前准备
《向左走向右走》电影片段、枚举算法的VB演示程序、多媒体网络机房
五、教学过程
1.创设情境认知主题
课前播放电影片段。
师:这是哪部电影中的画面?
生:《向左走向右走》。
学生简述电影的主要情节。
师:这部电影中讲述了金城武饰演的一位小提琴家和梁咏琪饰演的一位翻译家之间纯美的爱情故事。两人居住在同一幢公寓,中间只隔了一堵墙,却因为两人彼此习惯不同,一个习惯向左走,一个习惯向右走,总是不断擦身而过,不曾相遇。电梯一上一下、月台上分站两边……终于有一天,两人同时来到公园,在水池旁相遇了。但是天意弄人,两人在雨中匆忙交换的电话号码在湿透的纸上模糊一片。
教师展示模糊的电话号码(如图1)。
师:如果你是电影中的主人公,这时你该如何找到对方的电话号码呢?
教师可以请一位姓“金”的男生或姓“梁”的女生回答。
生:像找回密码箱的密码一样,一个个按顺序去拨打,如果是对方接的,就说明找对了。
师:很好,“金”同学。如果换作你,一定能找到对方。从中可以看出,如果要找到一个问题真正的解,必须把所有可能的解都列出来,再一一进行检验,找到符合条件的解。刚才大家找电话号码的方法,可以称为“枚举算法”。枚举算法的基本思想是:按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能的解是否真正的解,若是,就采纳,否则就放弃。
师:通过对枚举算法思想的理解,你们觉得该算法的关键是什么?
生:一一列举,逐一检验。
师:电影中,男女主角都尝试去拨了很多电话号码,为什么没有成功呢?
生:并没有一一拨打所有可能的电话号码。
师:对极了。在列举的时候一定要遵循“一一列举、逐一检验”的规律,做到既不遗漏也不重复。
设计意图:引导学生融入电影情境中,想象自己就是故事的主角,急切地想要找到对方的电话号码。教师顺水推舟,让学生海绵吸水般地学习枚举算法的相关知识。
2.逐步深入体验主题
师:这么近的两个有情人不能相见,编剧也太整人了。今天,老师也来当一回编剧,把电话号码重新编一下,大家来试试看能否找出对方的电话号码。我们先一起来看看怎么找金城武的号码。
金城武的电话号码(22764**5)可以看成是一个8位数的编号,其百位数和十位数处已经变得模糊不清了。如果还知道这个8位数是13的倍数。现在要找出所有满足这个条件的8位数,并统计其个数。
师:首先,按照枚举算法的关键步骤一起来分析。步骤一是“一一列举”。那百位和十位上的数字有哪些可能?
生:00、01、02……99。
师:还应该怎么做?
生:这些数乘以10再加到22764005这个数字上。
师:将百位和十位的数用一个变量J来表示。让变量J依次取0~99这100个不同的值,接着给J的每个确定的值乘以10加上22764005。这样,就能形成一个可能解(如图2)。
师:步骤二是“逐一检验”。那检验的条件是什么?
生:这个8位数是13的倍数。
师:怎么来表示?
生:用13整除,余数为零,即N Mod 13=0,
师:很好。用这种方法就一定能找到金城武的号码,而且肯定不会漏下。
设计意图:修改电影情节中的号码,使之符合教学要求,也符合生活情境。通过寻找号码这个过程,使学生基本能理解用单层循环枚举算法解决问题的一般过程。
教师将解决问题的过程分步转化成流程图(如图3)。
J为循环变量,其作用如下:(1)控制循环是否继续进行,记录已经执行的循环的次数。(2)依次产生应填在百位和十位上的数值。
变量N用来存储一个可能解。
师:判断框中的条件为J<100,还有其他答案吗?
生:J<=99。
师:将J的初始值改为1可以吗?为什么?
生:不可以。因为漏掉了一个可能值22764005。
师:在分析问题时一定要列出所有可能解,既不遗漏,也不重复。取值范围可能有多种表示,考虑一定要周密,尽可能使程序简单、执行快速。
设计意图:将自然语言一步步转化成流程图,并分析所使用的变量,为把流程图转变为程序代码做准备。
教师展示将流程图转化成程序代码的过程。
3.温故知新拓展主题
师:金城武的电话是找到了,梁咏琪的电话号码还没有解决呢。我们一起再来看看怎样找梁咏琪的号码吧!
已经知道女主角的电话号码(2276*2*5)也是一个8位数的编号,其千位数和十位数处已经变得模糊不清,但这个8位数也是13的倍数。现在要找出所有满足这些条件的8位数,并统计其个数。
学生思考,邻桌讨论。
教师根据两个关键步骤,逐步引导学生解决问题。
师:步骤一是“一一列举”。千位与十位数字模糊,列举时需用两个变量i和j来表示。i和j怎么变化呢?
生:i从0到9,j从0到9。
师:列举时需要For循环语句来一一列举。
师:步骤二是“逐一检验”。检验时需要根据哪个条件来进行判断?
生:if N Mod 13 = 0。
师:选择If语句(如图4)来逐一判断。
设计意图:女主角的号码是一个两层循环。学生再一次体会枚举算法解决问题的一般步骤和方法,并且理解了双重循环。
4.学以致用实现主题
师:刚才我们一起运用枚举算法找了男女主角的号码。下面,请同学们自己通过编程找出符合条件的电话号码。看谁用枚举算法最先完成任务。教师展示完成后的程序效果(如图5)。
学生操作实践。
女生查找男主角的电话号码22764**5。
男生查找女主角的电话号码2276*2*5。
教师巡视,给予个别指导。
设计意图:给学生独立应用枚举算法的实践机会,巩固枚举算法。在这一环节,教师为学生提供了不完整的程序代码,让学生在此基础上完成编写程序,体现了分层教学。
5.总结算法课堂作业
教师与学生一起完成代码填空。
教师小结。师生一起回顾枚举算法的基本思想。
师:取1元、2元和5元的纸币各10张,使其总和为24元,请输出所有不同的取法。
六、课后反思
这堂课得到了学生和听课老师的好评,我也收获颇多。经过反思,我认为以下几方面很值得去总结。
1.教学情境的创设
枯燥乏味的程序算法课中,如何让学生变得愿学、乐学,一直是信息技术教师追求的梦想。创设一个有效的生活化、故事化教学情境是一件非常困难的事情。不过,算法本来就是源于生活的,如果教师能够细心观察、多多思考,完全可以使算法的课堂变得充满人情味,生活气息十足。通过这堂课,我深深地感受到:只有试着去了解学生,融入学生,平时多关心学生看哪些书、听哪些音乐、看哪些电影,了解了学生的兴趣爱好,才能掌握他们的情感和心理特点,才能结合课堂教学内容和教学目标,设计出富有情趣的课堂,从而有效调动学生主动探究学习的积极性。
2.课堂激励措施
如何使用激励措施,也是课堂要考虑的一个问题。在本节课中,我想到用《向左走向右走》作者几米先生2008年最新的电子期刊《一个人的旅行》作为奖励送给表现最突出的小组。同时,几米的故事引领着每一位欣赏他作品的人看到并相信世界上的美与善,不失为一种情感教育,而作者虽身患癌症仍积极生活的态度也很值得学生学习,同样不失教育意义。
3.程序成功的体验
VB编程设计既需要设计界面,又需要编写代码、调试程序。这些工作如果完全让学生自主去完成,对于学生的自主学习能力、探究能力的培养固然有帮助,但也会造成整节课的教学内容无法得到有效落实。所以,可以对基础较差的学生提供“半成品”,设计程序填空,降低编程难度。让学生只需完成重点代码的编写,就能体验程序调试成功的喜悦。对于基础好的学生,除了让其自主设计程序,还可以设计拓展任务。例如,我让学生尝试在程序窗口中插入故事图片,使程序更美观。通过这个教材并未涉及的挑战性任务的设计,提高了学生的技能水平,也达到了分层教学的目的。
(作者单位:浙江富阳新登中学)