APP下载

基于问题视角,提升思维素养
——以“鸡兔同笼”问题为例

2022-10-12仲轶宏江苏省苏州市吴江中学

中国信息技术教育 2022年19期
关键词:鸡兔同笼流程图公鸡

仲轶宏 江苏省苏州市吴江中学

计算思维是信息科技学科核心素养之一,计算思维教育已成为信息科技课程改革的趋势。因此,笔者尝试在教学中借助古代经典数学的问题情境,让学生真实参与到计算机解决问题的过程中,体验以“问题”为载体的思维过程,即发现问题、分析问题和解决问题的过程,实现思维的发散与碰撞,培养学生思维。

● 创设情境,培养学生发现问题的能力

良好的情境可以激发学生的学习兴趣,活跃课堂气氛,增强学生的求知欲。教师播放《鸡兔同笼》动画视频,视频中的“鸡兔同笼”问题被写在《孙子算经》中,引导学生还原《孙子算经》上的鸡兔同笼数学题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”本环节从直观情境感悟实际问题,抽象提炼出隐含的数学问题,激发学生的探究兴趣。在情境中唤醒学生的知识储备、活动经验和探究兴趣,这样的情境有助于学生深入探究。

● 设计算法,培养学生分析问题的能力

算法是对特定问题求解的描述,是一系列问题的清晰指令。教师围绕“鸡兔同笼”问题,对学生进行异质分组,以小组为单位,思考解决问题的方法。各小组展开头脑风暴,有的利用假设法、列举法等求解,有的设变量利用方程式快速求解,有的借助电子表格软件列举求解,还有的编写程序求解……最终归纳总结出人工计算、借助电子表格软件工具和编程计算三种方式。教师借此抛出课堂任务一:如何利用WPS电子表格来解决“鸡兔同笼”问题?

“上有三十五头”,即鸡和兔的总数为35,那么列表的时候把鸡和兔可能的组合都列出来(鸡1,兔34;鸡2,兔33……鸡33,兔2;鸡34,兔1),分别利用WPS表格中的公式计算兔脚总数、鸡脚总数和鸡兔脚总数,利用公式复制便可以快速列出所有组合,如图1所示。然后利用数据筛选功能,根据自定义条件(鸡兔脚总数=94),便可以快速找出符合要求的鸡兔组合。

图1 鸡兔同笼WPS列表法

本环节学生通过小组讨论,把问题抽象出来,通过自然语言描述,形成了多种解题思路,锻炼了分析问题的能力,体验了人工算术运算与借助WPS表格实现计算机领域的计算的差异。算法就是解决问题的方法和步骤,自然语言背后承载着人类的符号化思维方式,但语言符号不够直观,有没有更加直观、形象的算法表述方式呢?

● 画图编程,培养学生解决问题的能力

流程图是使用图形表示算法思路的一种方法,也是进行计算机编程的重要步骤。相比自然语言,流程图更形象、直观,容易理解,它将各种输入、处理、判断、输出进行了有效关联,通过流程图,把独立存在的个体组成了一个新的整体结构。画程软件为绘制流程图提供了便利,并且可以将流程图生成相应的Python程序,进行调试运行。借此教师抛出第二个课堂任务:利用画程软件,修改完善“鸡兔同笼”问题的流程图,并体验调试运行程序,如图2和图3所示。

图2 鸡兔同笼流程图

图3 鸡兔同笼程序代码

通过流程图描述,让学生对算法进行思辨,形成完整的结构系统,这样不但简化了算法抽象,还提升了解决问题的能力,使学生会一种,通一类,实现举一反三。从流程图到程序代码,这个过程是对前面发现、分析、解决问题能力的提升,是将解决问题过程实战化。它既是思维挑战,也是思维成果的展现,且重在思维的训练,而非代码本身,使学生的结构化思维能力和逻辑思维能力得到提升。另外,从人工计算转变为计算机编程,通过小组团队协作,增进了学生对算法思想的理解。也就是说,从问题抽象到数学建模,从算法设计到流程图,从程序代码编写到调试优化,这一过程使学生能够更好地体验和区分计算机解决问题与人工计算的差异。

● 优化算法,提升学生的计算思维

