基于大单元设计信息科技课程“身边的算法”的探索
——以“探秘古数之趣”为例
2022-11-07刘渝霞邓秀华山东省潍坊市潍城区潍州麓台学校
刘渝霞 邓秀华 山东省潍坊市潍城区潍州麓台学校
中华文明,灿若星河、绵延闪耀,中华民族先辈经过大量理论研究和实践探索,编写了如《九章算术》《周髀算经》《算法统宗》《海岛算经》等数学名著,为世界数学和人类文明的发展做出了巨大贡献。着眼当下,《义务教育信息科技课程标准(2022年版)》(以下简称“信息科技新课标”)的颁布,进一步凸显全面提升学生数字素养与技能,培养学生用算法思维分析解决生活中的问题的能力。本单元的设计将带领学生穿梭时空,探寻历代数学家及其伟大成就,感受古代算学故事中蕴藏的巧思与奥妙。
● “身边的算法”教学内容的设计背景
“身边的算法是信息科技新课标第三学段(5~6年级)中的内容,包括算法的描述、算法的执行、算法的效率等。信息科技新课标在教学提示中提到:从学生的生活体验或《九章算术》等典籍中的适当问题出发,将算法学习的要点贯穿问题求解的过程,让学生在不同算法的具体讨论中养成算法思维,避免空洞地讲授抽象概念。5~6年级学生的认知发展正处于从具象思维到抽象思维的过渡时期,所以,笔者在编制《信息科技学生学习手册》(以下简称“学习手册”)时,对“身边的算法”模块,注重了具象内容和抽象内容的关系与平衡。
● 学习设计流程及语言选择
学习手册中的“身边的算法”设计流程如图1所示。在选择算法实现语言时,充分考虑到新课标弱化编程语言和具体的完整代码实现,更加重视算法思想和用编程思维解决问题的设计原理。真正要实现算法,需要运用代码进行描述,在中小学一般使用C++或Python语言来实现。在学习中,笔者选择利用C++作为范例,是因为它拥有丰富的数据结构、运算符和表达式,解决问题时可以通过多种途径,其语法限制不太严格,所以在设计时更加主动、灵活。当然,真正落实到教学中,教师可以根据自己的区域教育环境和教学要求来选择不同的语言。
图1
● “古数之趣”单元内容与实施
从5~6年级小学生的知识、思维水平、学习能力等因素出发,选定的古代算法问题包括雉兔同笼、盈不足术、物不知数、河上荡杯、有女善织五大类问题。按由易到难的梯度设置,知识点螺旋式上升,逐步加深。
1.雉兔同笼
数学问题:雉兔同笼。通过阅读《孙子算经》的算学题目让学生用现有知识解题,引导学生化难为易寻找规律解决问题。
师:我国古代数学名著《孙子算经》中记载了这样一道趣题——今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?同学们尝试猜测一下鸡兔各有几只?
(1)算法体验
①枚举法(穷举法):学生填写表1找出答案。
表1 雉兔同笼算法1
②图示法:使用符号替代头和脚的方式,按提示步骤进行绘画得出结果。(“○”表示头,“|”表示一只脚)
第一步:先画8只动物的头。第二步:分脚,为每只动物画两只脚,共__________只脚。第三步:把剩下的__________只脚用完,要给其中的__________只动物各添2只脚变成兔子。
根据画图,我们可以看出:鸡为______ 只,兔为_______ 只。
③假设法:根据题目中给出已知条件或结论作出某种假设,把复杂的问题简单化。
a.假设全为鸡,则共有脚_______。b.实际脚数与假设脚数之差_______(总脚差)。c.每只兔子比每只鸡多______(单只脚差)。d.兔子只数=总脚差_______ ÷单只脚差____ 。e.鸡的只数=_____ 。
学生再通过试一试,假设全为兔时的求解过程,巩固本部分学习。
④抬脚法:古代数学中的“术”,即解题方法。通过给出原文,学生体会古代数术的有趣和思想。
术曰:上置头,下置足;半其足,以头除足,以足除头,即得。
古人让鸡抬起一只脚,兔子抬起两只脚,还剩____ 只脚,此时每只兔比每只鸡脚数多_____ ,这时脚与头之差______ 就是_____ 的只数。
(2)练习拓展
通过“练一练”的两道题,加深学生对算法的认识和应用。
练习巩固:在一个停车场,停了汽车和三轮车一共32辆,这些车一共有108个轮子。求汽车和三轮车各几辆?
思维拓展:鸡兔共有100只脚,若将鸡的只数和兔的只数互换后,则共有脚86只。问原有鸡和兔的数量各是多少只?
(3)编程验证
在掌握了雉兔同笼的多种算法后,将枚举法的原理应用到现代编程中,结合for循环结构来实现枚举过程。
①用流程图引导学生思考解决问题的过程,分析流程图(如图2)判定框中的条件。
图2
②将流程转换为代码,并将分析的条件补充完整(如图3)。
图3
③提高难度,优化思想。如何把双重循环简化为单层循环,从而降低程序的时间复杂度。
假设鸡的数量为i,则兔的数量为:35-i。写出简化结果。
(4)思维进阶
给出一个同类进阶问题——百僧百馍,进行实操演练。通过分组法的启示,编写程序输出答案验证分组法的结果正确与否。
“1个大和尚3个小和尚”为一组,每组需要馒头____个;100个馒头可供给____组;大和尚__人;小和尚_____ 人。
2.盈不足术
“盈不足术”是我国古代劳动人民首创的解题方法。通过对《九章算术》中“盈不足”“盈适足和不足适足”“两盈和两不足”三类盈亏问题的计算,感悟古人智慧,体会古代算法的高效有趣,理解算法对学习生活带来的便利。其中,“盈适足和不足适足”问题,原文如下:今有共买豕(shǐ)。人出一百,盈一百;人出九十,适足。问人数、豕价各几何?
(1)算法体验
①将问题用图例进行展示(如图4),使学生对算法的理解更加形象。
图4
②引导学生思考,猪的价格和人数都不变,为什么第一种情况总钱数会多出100元呢?
③通过分析推导,得出解决办法:
第一种情况比第二种情况一共多出了____元,则每人多出了___ 元。因此,可以知道一共有____(列式)人,猪的价格是___ 元。
(2)编程验证
①在“试一试”环节,运用解析法,找出问题的前提条件与结果之间关系的表达式,并通过cout输出语句来实现问题求解的方法。
小科给同学们分文具,如果每人分9套,还多12套,如果每人分10套正好分完,小科班里有多少个同学?一共有多少套文具?
cout<<"小科班里有"<< 12/(10-9) <<"个同学。"<<endl;
cout<<"一共有"<< 12/(10-9)*10 <<"套文具。"
②在学生对三类盈亏问题探究完成后,给出了“练一练”环节,通过三个问题加深学生对盈不足术的理解和应用。
某校五、六年级要乘车去人工智能体验中心参加实践活动。如果每车坐65人,则有5人不能坐上车;如果每车多坐5人,正好多余了一辆车。请问一共有几辆车?学生有多少人?
本题属于哪类问题?
□盈不足 □两盈 □两不足□盈适足 □不足适足 (输出结果)
3.物不知数
“物不知数”问题出自《孙子算经》卷下第二十六题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”本课通过明代数学家、珠算发明家程大位在其《算法统宗》中《浪淘沙》一词,展开“物不知数”问题算法的推导与学习。内容如下:昨日独看瓜,因事来家,牧童盗去眼晕花。信步庙东墙外过,听得争差。两两数(shǔ)余一,三三余二,四四数之余三瓜。借问至少盗几瓜,已会先答。
(1)算法体验
①筛选法:学生通过填写满足三个条件的数,观察得到具有相同的数字,即得到答案。了解其思想与编程中的枚举异曲同工。
②补凑法:通过体验“补凑法”的推导,感受该算法形成的过程。从余数与除数的数值规律,通过加、减的形式将多个条件的余数变为相同数,即补凑法中的“缺同”“和同”和“余同”问题,从而使用一个最小公倍数将多个条件合而为一,使问题简化,快速得到答案。探究的过程遵循“从生活到算法”“从简单到复杂”的规律,符合学生的认知规律,有利于学生分层学习,尽量满足不同学习能力学生的需求。
(2)编程验证
①经典问题“韩信点兵”是“物不知数”问题的一个应用。在本项目中,通过《孙子歌诀》(如下页图5)的算法思路进行解题。
图5
②用分治算法将“点兵”问题的条件进行逐一突破,编写程序用枚举的方式找到多个答案,在此过程中对算法不断进行迭代和优化,找到最优解。
4.河上荡杯
《孙子算经》中有一个有趣的问题——荡杯问题,原题如下:今有妇人河上荡桮,津吏问曰:“桮何以多?”妇人曰:“家有客。”津吏曰:“客几何?”妇人曰:“二人共饭,三人共羹,四人共肉,凡用桮六十五,不知客几何。”
(1)算法体验
学生进行题意解读,感受古代数学文字之美,提炼关键数学信息。(术曰:“置六十五只杯,以一十二乘之,得七百八十,以一十三除之,即得。”)通过对“术”中两个关键数学信息“一十二”“一十三”的推演,将原题为多人合用一个碗,转变思维,利用扩大12倍数(保证每人所用的碗为整数)的方法,改变为一人使用多个碗(13个碗),从而巧妙地解决问题。
(2)编程验证
通过枚举法,引导学生理解for循环语句的解题思路(如图6),从如何确定人数范围、如何提高效率减少循环次数、如何找到成立条件等问题上去树立学生的编程意识和对循环语句的使用规则。进一步通过古“术”解谜让学生感受古代数术的奥妙,发现公倍数对程序编码的优化作用,用理论指导实践,用实践发展理论,不断提升学生对算法思想的认识。
图6 用以体现两种歌唱情境状态变化的折线图
图6
5.有女善织
《九章算术》第三卷“衰(cuī)分”中记载了这样一个有趣的问题:今有女子善织,日自倍,五日织五尺。问日织几何?
(1)算法体验
学生通过阅读题目抓取关键信息,通过每天织布数量的变化规律就可以求出每天的织布份数是多少和每天织布份数占五天总份数的比,从而算出每天的织布数。通过填写表2找思路并发现规律,引出数组的优点。
表2 织布份数m和总份数s信息列表
(2)编程验证
本题从已知的结果“五日织五尺”出发,使用递推法,用迭代表达式逐步逆推,并将“织布份数”和“织布数”两个环节进行动态规划,各自突破后再进行问题组合,就是“衰分术:有女善织”的完整的程序解决方案,让学生既了解了衰分术,也对“问题分解是为了更好地解决问题”有了良好的认知。
● 教学建议与反思
1.转变观念,注重学生体验
在教学过程中,教师不能仅以解题为目的,需要给学生提供更多体验的机会。通过古代数术启发学生解决问题的思路,激发学生的认知内驱力。
2.加强算法相关知识的学习,扩展知识面
对于本模块,新课标提到,将算法学习的要点贯穿问题求解的过程。因此,教师应主动精钻细磨教学内容,深入地掌握和理解,熟悉其应用,这样才能正确引导学生理解算法和算法思想。
3.开放式教学,重视学生能力的培养
利用算法设计的逻辑性和严谨性,可以培养学生严密的逻辑思维,提高其分析问题和问题解决的能力;利用算法实现方式的不确定性,可以培养学生的探索精神和创新能力。因此,教师在教学的过程中要充分发掘各种教学资源,使用灵活多样的教学方式。