选择排序的算法实现 ——牛人争霸大赛,在游戏中学算法 (钱晓峰 浙江省金华第一中学 0579-83253271 qianxf001@bs178.com) 一、设计思想 在日常的各种游戏活动、娱乐活动中,人们都会不知不觉地使用一些基础算法来解决问题。通过这类课堂活动,我们可以让学生更容易地理解和接受这些算法。"从生活中来、到生活中去、寓教于乐"便是这堂课的主导思想。 二、教材分析 1.《学科教学指导意见》对本课教学内容的要求 初步掌握选择排序算法的程序实现。对于选择排序,除了掌握排序算法本身外,更重要的是排序算法的原理,了解排序算法的特点。 2.本课内容的组成成分和在模块学习中的地位和作用 选择排序是《算法与程序设计》模块中,难度最高的算法之一。学生只有在充分理解和掌握选择排序的算法的前提之下,才能更好使用vb程序语言来实现该算法。所以,本节课在教学的内容上主要由选择排序的算法思想和该算法的程序实现两部分组成。其中,学生对于选择排序的算法思想的理解是前提和基础,也是算法实现过程中难点的突破口。 三、学情分析 1.学生已有的认知水平和能力基础 在学习本课之前,学生已经掌握了必备的vb6.0操作和基础的vb程序设计语言,学生可以使用这些基本技能实现简单的算法。在缙云中学上课前,经过和学生、任课老师的交流,了解到学生已经学过另外一种排序算法,对于排序算法有一定的认识,但对选择排序还很陌生,要用算法实现有一定难度。 2.学生学习本课可能遇到的困难和问题 本课在学习过程中,学生将遇到3个困难。第一,理解选择排序算法,从而归纳出算法流程;第二,在程序实现过程中,查找给定范围内最小的数的位置;第三,两个位置的数据如何实现交换,以及何时需要交换。 3.学生在学习过程中可能采取的各种学习策略 为了帮助学生更好的解决在课堂中可能遇到的问题、解决难点,本堂课使用教学辅助网站设计了多个教学活动。让学生在活动中思考、交流、探究,从而得到问题的答案。在活动中,学生加深了对于选择排序算法的理解,在参与活动的过程中,解决了这些将会遇到的难题。同时,在教学网站中,也提供了相关的一些资料,学生可以根据资料,结合自己活动中得出的结论,与同学一起解决问题。 四、教学目标 1.知识目标: (1)进一步理解和掌握选择排序思想。 (2)初步掌握选择排序算法的程序实现。 2.能力目标:通过实例,掌握使用选择排序算法设计程序解决问题的方法。 3.情感目标:培养学生的竞争意识,实力才是硬道理。 五、重点难点 1. 教学难点:选择排序算法的vb程序实现。 2. 教学重点:对于选择排序算法的理解、程序的实现。 六、教学策略与手段 1. 根据本堂课的主导思想"从生活中来、到生活中去、寓教于乐",设计游戏活动,让学生在游戏中感悟选择排序的算法思想。通过游戏玩法的分析,让学生对选择排序算法的认识从感性层面提升到理性层面,同时让学生注意到该算法的几个关键点(算法实现过程中将遇到的几个难点),在游戏分析过程中解决课程的难点。 2. 使用教学辅助网站,在课堂活动的过程中进行过程性评价。一方面,激发学生的学习兴趣,肯定学生取得的成绩;另外一方面,教师也可以更好的了解学生每一个阶段的学习情况,以调整课堂教学节奏和教学策略。充分发挥了评价对教学的促进作用。 七、课前准备 1.学生的学习准备:按平时习惯就座,便于讨论、交流。 2.教师的教学准备: 架设教学辅助网站e-class信息技术在线课堂。 3.教学用具的设计和准备:准备《牛人争霸大赛》奖品小牛,检查多媒体网络机房、极域网络教学系统以及投影仪等教学用具是否正常。 八、教学过程 (课前两分钟: 播放斗牛视频,调节并奠定课堂气氛。让学生关注到"牛",为教学顺利开展做铺垫。) 1.引入 (2分钟) 教师:刚才大家在视频里看到了很多的? 学生(全体): 牛 教师:牛是怎么叫的? 学生(全体): "哞 "。 教师:这位同学,你给大家示范一下! 学生:"哞 "。 教师:真是牛,你是我今天找到的第一位牛人!谢谢这位同学,请坐。今天,我们要举行一次牛人争霸大赛,找一找我们班里的牛人。 (打开站点的课堂任务栏目,界面见图一) 今天的比赛,分成三关。第一关,谁是"速度之牛";第二关,谁是"思维之牛";第三关,谁是"应用之牛"。只有比赛总得分的前三名——"牛人中的牛人",才能得到这象征"牛王"的"牛娃娃"(展示牛人争霸大赛的奖品)。 想不想要?想要,就让我们来比一比谁更牛!。 图一 任务介绍页面 2. 牛人大赛第一关(5分钟) 教师:(点击第一关链接)今天的所用到资料已经传到大家的电脑的d盘,打开文件夹"牛人争霸大赛"后,请进入第一关文件夹,运行牛人争霸大赛(网络版)(游戏界面见图二)。我们先来了解一下玩法: (1) 输入你的姓名,点击我要报名 (2) 点击开始游戏,这时,上方的中国牛会被分割成6张图片。我们点击任意一张,会把图片移动到当前空白的位置。我们的任务是尽快地把牛拼成原来的形状。系统会记录你的最好成绩。(黄色显示的是你的位置,界面见图三) 要求: (1) 和同桌比比,谁更牛。 (2) 与同学交流,用简洁的语言总结一下你的步骤。 图二 游戏界面 图三 学生完成情况实时反馈 、 学生活动:按要求玩游戏,探索如何可以更快完成游戏。 教师活动:根据辅助网站上的数据,实时通告学生所创造的最快记录,调节气氛,确保每个学生都参与并完成游戏。 3、玩家心得交流 (10分钟) 教师:(所有学生都完成游戏后) 恭喜, 同学,获得"速度之牛"称号,暂时领先。请看第一关的成绩表(打开辅助网站中,第一关的成绩表),这是每一位同学刚才玩游戏的最佳记录。如果我们想知道每一位同学获得了什么名次,那该怎么办? 学生:对成绩进行排序(按使用时间从小到大排序,也称为升序排序)。 教师:我们在生活中,经常会遇到类似需要排序的事情,我们可以用怎样的方法来解决这类问题的?用vb程序又该怎样实现的?(停顿,学生思考的时间)其实,这两个问题的答案我们都可以从刚才的游戏中找到。我们就一起来交流一下游戏心得。 (打开课件01,玩家心得交流) 教师: 这个游戏,我们是通过交换不同位置的图片来解决地。要尽快的完成这个游戏,我们交换的次数就越少越好。我们请"速度之牛",看看他是怎么完成这个游戏的。 这里有牛头、牛脖子、牛前胸、牛肚子、牛尾巴、金币6张图片,你先处理哪张图片? 学生:牛头。 教师:在详细一点,把牛头的图片放哪个位置? 学生:第一个位置。 教师:在放之前,我们肯定还要做一步就是找到牛头,在哪些位置中找? 学生:在第一个到第六个位置中找到牛头,与第一个位置的图片交换。 教师:非常好!(展示课件中关于第一步的描述)同样的方法,第二步呢? 学生:在第二个到第六个位置中,找到牛脖子,与第二个位置的图片交换 教师:类似的方法做几步? 学生:五步。 (展示课件中游戏玩法的五个步骤的描述) 教师:谢谢,速度之牛。他帮我们大家总结了这个游戏的玩法。请坐!有思考才有进步,思考越深入,获得的成果也就越大!(引导学生多思考与算法实现相关的几个问题,以解决算法实现中几个较难理解的知识点。) 教师:现在是6张图片,我们需要5步,那如果有n张图片呢? 学生(全体):n-1步! 教师:第二个问题,6张图片最多交换几次? 学生:5次 教师:什么时候不需要交换? 学生:比如牛头本身已经在第一个位置了就不要交换了。 教师:请大家观察这五步,第 i 步的查找图片的范围是? 学生:第 i 位置到第6个位置。 教师:为什么位置 i 前面的,为什么不查找呢? 学生:在前几步中,已经处理好了,确定是放在位置 i前面了。 教师:生活中就是这样,很简单的东西,只要你去分析就会发现很多有价值的信息。那么,这个方法能解决我们的排序问题么(引导学生将问题的注意力,转移到排序上,"这个方法能排序么?")。 教师:请大家观察(替换带数字的图片) (演示操作) 教师:看来,我们刚才的方法的确是可以实现数据排序的。我们来研究一下6个数字的排序。 学生: 第一步,在第1个到第6个数字中,找到最小的数的位置,与第1个数交换 第二步,在第2个到第6个数字中,找到最小的数的位置,与第2个数交换 …… 第 i 步,在第i个到第6个数字中,找到最小的数的位置,与第i个数交换 …… 第五步,在第5个到第6个数字中,找到最小的数的位置,与第5个数交换 教师: 这种方法,其实就是选择排序。这种算法,逐个位置寻找该放的数据,在每一步处理的过程先找到要放的数据,然后再通过交换放置到目标位置。 6个数,可以处理,那n个数是不是也可以处理啊?(到这里为止,学生通过游戏进一步认识了选择排序,能够用自然语言描述其过程。) 4.牛人大赛第二关 (10分) (在这一关,学生对选择排序的理解将从自然语言描述的层次提升到使用流程图来描述的层次,为真正的算法实现做准备。) 教师:请进入"牛人大赛第二关" ,比比谁更会思考。请同桌之间相互交流,一起完成这个游戏!帮助别人是一件很快乐的事情,我们要给别人能获得这种幸福感的机会! 学生活动:参与并完成第二关任务,在任务中得出选择排序流程图。(4分钟) 教师活动:巡视、指导学生完成任务,同时根据辅助网站实时公布任务完成情况。 (当大部分学生完成该任务后) 教师:恭喜 获得"思维之牛"的称号!我们一起来看一下这一关! (根据任务2讲解n个数用选择发排序的流程。通过讲解,让学生进一步掌握选择法排序的流程。) 教师:请与同桌讨论一下如何实现这个流程,用怎样的程序结构(1分钟,让已经完成的同学思考算法的实现问题,让未完成的同学有完成第二关的时间。) (当所有学生完成第二关,打开算法实现的课件。) 教师:我们一起观察刚才得到的流程图。其中,第 i 步操作是:从位置i到位置n中,找最小的数的位置,与位置i的数据交换。我们可以用怎样的结构来实现? 学生: 循环结构,for语句 for i = 1 to n-1 1. 从位置i到位置n中,找到最小的数的位置。 2. 与位置i的数据交换。 next i 教师:非常好! 我们可以根据这个框架来实现程序。要真正实现,我们还需要解决以下3个问题: 1. 数据怎么存储? (集体回答: 使用数组存储。) 2. 如何从位置i到位置n中,找到最小的数的位置k? (结合第一关的游戏解说,然后由学生回答。) 3. 如何实现两数交换? (结合程序填空,解决这个问题。) 教师:解决了这个问题,我们一起来看一下这个程序(展示选择排序的一段不完整的程序,让学生填空)。 教师:终于知道怎么用程序来实现排序了,我们来解决一下刚才的游戏成绩的排名问题。(回归刚上课时抛给学生的问题,如何实现成绩的排序?让学生用已经学会的知识解决这个问题。) 5.牛人大赛第三关(10分钟) 教师:请进入第三关,打开中国牛(单机版),这是我们刚才玩的游戏的单机版,选手的成绩将进入这个列表。但是呢,这个排名按钮的功能还没有完成,我们要做的就是,实现这个按钮的功能(界面见图四,要完成的功能代码见图五)。 图四 中国牛(单机版) 图五 程序填空 在这个问题中,当前的成绩数量在变量rs中,成绩记录在数组元素 cj(1)-cj(rs)中。 要求: 1. 将数组cj中的数据从小到大排序,把程序补充完整。 2. 程序补充完整后,试着玩一玩这个游戏,使得数据有3组以上,然后测试排序按钮功能是否已经实现。 3. 完成后,请进入站点的课堂自评栏目,完成课堂自评,再研究一下这个程序,看看能不能改成从大到小排序。 学生活动:学生参与并完成第三关的任务。 教师活动1:巡视并指导学生完成任务,并通过教学辅助网站实时通报学生的任务完成情况。 教师活动2:根据学生的完成情况,讲解程序。 (如果有时间,学生再进一步完成第三关与自评) (颁奖前,1分钟完成课堂自评) 6. 课堂小结 (3分钟) (1) 颁奖 教师: 大家已经闯过了牛人争霸大赛的三关,我们来看一下总成绩。恭喜这3位牛人中的牛人,王者中的王者。为3为牛人颁奖。 (2) 总结 教师:我们一起来总结一下今天的收获。 第一点,在今天这节课里,我们看到我们身边牛人很多,我们要做牛人,更要做"牛王"。有想法、有行动、认定目标后能坚持到底的人最牛(牛王)! 第二点,我们今天学会了选择排序,并用vb实现了这个算法。但是,算法是死的,我们要灵活应用,才能取得更好的效果! 第三点,今天大家所用的游戏程序都是用vb编写的,都是些简单的东西,同学们可以拿去参考一下,制作类似的小程序呢?我期待着,期待大家变得"更牛"! 【教学反思】 回顾这堂课,我自己比较满意的有三点。 第一,是在游戏中解决了课堂的难点,让学生学得很轻松。"从生活中来,到生活中去,寓教于乐"这种方法大有可为。 第二,使用辅助站点,实时的反应学生的学习状态进行过程性评价,在这堂课中起到了很大的作用,不仅激发了学生的学习兴趣,也让我能更好的调整课堂策略。 第三,在教学的过程中,适当地引导学生思考、互相帮助,将情感态度与价值观的教育融合到信息技术课堂中,取得了不错的效果。 同时,通过这堂课的教学,我也发现了以下几个有待改进和探讨的问题。 第一,在任务的设计和任务布置时一定得让学生明确要做什么,如何做。在我这堂课中,任务三的处理就不是很到位。由于任务本身的难度和任务布置时没有讲清楚。很多学生在程序填空完成后,不清楚如何去验证这段程序功能是否符合要求,错误地以为程序能运行就说明正确了,最终导致在教学辅助站点上反馈的完成率不高。同时,这也反应出一个问题,学生对于程序测试方法的思考还需加强。 第二, 我们需要用严谨的态度去对待教学。在本堂课的教学过程中,流程图的画法、课堂语言中的一些专业术语的使用等都出现了一些不规范之处。如果对待教学的态度更加严谨一点,那么这些错误就不会出现了。 第三,如何构建一个更加容易普及的教学辅助平台,来实现教学过程中的各种评价。这是一个很值得探讨的问题!一个好的评价平台可以很好的激发学生的学习兴趣,让学生更了解自己,也能让教师根据学生在学习过程中的掌握情况,调整教学策略以取得更好的教学效果。