翁良杉
摘 要:Scratch编程软件以其图形化的简易形式,赢得全世界青少年的喜爱,在Scratch与数学相整合的课堂教学活动中,通过编程与数学知识间的联系,不断渗透数学核心素养,让数学核心素养的培养有一个更显性的舞台。以小学数学《找因数》为例,在学生充分掌握找因数的数学基础知识与基本技能后,以优化找因数算法为目标,通过数学建模思想,将找因数的算法运用到Scratch编程课程上。同时也让学生在自主探索不同算法所需时间差中,感知数学算法优化对问题解决带来的实效性。在数学与Scratch编程相整合的课程中,不断激发学生潜能,提升学生数学核心素养。
关键词:Scratch;数学核心素养;有效性;找因数
《中国教育现代化2035》中提出要明确学生发展核心素养的要求。对于数学来讲,数学素养也是现代社会每一个公民所必须具备的基本素养。而数学核心素养是提高学生数学认知能力,培养高素质综合人才的必要条件。以2018版《高中数学课程标准(实验稿)》为标准,数学核心素养包括数学抽象、逻辑推理、数学建模、数学运算、直观想象、数据分析。Scratch编程解决问题过程中蕴含着大量与数学知识相关的问题,这些问题需要用数学的思维去解决。通过Scratch编程与数学学科整合,让学生深入掌握数学知识,提高学生数学核心素养,促进学生全面发展。
一、素养点拨,因数初探究
以北师大版小学数学五年级下册《找因数》为例,本课学生将会掌握以下知识与技能:
1. 两个正整数相乘,那么这两个数都叫做积的因数,又称约数;
2. 一个数的因数是有限的,最大的因数是它本身,最小的因数是1;
3. 找因数一般有两种,第一种运用乘法来找因数,而第二种运用除法。
乘法找因数方法为两个整数相乘, 其中这两个数都叫做积的因数。如找12的因数,有1×12=12、2×6=12、3×4=12(尝试第一个乘数3加1为4时,发现因数重复则停止)。那么12的因数有:1、2、3、4、6、12。其中蕴含的基本方法是让两个乘数分别从1开始尝试相乘,直到积等于那个数为止。
除法找因数的方法为一个整数被另一个整数整除,后者即是前者的因数。如求12的因数,那么12÷1=12;12÷2=6;12÷3=4那么12的因数有:1、2、3、4、6、12。
在这两种方法中,对学生找100以内某一个数的因数绰绰有余。而用乘法或除法找因数,学生更喜欢用乘法进行找因数计算,因为学生有乘法口诀的功底。可计算机在找因数计算时,除法找因数的有效性很容易凸显出来。我们在培养学生数感时最重要的是为了让孩子能清楚如何利用数学知识去构建数学模式,解决生活中实际问题。所以利用Scratch学习“找因数”主要目的在于让学生理清该用什么方法更有效,以达到解决实际问题的目的。
二、了解Scratch,编程任我行
Scratch是由麻省理工学院媒体实验室“终身幼儿园团队”基于Google Blockly开发的一款将代码积木块化的编程软件,它最大的特点是让不认识英语单词的人也能学程序、学逻辑、学数学,促进学生想象、编程、分享等综合能力的提高。在IOBE全球编程软件排行榜中Scratch于2018年8月排名全世界编程软件第21名。
Scratch在小学一般作为校本课程,可以从小学四年级开始学起,到了五年级下册一般已具备较高的编程技能,懂得各个Scratch积木块用法。熟练掌握变量、链表的使用,对程序设计的顺序、分支、循环结构能熟练掌握,会灵活运用Scratch解决比较复杂的编程问题。
三、探寻因数,更上一层楼
如何利用Scratch实现“找因数”,对于五年级有数学找因数学习经验且有Scratch编程经验的学生来讲并不难。在学生学完《找因数》课程之后,通过编程课来进一步深化知识。编程课堂教学中首先要引导学生重新复习找因数的方法,再让学生进行编程学习。此时若让学生判断用什么方法最容易找出因數,学生因惯性思维很容易想到用乘法。在编写求任意数因数的程序时,首先要让Scratch提出询问:“你要求哪个数的因数?”通过运算最终让Scratch程序将所有的因数结果显示在列表中。
1. 小试牛刀 乘法的解决办法
第一:询问:你要求哪个数的因数?并输入值。设2个变量“乘数1”和“乘数2”, 初始值等于1。并将列表“因数”清空。
第二:因为计算机不懂乘法口诀,必须利用穷举法进行计算。先将“乘数1”与“乘数2”相乘判断得数,其中“乘数2”从1开始尝试至大于“回答”值。看看 “乘数2”所取的哪个值能与“乘数1”相乘等于“回答”的值,如果有则将“乘数1”与“乘数2”放入链表因数中,否则将“乘数2”继续增加1。
第三:如果“乘数2”加到“回答”的值与“乘数1”相乘都不等于 “回答”的值,则将“乘数1”加1,“乘数2”重新从1开始继续测试。
第四:循环以上过程,直到“乘数1”等于“回答”的值为止。
显然,这种方法如果“回答”的值的比较大,所用的时间也会很长,并不是最优方法。此时可以引导学生想一下,有什么方法可以进一步优化吗?聪明学生会在程序中第三步修改为:如果“乘数2”从1测试到“回答”,或“乘数2”与“乘数1”相乘的值大于“回答”的值,则将“乘数1”加1,“乘数2”重新从1开始测试起。看似简单的增加一个条件,将求值的效率提高一个档次,省略掉许多不必要的乘法测试。
2、锋芒毕露 除法的思考方向
第一步:询问:“你要求哪个数的因数”将“回答”的值作为被除数,设变量“除数”初始值为1,并将列表“因数”清空。
第二步:如果被除数除以除数没有余数,则将除数与商存入列表“因数”中,否则将除数加1。
第三步:重复执行直到除数等于被除数。
除法找因数的简便在于不需要循环对两个数进行穷举法取值,只要一直测试每一个除数即可。那么如何进行进一步的优化?学生在了解之前的乘法找因数程序优化方法的前提下,会迁移到除法的方法中来,让学生通过观察后会设除数小于的被除数的一半。还有些学生会让除数与因数进行比较,重复执行直到因数的结果链表中包含有除数。两种方法仅在毫秒中有区别,为了避免出错,可以引导对除法找因数的优化方案进行深入探索,看看哪种更理想。
3、优劣分明,找因数时间对比
两种方法对比,显然除法更容易理解,程序量也会更小。但学生尚不清楚除法真正的优势在于求值的速率上,这时候教师可以让学生测试找出“123456789”这个9位数的因数。在测试时可以对两个程序均加入计时器进行测试。那么这样很容易发现,除法找因数所用的时间比乘法要少。
在探索找因数过程中,对于列表排序也可以进一步深入探索,利用有效的方法提高排序的高效性。
四、寻求真谛 提高学生数学核心素养
找因数的方法在百以内,利用乘法口诀确实比较容易解出。而在实际探索中,我们会发现除法是找因数的有效方法。因此通过数学与Scratch编程相整合的课堂模式,可以让学生懂得选用合理有效的数学方法去解决实际问题,明白运算的算理。同时还能发展学生数学建模思想,明白数学与生活之间,数学与其他学科之间的联系,有效提高学生数学核心素养。
总而言之,通过Scratch编程“找因数”的课堂教学,让学生了解数学的知识在学科间是可以相互渗透的,让学生明白数学源于生活,在处理其他学科问题时应该寻找合理高效的数学知识来解决问题。数学与Scratch编程之间是相辅相成的,两者的相互整合将会让学生对数学知识的理解与应用得到质的提升,是有效提高学生数学核心素养的关键。