编者按:本栏目特邀教育部基础教育课程教材专家工作委员会成员、普通高中信息技术课标修订核心组成员、四川省教育科学研究所技术教育研究室主任、正高级教师、特级教师李维明主持,望大家踊跃参与研究与讨论(联系邮箱:358211798@qq.com)。
主题阐释
算法是普通高中信息技术内容体系中重要的大概念,它是一个有穷规则的集合,其中之规则规定了解决某一特定类型问题的一个运算系列;而计算是指数据在运算符的操作下,按规则进行的数据变换。这里无论是算法还是计算都提到了“规则”,可以理解为算法规定了任务执行或问题求解的一系列步骤,而计算是这些任务执行或问题求解的具体实现。
在教学中我们不必为算法、计算的概念去绕口地解释,而应当领会其实质,利用计算机的优势特点去设计解决问题的规则和实现的方法。例如,累加器S=S+X,就利用了变量赋值的特点实现了迭代的方法;斐波那契数列问题,使用了递归的思路;等等。这些都需要教师在教学中引导学生思考:如何建立模型,实现有效的自动计算?如何方便、高效地实现自动计算?编程是解决具体问题的途径之一。
本期提供的三个案例,分别用不同的应用实例,让学生体验编程计算,初步了解算法。
教學案例
案例1:用“割圆术”计算圆周率
学业要求:能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题,运用算法设计解决问题的方案,能使用编程语言实现这一方案,把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案。
知识要点:割圆术,迭代算法,近似值,精度。
教学方法:通过自主学习、推导分析、归纳总结,了解用“割圆术”计算圆周率的思想与方法;并通过运行观察程序,感知计算机近似运算的高效。
活动步骤:
①教师展示从古至今,不同的人对π的推导和计算到的数字。②给学生阅读材料,自主学习“割圆术”的思想方法。③请学生计算半径为1的圆的内接三角形的面积。④请学生计算半径为1的圆的内接六边形的面积。 ⑤请学生继续尝试计算半径为1的圆的内接十二边形的面积,并归纳计算规律。⑥教师引导学生推导计算半径为1的圆的内接二十四边形的面积,并总结计算规律,用自然语言描述此算法。⑦将“割圆术”程序的可执行文件发给学生,学生运行程序,观察结果,感知计算机近似运算。⑧请学生利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并编写程序。⑨学生程序展示,相互评价讨论,提出优化或改进意见。
教学思路:
(1)按照新课程标准的要求,本课的学习目标是:针对给定的问题进行分析,明确割圆术的思想方法;能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题;运用算法设计解决问题的方案,能使用编程语言实现这一方案;把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案。具体的知识要点包括割圆术、迭代算法,近似值及精度。在教学中应当把“能提取割圆术问题的基本特征,进行抽象处理,并用形式化的方法表述问题;运用算法设计解决问题的方案,能使用编程语言实现这一方案”作为教学重点,而“把利用信息技术解决问题的过程迁移到其他相关问题中,并能采用恰当的方法优化解决方案”是教学的难点。
(2)古今中外,许多人致力于圆周率的研究与计算。为了计算出圆周率的越来越好的近似值,一代代的数学家为这个神秘的数贡献了无数的时间与心血。古人计算圆周率,一般是用割圆术。
(3)所谓“割圆术”,就是用单位半径圆内接正多边形的面积去无限逼近圆面积并以此求取圆周率的方法。学生通过自主学习这一思想方法,尝试手工计算单位半径圆内接三角形、六边形、十二边形的面积,在其中体会这种基于几何的算法计算量大,速度慢。在计算机程序中,成倍地增加正多边形的边数n,让所求得的π逐渐接近真实的π值,让学生感受计算机在近似计算中的高效。
(4)在此基础上,两人一组,利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并编写程序。学生程序展示,相互评价讨论,提出优化或改进意见。
(5)本活动设计课时为1课时。
案例2:递归算法的教学
学业要求:掌握递归算法的基本特征,能够用递归算法解决相关问题,了解递归算法的执行过程。
知识要点:递推算法,递归算法,递归的结束条件、条件语句、循环语句。
教学方法:讲授法,任务驱动法,小组活动法。
活动步骤:
①教师通过讲授法,复习前面的知识——递推算法的编程思路,引出本课实例——斐波那契数列问题。②请学生分组讨论斐波那契数列问题的编程解题思路,总结出解决这一问题的关键条件,得出递推关系式:F[1]=1,F[2]=1,F[N]=F[N-1]+F[N-2](N>=3),并独立编制出递推算法的相关程序。③教师展示学生的编程结果,让大家总结、提炼出递推的条件及循环语句的组成,分析递推程序的执行过程:从小到大,直到目标实现。④教师总结另一种编写程序的方法:从大到小,引出递归算法。⑤请学生自学教材内容,分组讨论、总结出递归算法的定义、思路以及使用递归算法的注意事项,并独立编制出递归算法的相关程序。⑥教师展示递归程序执行过程,归纳总结出编写递归程序的一般思路:用过程或函数方式实现递归程序;从底到顶分析,从顶到底求解;先判断递归条件再递归,否则容易出现死循环。⑦请学生分组或独立完成以下程序(任选一题完成):分解质因数(任给一正整数,将其分解成质因数并输出);上楼梯问题(有一十级的楼梯,上楼时可以一步一级,也可以一步两级,求出共有多少种上楼梯的方法);汉诺塔问题。⑧同学间成果展示,相互评价,讨论,提出改进方案。
教学思路:
(1)按照新课程标准的要求,本单元的学习目标是:熟练掌握递推算法的应用,掌握递归算法的特点,能利用递归算法编制程序解决常见问题,树立递推、递归算法解决问题的基本计算思维。本课时的重点内容是递归算法。具体知识点是:递推算法、递归算法、递归算法的特点,递推、递归算法的结束条件,用递归算法编制程序解决相关问题。本课时的教学难点是:递归算法的执行过程和递归的结束条件。
(2)递推算法是按照从小到大的思维方式依次求出各级问题,思维较清楚,程序执行过程符合人的求解过程,比较好理解,但在有些较大问题上,程序的编制过程比较难。而递归算法是在递推算法的基础上,采用从小到大的分析方式。从大到小的求解过程,编制程序比较容易,但程序的执行过程比较难理解,因为要用到堆栈的理解方式,堆栈的概念在以后的学习过程中会详细介绍,这里只是打下伏笔。
(3)递推、递归两者的共同点是:一要找到递推的关系式;二要找到结束条件(初始化条件)。不同点是:求解过程的顺序不同,递推在编制程序时采用的是从小依次向大逐步求解的方式,而递归在编制程序时采用的是降低问题规模的思维方式。
(4)基于上述认识,这一节课中设计了两个活动。
这两个活动,重点是要让学生理解两个程序的执行过程(求解过程),理解递推、递归算法各自的特点,培养学生的递推、递归算法思想,并能根据问题的实际情况,选择用不同的算法编程实现。
(5)在上述这两个活动的基础上,让学生有选择地完成相关问题,既能达到分层教学的目的,又能加深学生对本节课内容的理解。
(6)本活动可用两2节课完成。
案例3:计算朋友圈人数
学业要求:能够针对限定條件的实际问题进行数据抽象,运用数据结构合理组织、存储数据,选择合适的算法(排序、查找、迭代、递归)编程实现、解决问题。
情境设置:小明所在学校有N个学生,形成M个俱乐部。每个俱乐部的学生都有着相似的爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。小明想知道,在这些朋友圈中最大的有多少人。
研究题目:根据情境分析题意,确定数据结构,建立数学模型,探索解题思路,编程为小明同学找到答案。
项目活动:
①(或选修课)的情况,假设一个组(或一门课)为一个朋友圈,试试能否找出最大朋友圈;记下寻找过程数据,分析结构,探索计算模型、方法。②设N=7,M=4。且第一俱乐部有3人,学号为1、2、3;第二俱乐部有2人,学号为1、4;第三俱乐部有3人,学号为5、6、7;第四俱乐部有1人,学号为6。模拟计算机解决此问题。③根据前述思路,编程计算最大的朋友圈中有多少人。
教学说明:
①确定总的学生学号Total,即Total=[1、2、3、4、5、6、7]。②将4个俱乐部分为4个数组:N1=1、2、3,N2=1、4,N3=5、6、7,N4=6。③以学号1为例,寻找能与学号1成朋友关系的学号,将含有学号1的俱乐部合并在一起,即M1=N1 U N2=1、2、3、4。学号2、3、4现在都是学号1的朋友,根据朋友的朋友也是我的朋友,因此学号2、3、4的朋友也是学号1的朋友,因此学号1的朋友圈M1还有可能扩大,依次查询包含学号2、3、4的俱乐部并与原本M1朋友圈进行合并,即M2=M1 U N1 U N2=1、2、3、4。据此,得出第一个朋友圈为1、2、3、4。④同理,现在只剩下学号5、6、7没有划分朋友圈,以学号5为例,按照上述步骤依次查询得出M3朋友圈5、6、7。⑤所有学号分圈完毕,得出两个朋友圈:M2=1、2、3、4,M3=5、6、7。⑥比较两个朋友圈数量大小,最大的即为最大朋友圈,数组长度即为最大朋友圈中人的个数,数组内容即为朋友圈的具体人员。⑦如果学生人数和俱乐部的组成发生变化,只需要相应的在矩形数组里修改对应参数。
运行结果如下图所示。
专家点评
案例1
我国魏晋时期数学家刘徽发明的割圆术,是以“圆内接正多边形的面积”来无限逼近“圆面积”,即割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣。这里应用近似计算的方法,充分体现了我国古代数学家的智慧。该案例正是让学生从计算半径为1的圆的内接三角形的面积出发,逐渐增加边数,寻找其规律;同时,将“割圆术”程序的可执行文件发给学生,学生运行程序,观察结果,感知计算机近似运算;在此基础上,再让学生利用“割圆术”,通过分析初始状态为正方形的正多边形尝试近似计算圆周率,并用计算机编程计算。这一思路既体现了数学中的极限思想,又符合计算机解决问题所使用的近似方法,思路正确,方法得当,值得肯定。
但从案例本身来看,对计算机解决问题使用的近似计算方法中的近似值及精度的要求体现不够充分,学生探究的目的不太明确。新课标要求学生依据解决问题的需要,设计和表示简单算法。在本案例中,算法如何体现是引导学生解决问题的关键:需不需要使用通项式,什么地方使用迭代算法,怎么实现预定的精度等思想和方法,在案例中体现得不够充分,不利于学生计算思维的形成,应当改进。
(案例1提供:成都石室中学 唐佩、杜妮香、曾贵胜;点评人:四川省教育科学研究所 李维明)
案例2
新课标要求学生能够针对限定条件的实际问题进行数据抽象,运用数据结构合理组织、存储数据,选择合适的算法(排序、查找、迭代、递归)编程实现、解决问题。而该案例正是从讨论斐波那契数列问题的编程解题思路出发,让学生总结出解决这一问题的关键条件,得出递推关系式并引出递推算法,并在此基础上,采用从小到大的分析方式、从大到小的求解过程,引出实现递归的算法,教学思路清晰。在具体活动中让学生解决诸如分解质因数、上楼梯问题、汉诺塔问题等实例问题,由简至繁,体验递归思想,感受计算乐趣,处理得当。如果在案例整体设计上,能以具体的实际问题解决的例子为项目活动的内容,引导学生逐步分析,理解迭代、递归的含义,进而形成解决此类问题的思路,找到解决此类问题的方法,达到发展计算思维的目的,项目活动的效果就更好了。
(案例2提供:四川省教育厅教育物资装备中心 李大国;点评人:四川省教育科学研究所 李维明)
案例3
新课标要求学生能够在掌握常用数据结构的概念、特点、操作、编程实现方法等内容的基础上,对简单的数据问题进行分析,选择恰当的数据结构,用一种程序设计语言编程实现,在问题解决过程中对数据抽象、数据结构的思想与方法有初步的认识。该案例在解决问题时,首先将4个俱乐部设为4个数组,然后查找数组中的等价元素,并将各数组等价集合并,通过比较等价集的规模,找出最大朋友圈,这一方法,正是课标要求的具体呈现。
本案例是按选修I中模块1“数据与数据结构”的要求设计的,其核心素养水平属于水平2,是用计算机解决数学问题的案例。教学时要充分利用活动①、②的探索,明确其数学问题的归属。解决问题时需要用到集合、树的概念和方法,也需要使用递归的思想和方法来提高其查询效率,所以有一定的难度。教学时,可以引导学生分步实现,逐步形成正确的解题思路,提高数字化学习与创新能力,强化信息意识,提升计算思维水平。
(案例3提供:四川省教育厅教育科学研究所 张馨月;点评人:四川省教育科学研究所 李维明)