APP下载

基于计算思维的信息技术选考疑难问题解决探究

2017-02-22邓彰超

中国信息技术教育 2017年2期
关键词:排序最值变量

邓彰超

浙江省新高考实施“7选3”模式后,技术成为其中的一门选考科目。算法与程序设计作为该科目选考的主要考核内容,其难度和广度有所提升,经典算法如解析、枚举、排序、查找递归等成为选考教学的重难点。在教研时,同行们常会提出一些问题:在学习这些经典算法时,如何让学生真正经历计算机解决问题的过程与方法?如何让学生界定问题、建模分析、设计算法解决问题,形成科学稳定的知识逻辑结构?如何解决经典算法学习中遇到的疑难问题?如何通过这些疑难问题的解决来培养和提升学生的思维能力?周以真教授指出,计算思维就是运用计算机科学的基本概念去求解问题、设计系统和理解人类的行为,它涵盖了计算机科学广度的一系列思维活动。其一般过程是注重理解问题的本质,抽象问题的特征,继而构造模型设计可自动化执行的算法来解决问题。具体过程如图1所示。

计算思维的提出,使高中信息技术课程的教学逐渐从注重实践操作的技术素养层面上升到注重思维素养的培养层面,这就给经典算法选考的学习和疑难问题的解决提供了良好的方法论指导。笔者结合自己的教学实践,分别从理解本质确定目标、设计任务讲评归纳、合理建构变式内化与多元评价差异发展四个方面进行了探究。

理解本质并确定目标

在学习经典算法选考部分时,教师需要解决的是与本算法相关的既往存留问题和本课学习中的疑难问题。所以,在实施计算思维经典算法教学时,教师首先应回顾相关已学知识点,其常考常错点则需通过思维引领精讲总结的方式予以正本清源,让学生理解这些疑难问题的本质,清除障碍,进而明确本堂课基于计算思维的学习目标。

以经典算法冒泡排序的学习为例,学业水平考试部分知识点与本课例相关的主要有赋值语句、选择语句及多重循环,教学经验得出疑难点是多重循环的理解应用。笔者在回顾、复习语法的基础上将其结合枚举算法中的“百钱百鸡”问题(如图2),采取抽象思维形象化的方法,用连线的形式将抽象问题形象地呈现出来(如图3),让学生理解多重循环的原理本质。

分析:①当控制外循环变量gj的取值不变,且控制中循环变量mj的取值也不变时,内循环变量xj需从1依次变化到100,同时形成100组解的形式,并进行筛选判断。②当控制外循环变量gj的取值不变时,中循环mj的取值需从1变化到33,且针对每一次中循环mj的取值变化,内循环变量xj的取值均需从1变化到100,同时形成33×100组解的形式,并进行筛选判断。③外循环变量gj的取值可以从1依次变化到20,针对外循环变量每一次取值的变化,中循环变量mj的取值均需从1变化到33;同时,针对中循环变量mj取值的每一次变化,内循环变量xj的值均需从1变化到100;由此可形成20×33×100组解的形式,并进行筛选判断。

小结:中循环变动一次,内循环需变化100次;外循环变动一次,则中循环需变动33次,同时内循环需变化33个100次。学生通过连线为载体将抽象问题形象化,经由计算思维的方法过程,将多重循环的理解化难为易,达到理解问题本质的同时提升了思维能力。

学习目标是教学的核心和灵魂,围绕教学目标,才能顺利开展教学活动和评价。所以,笔者在夯实基础后,将冒泡排序算法学习的知识教学目标分解成三个具体目标:①什么是冒泡排序;②如何编写程序实现冒泡排序;③如何运用冒泡算法解决实际问题。关于什么是冒泡排序,笔者依据冒泡算法的问题本质,按照计算思维处理问题的模式,将问题界定为三个子目标:①n个数据排序实质就是寻找n-1个最值的过程;②如何找一个最值;③数据交换算法。基于这样的问题本质,分解能更好地发展学生的计算思维,把学生较难理解的算法原理转变为一个个容易理解的、已知经典的子问题。同时,这也为下一环节的算法程序的实现打下基础。

设计任务并讲评归纳