实现了程序代码,并不一定是优秀的算法设计。严谨的思维和算法设计,是程序编写的前提。通过上述程序的调试运行不难发现,任意输入head和leg的值,其实可能是无解的,程序最后无法给出兔和鸡的值,但却没有任何提示。这是因为在设计算法的时候不严谨,考虑不周全。为了更好地优化算法,教师可以提醒学生设置一个初始值变量,如answer=False,在for循环的结构中添加if语句做判断,即:当条件为真时,通过break跳出循环结构;当判断answer为真时,输出ji和tu的数量,否则输出“此题无解,请重新输入”。借此抛出第三个课堂任务:优化“鸡兔同笼”程序代码,并完善程序输出。

判断算法优劣的关键是算法效率。在本题中,教师采用了嵌套的双重for循环结构,其实其运行效率会较低,可以再次优化算法,通过兔子和鸡之间的数量关系,把双循环变成单循环(如图4),以减少循环运行的次数,提高算法效率。优化算法的过程,不仅考验学生的发散性思维,还考验学生算法设计思维的严谨性,同时学生在优化算法的过程中不断碰撞出思维的火花,有助于养成良好的思维习惯,提升计算思维。

● 拓展迁移,落实学生的思维素养

“拓”意为开辟,“展”取张开、放开之意;迁移则为离开原来的所在地而另换地点。设计这个环节是将课堂中学到的知识转化为一种能力,开拓学生视野,活跃学生思维,以解决新的问题。鸡兔同笼问题虽然能很好地利用人工计算—WPS表格—编程三种方式解决问题,但学生难免有疑惑:花两分钟用方程式就能解决的问题,为什么要花更多的时间去用WPS列表法,或者学习Python编程解决呢?这不符合实际解决问题的需要。借此设计第四个(拓展)课堂任务:请选择合适的方法求解“百鸡百钱”问题。

人工计算:这是一个用方程式无法解决的问题,因为有三个变量,但却只能列两个方程式,显然是无法求解的。WPS表格方式:利用WPS列表法,设计好字段和列举方式,是可以实现的,但比较复杂耗时,需要先对问题进行分析,规划设计好相应字段,才有利于问题求解。那么如何设计WPS表格字段呢?

题中共有6个变量字段即公鸡、母鸡、小鸡各自的价格和数量和2个常量字段即总数量和总价。全部列举显然会使表格非常复杂。通过引导、分析和优化,选取公鸡数量、母鸡数量、小鸡数量(100-公鸡数量-母鸡数量)和总价(公鸡数量*5+母鸡数量*3+小鸡数量*1/3)四个字段即可,把三个价格字段直接纳入总价公式中。那么,怎么列举呢?首先要考虑公鸡、母鸡、小鸡可能的最大范围。总价为100,公鸡单价为5,那么最大的公鸡数量是20,同理母鸡数量为33。在列表的时候,可以依次固定公鸡数量为1,列举母鸡数量范围(1~33),公式计算小鸡数量和总价,依次类推……直到公鸡数量到20,如图5所示。最后利用数据自定义筛选(总价=100),便可以快速求出符合的购买组合。

图5 百鸡百钱WPS列表法

Python编程:编程的思路和WPS列表法类似,即在一定范围内,逐个列举并判断其是否符合条件,若符合则输出,这种由循环和判断结构组成的程序,其本质是枚举法,也称穷举法。把公鸡、母鸡和小鸡分别定义成cock、hen和chick,循环结构中公鸡cock的范围(1~20)、母鸡hen的范围(1~33)、小鸡的范围chick=100-cock-hen,设置双重for循环,内嵌一个if条件判断语句(cock*5+hen*3+chick/3==100),利用print语句输出符合要求的公鸡、母鸡和小鸡的数量组合即可,如图6所示。

图6 百鸡百钱程序代码

从“鸡兔同笼”问题拓展到“百鸡百钱”问题,在两者的对比体验过程中,让学生思维得以升华,既有同一个问题不同求解方法的纵向对比,又有不同问题相同求解方法的横向对比,更好地体验了在解决复杂问题时,计算机编程更具优势,也解答了学生心中的疑惑。所以,在教学中,教师要基于问题视角,着眼于发现问题,精于看不见的算法设计思想,善于利用计算机编程解决问题,让学生在具体问题情境的体验、探究、解决、运用中实现思维的进阶。

猜你喜欢

鸡兔同笼流程图公鸡
云的识别指南
“鸡兔同笼”问题解法探析及思考
鸡兔同笼
从“鸡兔同笼”谈数学的核心素养
自私的公鸡
说话的公鸡
聪明的公鸡
我可以运用公式解决“鸡兔同笼”问题
流程图学习指南