《算法的概念与描述》教学设计谷爱清
2019-10-21曹恒来
曹恒来
学习内容分析
算法就是解决问题的方法与步骤。程序设计时,首先分析所要解决的问题,然后进行算法设计,再选用一种计算机语言来描述算法,形成计算机程序,因此算法是程序设计的基础。设计了一个算法之后,不能只是心知肚明,还必须准确清楚地将它记录下来,或提供交流,或依靠它来编写程序。描述算法的方法有很多,常用的有自然语言、流程图、伪代码等。解决同一个问题的算法可能有多种,也会有优劣之分。
学习者分析
本课的学习对象是八年级学生,他们处于皮亚杰认知理论阶段的形式运算阶段,好奇心强,有—定的探索能力和表达欲望,并且能够在原有知识的基础上进行迁移,生活中也接触过各种各样的“算法”。但是,绝大多数学生没有接触过程序设计,即使接触过程序设让也不够熟悉。很少有学生用计算机实现过算法,从生活算法出发,可以帮助学生形成算法的概念,但难以形成全面、透彻的认识。虽然在日常生活中经常遇到各种各样的流程图,但对流程图的认识只是停留在直观感受的层面,也不知道如何规范地使用流程图符号来描述算法。
学习目标
(1)理解算法的概念,明确算法对于程序设计的重要性。
(2)学会使用自然语言和流程图描述算法。
(3)理解算法的三种基本结构
(4)在用不同方法解决查找问题的过程中,体会算法的效率。
教学重点及难点
教学重点:使用自然语言和流程图描述算法,明确算法对于程序设计的重要性。
教学难点:使用流程图描述算法。
教学过程
1.感知生活,走进算法
腹有诗书气自华,最是书香能致远。读书可以让人保持思想活力,让人得到智慧启发,让人滋养浩然之气。
活动1:为了营造良好的阅读环境,小明去新华书店为班级采购图书。思考以下问题:
(1)生活中买书的流程是什么?(①选书;②付款)
(2)购买了某种图书后,如何计算付款额?(①已知购书数量和图书单价;②将数量乘以单价;③得出付款额)
小结:这种为解决一个问题而采取的方法和步骤,就称为算法。买书的流程、计算付款额的步骤,其实就是算法。
设计意图:通过计算图书的付款额这个“现实”中的问题,引导学生对问题进行分析,找到解决问题的方法和步骤,感知生活中的算法,从而揭开算法的神秘面纱,初步建立算法的概念。
2.解决问题,描述算法
为便于交流,设计好算法之后,还必须把它准确清楚地表示出来。描述算法的方法有多种,活动1采用的是自然语言也就是日常生活中使用的汉语、英语等语言。还可以用流程图描述算法,流程图是用一组规定式样的几何图形、简明扼要的文字和带箭头的流线来表示算法。
活动2:用流程图描述“计算图书付款额”的算法(如图1)。
(1)结合生活经验,说一说表1中各流程图符号的作用。
(2)教师演示“画程”软件中的图标工具及使用方法。学生参照自然语言描述的算法,尝试绘制“计算图书付款额”的流程图。(图书数量为x,单价为y,付款额为pay)
(3)观察并执行“计算图书付款金额”流程图,总结该算法的结构特点。
小结:①算法可以用自然语言和流程图来进行描述;②这个流程图中的各个操作能够按照自上而下的顺序执行,因此称为顺序结构。
活动3:“五一”到了新华书店搞优惠促销活动,全场享受九折优惠,凡购书满200元打八五折。请用流程图来描述优惠购书时计算付款额的算法。
(1)用自然语言描述打折算法。
①输入书的数量x(本)和单价y(元);
②计算pay=xy;
③判断:如果()成立,则打九折,pay pay*0.9,否则打八五折,();
④輸出付款金额payo
(2)参照自然语言描述的算法,使用“画程”软件绘制流程图(如图2),执行该流程图,输入不同的购书数量及单价,思考:
①这个流程图中是用哪种图形符号实现条件判断?
②这个问题中的条件是什么?条件成立时执行什么操作?不成立又执行什么操作?
小结:虚线框内利用“判断选择”框对条件进行判断,根据给定的条件是否成立,从两个分支路径中选择执行其中之一,这种控制结构称为分支结构(或选择结构)。
活动4:小明在新华书店看到了多种喜爱的图书,决定全部购买下来,又该如何计算付款额呢?
(1)思考分析:
①假如小明买了两种图书,如何计算付款额?购买多种图书时,又如何计算付款额呢?
②如何实现循环?又该如何结束循环?(以输入的图书数量0作为结束循环的标志)
(2)请用自然语言描述该算法。
①付款额pay清0;
②输入书的数量x(本)和单价y(元);
③如果()成立,则:
计算pay=x*y+pay.();
回到③,重复执行;
否则结束循环;
④输出付款金额pay
(3)使用“画程”软件绘制流程图(如图3),执行流程图,输入各种图书的数量及单价,思考:
①用什么图形符号可以描述重复执行的过程?
②该流程图是如何执行的?
小结:虚线框内利用“判断循环”框对条件进行判断,若条件成立,重复执行某个操作,这种控制结构称为循环结构。
通过计算图书付款额系列问题,我们发现:①自然语言描述算法容易理解;②流程图描述算法直观、简洁、易懂,并且逻辑关系清晰;③算法有三种基本结构,即顺序结构、分支结构和循环结构。在实际编程过程中常将这三种结构进行组合以实现各种算法。
设计意图:从分析计算图书付款额的问题出发,分别利用自然语言及流程图来描述算法,体会自然语言、流程图描述算法的特点。在解决计算“购买一种图书付款额”“优惠购书”“购买多种图书”付款额等系列问题过程中,理解算法的三种基本结构,学生分析问题、解决问题的能力也得到提升。选用“画程”工具来绘制流程图,学生只需用拖拽图标的方式就能轻松地绘制流程图,而且这个流程图是可以执行的,以验证算法是否可行,使得算法学习能够以“学生”和“思维”为中心,在没有接触程序设计语言的情况下也能够研究和设计算法,大大降低了算法学习的门槛。
3.实例分析,再认算法
前面图书的单价都是由用户输入的,而在实际生活中,往往是通过输入商品编码,从数据库中查找对应商品的单价。
活动5:根据图书ISBN编码,在表2“图书信息表”中查找图书单价(表中的图书信息是按照图书ISBN编码从小到大排序的)。如果查找到该图书信息,则输出单价,如果没有查找到,则输出“未入库!”。请你设计一种实现图书单价查询的算法。
(1)先结合日常经验说一说你的查找方法。
(2)选择几种图书,使用你所选定的查找方法,根据"ISBN编码”在“图书信息表”中查找该编码对应的单价,并记录相关数据,如表3。
(3)与同学交流,比较各种查找算法的效率。
小结:解决问题的算法可能有多种,不同的算法有优有劣,这当中的差异甚至可以很大。我们在设计算法时要尽可能地对算法进行优化,以提高程序的效率。
设计意图:通过按码索价活动初步体验算法的应用,感受算法的价值。各组学生根据搭建的支架探究解决查找问题的方法,如顺序查找和二分查找。通过这些查找方法的比较,学生感受到同一个问题可能有多种解决方法,而且方法也有优劣之分,优秀算法能提高解决问题的效率,从而更好地理解“算法是程序的灵魂”这句话的含义。
4.思维导图,梳理知识
课件展示,引导学生利用思维导图对算法知识加以梳理(如上页图4)。
结束语:算法是程序的灵魂。在用计算机编程解决问题时,首先要分析问题,确定算法,然后才能用计算机语言编写程序。著名计算机科学家李国杰院士对算法作了精辟论述:“算法设计是人类智慧的结晶,计算机的知识创新,主要就是算法的创新,创建一种新算法其意义不亚于建造一种新机型。”
设计意图:借助思维导图,引导学生将关键知识点整合并以结构化方式呈现,进一步巩固学生的认知结构。最后借用李国杰院士的一段话作结束语,凸显出算法是程序的灵魂,让学生更加清晰地了解算法在程序设计中的地位和作用,为后续学习做好铺垫。
点评
在信息化社会中,生产、生活中许多问题的解决需要运用各种信息化设备,这些设备的运作都是靠人用程序来指挥的,而程序只是用某种计算机语言所描述或表示的算法。所以说,算法是计算机信息处理的核心和基础。掌握算法的基本思想,可以更好地理解这些信息化设备的内在运行机制,从而更有利于掌握各种信息化设备的应用,更陕适应时代的步伐。算法是对特定问题求解步骤的一种精确描述,算法这种确定性的特征,使得算法的学习对提高学生逻辑思维能力具有直接的促进作用。然而,初学者对算法概念及流程图的图形符号既熟悉又陌生,老师的教学往往过于注重算法形式的学习而淡化对算法本质的理解,学生虽然也能明白教科书上的算法案例,却不能正确应用算法来解决问题。本节课克服了上述不足,其教学具有以下几个方面的特色:
一是关注了计算机算法的本质特征。算法可分为三种形式:第一种是生活算法,即完成某一项工作的方法和步骤;第二种是数学算法,即数学运算法则和解题规则;第三种是计算机算法,即求解某一类问题的一个运算序列。由于生活算法与计算机算法有非常相似的地方,许多老师常常使用生活算法来类比计算机算法,例如“狼羊过河”的问题,通过游戏的方式模拟狼羊过河的步骤引出算法的概念,这里呈现的过河的过程并不是算法实施的结果,这个问题实际上人事先已经解决好了。而计算机算法则强调通过一系列的运算之后,由计算机输出问题解决的结果,例如在用递归法解决“汉诺塔”问题时,计算机给出的移动金盘的过程就是算法实施的結果,所以说,计算机算法实际上是使用机械化的方法进行问题的自动求解,我们并不能简单地把生活算法映射到计算机算法。本课则回到了计算机信息处理的原始含义——数值计算,通过计算图书付款额这个“现实”中的问题,引导学生对问题进行分析,找到解决问题的方法和步骤,其中内隐了计算机解决问题的基本过程,即输入信息
处理输出信息,既引出了算法的概念,又较好地体现.了计算机算法的本质。
二是创设真实的问题情境。以往的算法教学,算法的三种基本结构常常以去情境化的方式教给学生,学生未能经历可信可靠的“真正的学习”,难以形成篇决实际问题的能力。本课则创设了“计算图书付款额”的真实问题,设计了系列的四个活动:活动1对“购买图书付款”的—般过程进行分析,通过用自然语言精确描述解决这个问题的步骤,引出算法的概念;活动2则将活动1中用自然语言描述的算法转化为流程图,在实施算法的过程中引导学生发现顺序结构;活动3中学生在对优惠购书方式分析的基础上,尝试用分支结构描述算法,以解决优惠购书问题;活动4是用循环结构解决“计算多种图书付款额”问题。学生在不断尝试的过程中,逐步学会运用算法解决实际问题,理解和掌握算法的三种基本结构。三个子问题的复杂度是不断增加的,学生又较好地体会到了运用迭代思维解决复杂问题的思路和方法。
三是使用画程工具降低算法学习的门槛。算法学习存在两大障碍:一是在用自然语言描述算法之后,怎么把它转化为流程图,无论是用纸笔,还是用wbrd、visio等软件,都比较费时费力;二是画好的流程图,怎么转化为程序?流程图是人与人之间交流算法思想的工具,对于初学者来说,还不会编写程序,因此无法写出代码验证算法,最终使算法学习沦为纸上谈兵。画程软件较好地解决了这两个问题,只用拖拽图标的方式就能轻松地绘制流程图,这个流程图还是可以执行的,学生能够通过算法的实施来检验问题解决的效果,那么在研究和设计算法时,就可以暂时不理会程序设计的细节,只需专注于算法思想,大大降低了算法学习的门槛。
四是通过实验体会算法在程序设计中的地位和作用。对于同一个问题,可能有多种算法,这些算法虽然功能相同,但性能却可能不完全一样,也就是说,算法有优劣之分。最后的“按码索价”活动,通过思想实验的方式进行推演,在没有编程的情况下,对“顺序查找”和“二分查找”这两种算法进行比较,感受优秀的算法可以提高解决问题的效率,从而真正理解“算法是程序的灵魂”这句话的含义。