围绕学习目标,笔者根据计算思维的特点来设计任务,这里需注意两点:其一是根据学习目标,选取学生学习生活中熟悉的问题切入,设计适合培养计算思维的任务;其二是所设计任务的深度和广度要符合学生的知识水平和认知规律,方便学生运用计算思维的方法展开分析思考,进而加深对算法思维的理解和对疑难点的突破。

在本课例的任务设计方面,基于学生的认知规律,首先,笔者请学生看冒泡排序的Flash动画,并引导学生说出动画中所蕴含的冒泡算法原理,即“看动画,说原理”环节;接着,笔者又请一组学生头戴写有自己出生日期后两位的生日帽模拟冒泡排序Flash动画,进行排生日游戏,此为“演动画”环节,使枯燥的算法原理鲜活地呈现出来,加深了学生对冒泡算法的印象。为了揭示问題的本质,笔者选取了四个数据,采取小组合作分组探究的方式,将给定排序方向为从前往后和从后往前、排序结果为升序和降序,进行排列组合得到四种冒泡排序方式,对第一趟的排序结果、比较趟数、每趟比较次数以及比较交换规则分别进行探究(如上页图4)。学生通过小组合作学习,初步经历运用计算思维展开问题的分析和思考。

在对这四种冒泡方式进行小组讲评后,笔者引导学生一起对这四种冒泡方式的比较趟数、每趟比较次数以及比较交换规则进行异同总结(如图5),这为学生理解算法的多样性,进一步理解算法原理和后续的疑难点——算法程序的实现,打下了基础。

以第四组为例,师生一起详细探究归纳,旨在让学生理解冒泡算法问题的本质,即:n个数排序就是寻找n-1个最值的过程;寻找最值的过程就是从最后一个位置开始,逐个往前,相邻两个数依次比较,让最值自动冒出来;比较规则是,如果后面数大就交换两者的值(如图6)。

在这一任务教学中,笔者主要使用讨论法、启发法、归纳法等教学方法来培养学生的计算思维,从分组探究中逐步理解冒泡算法的原理过程。学生通过自主学习、小组合作探究体验计算思维的方法,在解决问题完成任务中理解问题本质及提升计算思维。教师在完成任务过程中理性严密引导,使学生变被动学习为主动学习,积极参与到课堂中来,提高了学习效率。

合理建构并变式内化

学生对一个知识点的掌握需要一个过程,对经典算法中的疑难问题理解突破就更需要不断的积累。在算法与程序设计模块的学习中,笔者常听到学生说:“老师,您讲的内容我们能听懂,但自己编程时却错误百出。”细究其原因,很大程度是重难点问题没有建构起清晰的知识结构,其次是思维强化训练不足。

就本课例而言,笔者综合教学实践及学生的反馈,得出冒泡算法程序编写的三个疑难问题:①内层for循环,如何确定循环变量的初值和终值(即确定对应数组元素的开始下标与结束下标);②到底是哪两个数在比较?③相邻两数的“<”“>”符号的确定。

基于以上所述,笔者从前往后排,以排成结果为由小到大的升序形式为例,辅以磁体数字圆盘移动来演示算法原理,通过计算思维的过程方法,逐一解决冒泡排序的三个疑难问题。

第一步:在知道外循环变量i是解决寻找n-1个最大值的基础上,提出如何找某一个最值的问题,即疑难易错点①“如何确定内层循环变量j的取值范围”。笔者引导学生思考:首先,题设要求从前往后排,排序结果为升序,不妨先不考虑怎么比较和交换,即通过第一趟排序,第一个最大值肯定要被放置在最后面;接着,第二趟,第二个最值肯定要放在后边第二位;依此类推。所以,后面数组下标每趟均需要变化一位,总结规律为n-i,同时注意到前面是不变的,即每趟寻找最值都是从第一个数据开始找,从而疑难易错点①得到了解决:内循环变量j的初值为1,终值为n-i(如图7)。

