Scratch编程教程-Scratch教学实践:韩信点兵

引言
韩信是中国历史上杰出的军事家之一,与萧何、张良一起被誉为汉初三杰。他的名言“韩信点兵,多多益善”说明了他精通兵法,善于用兵。
“韩信点兵”这个故事包含了一个非常著名的数学问题,被称作中国剩余定理或孙子定理。那么,这个问题有什么特别之处?又是如何快速计算人数的?
假设韩信率领1500人参加战斗,其中四五百人阵亡。在清点幸存者时,韩信命令士兵每3人一排,余2人;每5人一排,余3人;每7人一排,余2人。凭借这些信息,韩信立即算出了部队的人数。你能算出这支部队战后有多少人吗?
学习目标
[编程实现]:使用Scratch编程计算韩信的部队人数。
[知识与技能]:
- 熟练使用变量,包括创建变量和赋值
- 熟悉列表的写入和读取
- 掌握分类积木中的取余运算积木
[过程与方法]:通过小组讨论交流合作,培养解决问题的能力。
[情感与价值观]:培养对信息技术的兴趣,培养想象力和逻辑思维能力。
分析过程
通过题目的描述,这里涉及到余数的概念,那么什么是余数呢?
我们先来看一个大家熟悉的场景–教室排座位,如图:
教室里排座位
规定每一排坐两个人,如果班级人数是偶数(双数),那么学生刚好成对坐在一起,如果班级人数是(奇数)单数,那么就会有一个同学落单了。
我们使用数学语言来描述一下,如果班级人数是偶数,能被2整除,余数为0,刚好成对。如果班级人数是奇数,不能被2整除,余数为1,就必定有一个同学落单了。
所谓,余数指整数除法中被除数未被除尽部分,如果余数为0,说明刚好能整除。我们再来看一个生活中的场景:
在大部分语言中,用“%”来表示取余运算。a% b表示a除以b所得的余数,也叫做a对b取余;比如,100 % 3结果为1, 14 % 3结果为2,在Scratch编程中,专门提供了一个取余运算指令,如图:
取余指令
在我们的韩信点兵问题中,如果士兵每3人站一排,多出2人,每5人站一排,多出3人,每7人站一排,多出2人,这都是求余数运算。根据这3个条件还是不能直接计算出总人数,不过我们可以使用枚举法,战前是1500人,战死四五百人,那么战后的人数在1000~1100之间,因此,我们完全可以从1000开始,挨个的进行计算,直到1100为止,看有没有满足条件的数字。
我们将整个过程使用流程图表示如下:
韩信点兵程序流程图
程序设计
1.建立变量和列表
分别建立变量“人数”和列表“解”,如图:
建立变量和列表
2.初始化变量和列表
根据前面的分析,我们从1000开始枚举,所以需要把变量“人数”的初始值设为1000,而列表需要清空,编写代码如下:
变量和列表初始化
3.使用循环实现枚举
根据前面的分析,人数在1000到1100之间,这可以借助循环来进行枚举,如图所示:
循环遍历操作
4.筛选值
如果同时满足被3除余2、被5除余3、被7除余2这三个条件,就将整个数字放到列表中,对应的代码如下:
筛选满足条件的数字
完整的代码如下:
韩信点兵完整代码
执行代码,结果如下所示:
韩信点兵执行结果
从执行结果可以看出,韩信的部队人数是1073。
课堂反思
让学生编程程序,并填写程序测试单,如图所示:
提问,让学生进行小组讨论,然后回答问题:
- 第1个问题:什么是枚举法?
- 第2个问题:什么是余数?
- 第3个问题:描述下韩信是怎么计算士兵数量的?
延续拓展
请设计一个程序,让用户在键盘上输入今天的星期数和今后的天数,就可以计算出那一天的星期数。
日历
[提示]:让我们先来想一想,假设今天是星期天,我们怎么推算一天后,两天后……六天后是星期几?
课后练习
舞蹈队有24个同学跳孔雀舞。
舞蹈队
- 如果排成5行,平均每行几个同学,还余几个?
- 如果排成7行,平均每行几个同学,还余几个?
- 你能设计出几个排队方案,把同学正好排完(没有余数) ?