《求解阶乘非零位的值》教学案例
2019-01-28林文英
林文英
信息技术的变革不断更新着人们的交互方式,大数据时代应该怎样培养学生的信息素养?学生学习信息技术这门课程之后应具备什么样的能力呢?这些都是值得信息技术教师思考的问题。笔者认为,要解决这些问题,必须让学生主动参与课堂,让实践在课堂真实发生,让学生在课堂实践中培养具有学科特点的必备品格和能用计算思维解决问题的能力。计算机思维是个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。项目教学法(Project-learning)是师生通过共同实施一个完整的项目工作而进行的教学活动,突出实践在课程中的主体地位,使理论从属于实践,在实践中获得知识、技能,又让学生学会应用能力。这里以阶乘的项目教学为案例,阐述数据如何改变思维,计算思维如何走进课堂并真实发生。
● 活动一:理解问题中的关键词
高一学生已经具备了网络信息检索的关键技能,能初步完成对题目中的关键概念的探究活动。在活动中,教师充分引导学生利用数字化工具完成概念(阶乘)的学习,通过进一步探究阶乘概念形成抽象建模意识。阶乘是指从1乘以2乘以3乘以4一直到所要求的数。一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!,转化为数据表示为n*(n-1)*(n-2)*(n-3)*…3*2*1,抽象成模型递归式即0!=1,n!=(n-1)!×n。
● 活动二:利用计算器分析数据
N的取值为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20……50000000。本题(如上图)中的N值不是一个固定值,学生在理解了阶乘概念之后依然有点无从下手,因为不知道这里的N值会是多少。教师接着引导学生尝试利用计算器对前20个数据进行处理并观察分析数据:0!=1,1!=1,2!=2,3!=6,4!=24,5!=120,6!=720,7!=5040,8!=40320,9!=362880,10!=3628800,11!=39916800,12!=479001600,13!=6227020800,14!=87178291200,15!=1307674368000,16!=20922789888000,17!=355687428096000,18!=6402373705728000,19!=121645100408832000,20!=2432902008176640000。尝试1到20之后让学生对数据结果进行分析。学生从枚举出来的数据中发现特征:(1)除了0和1以外,其他的数据都是偶数。(2)逢N值的末位数为5时,阶乘结果末尾0的个数增加1个。(3)数据成长得很快,20的阶乘值已经是一个18位的数据,当N=50000000时呢?(4)计算器有位数限制,想通过人工和计算器求解的学生遇到瓶颈。
● 探究一:利用计算机编程求解问题
学生对数据初步分析、类比之后,顺利地转向寻求计算思维解决问题:先分析阶乘问题的特征,抽象建立结构模型0!=1,n!=(n-1)!,再用计算机程序设计语言实现算法。学生根据已有的程序设计基础,设计问题求解方案,为保证取得的末位是非零位,遇有零位的要去零位,即采用取余运算,对每个数i进行累乘,对乘积s只保留最后一位。
学生A根据这一思路编程求解,但在评测时只能拿到29分,为什么呢?因为当s的末位数是2、i末位数是5时会有进位,如果只取一位最右非零余数会影响最终的非零取值,如s=92,i=95,92*95=8740末位数是4,而不是2*95=190中的9。学生A按照这个思路继续改进程序,但结果全部是错误答案,又是为什么呢?程序中考虑了进位的保留问题,但最后输出结果保留了最右边七位非零数。学生B采用函数的结构化程序设计思路,先求结果再取第一个非零数,但同样没有满分。问题在于求解阶乘时由于数据是爆炸式增长,定义int或者long数据类型容易溢出。学生小组继续修改完善程序,一方面考虑到溢出问题,另一方面考虑到进位问题,在不断的尝试中发现,在保留位增加到8位时能通过全部测试数据。为什么是8位呢?因为数据N最大值是50000000,末尾零不会影响最终结果,每次乘法运算后可以进行去0操作。
● 探究二:优化算法求解问题
学生将计算思维实现问题求解运用到本项目收集信息、观察数据、设计求解方案一步步优化的实施过程中。根据学生发现的特征做出何时可以模10取非零末位数的判断,即乘法运算中只有在乘數的末位出现5时才会进位影响结果,末位为其他数据时不影响结果。由于5*2=10,尝试去掉因子5,再去掉相同个数的因子2就可以去掉一个末位0,又因2的个数比5的个数多,去0后的乘积数一定是偶数,那么,末位非零数只能取2,4,6,8这个四个数字中的一个。在除去末位2时也需要注意到结果一定是偶数,所以当末位数为2时直接将末位借位除2转变为6,末位数为6时转变为8,其他的正常除2,编写的程序代码顺利通过所有测试点。教师再次引导学生继续思维优化法,构造计算模型求解,分析非零位为偶数的有2,4,6,8四个数字,2/2=1为奇数,为保证末位为偶数,2借位除2得6,4/2=2,而6/2=3,6借位后除2得8,8/2=4,假设6在数组第一个元素,8在第三个元素,2在第二个位置,4在第四个位置,此时通过元素除2做下标可以有规律表示元素,于是初始化数组b为{6,2,8,4},去2操作转换为a=b[a/2],a为正解。也可以利用计算思维构造数组,根据数据规律可以发现四个一循环,模4也可以求得正解。
● 应用拓展:阶乘知识的迁移
阶乘主要应用在排列组合数的求解中,在现实生活中有啥用途?用偶然性方法去解决确定性计算,如果你想买一种彩票32选7的,你想知道中特等奖的概率1/C(32,7)=7!*(32-7)!/32!,求阶乘可用计算机求解。学生掌握数字化工具获取信息,能用计算思维方式思考问题求解方法并迁移到实际生活和学习中,激发继续学习的内驱力,强化信息意识和社会责任感。
● 教学评价
项目评价时采用多元评价方式,将互评、自评等多种方式相结合。在活动一中希望达成认识数字化表示信息的优势和能够根据需求选择适当的数字化工具获取信息的目标,评价主要依据学生获取概念的时间和结果等信息;在活动二中希望达成提取问题的基本特征,分析数据进行抽象处理,并用形式化的方法表述问题的活动目标,主要对学生的数据呈现、观察结果、提出的设想等数据处理能力进行评价;在探究一中希望达成使用编程语言,进行模块化、系统化设计算法解决问题的目标,对学生的算法设计、程序编写以及问题解决情况、活动中参与讨论的情况进行评价;在探究二中希望达成采用恰当的方法迭代优化解决方案的目标,引导学生从创意性、可行性等方面进行调适和改进,对完成程序作品开展成果交流评价;在应用拓展模块希望学生达成将所学知识和方法迁移到学习和生活的其他相关问题的解决过程中的目标。
通过人机交互完成输入和输出,程序求解过程类似黑箱操作,问题的人工求解转化为只需输入便能快速得出结果的计算机求解。活动二让学生参与对数据的分析观察,并对观察结果提出假设,在数据的作用下循序渐进地挖掘问题的本质,转变学生思考问题的方式,综合运用数据学习理论和数据处理工具将人工解题转化为计算机解题,让计算思维走进课堂教学。探究一和探究二采用计算机科学领域的思想方法界定问题,抽象问题特征,建立结构模型,判断、分析、类比各种信息资源,运用合理的算法形成解决问题的方案,这一系列思维过程实现了“数据改变思维,计算走进课堂”的项目核心目标。在评价过程中,用成长型思维评价学生,结合学生的日常学习表现、知识与技能的掌握情况,以及是否经过努力可达成目标全面评价学生学科核心素养水平。
参考文献:
[1]中华人民共和国教育部.普通高中信息技术课程标准(2017年版)[M].北京:人民教育出版社,2018,1.
[2]李维明.关注发展,实践课程[J].中国信息技术教育,2018(5).
[3]李维明.普通高中信息技术学科教学中核心素养的培育[J].中国电化教育,2017(5):26-29.
[4](美)卡罗尔·德韦克.终身成长[M].南昌:江西人民出版社,2017,11.