第二步:在明确内循环变量j取值范围的基础上,提出问题:到底是哪两个数在比较?笔者引导学生思考分析:既然题设排序方向为从前往后,内循环变量j的取值是从第一个数据开始往后比,规则是两两比较,这里不妨暂不考虑比较交换规则,易知是第一个数与第二个数比较,第二个数与第三个数比较,依次类推。笔者总结规律为:当前一个数据为a(j)时,后一个数据必定为a(j+1),从而疑难易错点②得到了解决。具体思路历程如图8所示。

第三步:明确哪两个数在比较,那么这两个数比较交换的规则是什么呢?也就是“<”“>”符号的判断。笔者引导学生思考分析:题设排序结果为升序,故第一趟排序是把最大数放在最后面,是找“大数”,又因为排序方向为从前往后,因此比较交换的规则为相邻两个数当前一个数比后一个数大就交换,程序表达为a(j)>a(j+1)(如图9)。

综上所述,冒泡算法程序的三个疑难问题已经得到了解决,思路清晰,学生也理解透彻。可见,计算思维提供了重新审视程序设计教学的视角,将计算思维融入到程序设计教学中将会大大提高学生分析问题、解决疑难的思维能力。

随着学生思维能力的逐渐提升,为了加深其对知识的理解,笔者承前述分组探究活动的铺垫,对四种冒泡排序方式分别研究其对应的三个疑难问题(如图10)。

至此,通过理性严密的引导,学生切身经历了基于计算思维的冒泡算法疑难问题解决过程,从中体会到一题多变及算法的多样性,进而更全面、更深入地理解了冒泡排序算法,培养了知识迁移和灵活运用的能力。推而广之,当遇到其他类似问题时,学生也可以尝试运用计算思维的方法去分析、解决问题。学生要先能准确地描述问题,并将问题按本质有逻辑地分解为若干求解步骤;再从这些步骤中抽象出本质性的操作模型,并寻求能通过计算机等工具自动处理实现的方案;最后选择一种有效方案,实现疑难问题的解决。

多元评价差异发展

教师要建立多元化的评价体系,检验学生知识的掌握程度和思维能力的水平。具体操作时,如果学生基础整体较弱,教师可以采取留白给学生填空巩固,不要求完整代码编写,但一定要学生都参与前面问题的界定、分析、解决过程,而不是直接给答案;如学生基础较好,教师可以减少引导的部分,布置任务让学生自主思考,减少编程调试时间。多元评价,一方面是教师对学生进行评价,将过程性评价与总结性评价相结合,根据学生在学习过程中的表现,利用计算思维解决问题的能力,以编程作品的好坏为评价依据,全面评估学生的信息技术知识和能力;另一方面是借助学习任务单与发展性评价表,引导学生进行自评。例如,在冒泡复习课中,教师可以从教学目标中选择体现计算思维培养的内容进行具体的教学评价设计,其发展性评价分为3个等级(如上表)。

學生自评时,就能清楚地知道自己处于哪个级别,并及时反馈给教师,这样教师就可以根据综合评价的反馈来检验教学效果,使得不同程度的学生都有所收获,达到差异发展的教学目的。

结语

笔者将计算思维的概念渗透到高中信息技术课程教学中,并运用计算思维的方法分析解决经典算法选考学习中遇到的疑难问题,尝试引领学生在理解计算思维概念方法论的基础上将其应用推广,经实践证明,取得了良好的教学效果。但计算思维是建立在计算机解决问题层面上,属于方法论层次的概念,教师若脱离了信息技术课程的具体内容,单纯讨论计算思维的培养,那也是空中楼阁。因此,教师要想真正将计算思维融入到经典算法疑难问题解决中,首先要精心备课,按问题本质建构清晰的知识结构,同时去冗存精地准备教学资源以利于把时间挤出来给学生思考、学习。其次是减少“满堂灌”或形而上学的教学形式,不是直接告诉学生是什么,而应与学生一起走过“问题是怎么解决的”学习过程,要想方设法让学生真正经历问题解决的全过程,以此提升他们运用计算思维解决疑难问题的能力。

猜你喜欢

排序最值变量
恐怖排序
节日排序
例谈三角函数最值问题解法
例谈三角函数最值问题解法
分离变量法:常见的通性通法
不可忽视变量的离散与连续
轻松把握变量之间的关系
变中抓“不变量”等7则