韩信点兵-Scratch优秀教学案例设计系列第1篇

引入

韩信,中国历史上杰出军事家,与萧何、张良并列为汉初三杰。有一句众所皆知的话,叫做“韩信点兵,多多益善”,说的是韩信很会打仗,用兵如神。

韩信点兵
韩信点兵

“韩信点兵” 这个故事包含一个非常著名的数学问题。“韩信点兵”在数学上又被称作中国利余定理或是孙子定理。那么韩信点兵有什么特别之处呢?又是如何快速点出人数的呢?

韩信带兵1500人去打仗,战死四五百人。战后清点人数时,韩信命令士兵每3人站一排,多出2人;每5人站一排,多出3人;每7人站一排,多出2人。韩信由此马上算出了部队人数。请你也算一算,这支部队在战后还有多少人?

学习目标

[编程实现]:使用Scratch编程来计算韩信的部队人数。

[知识与技能]

  1. 熟练使用变量,包括创建变量、变量赋值
  2. 列表写入数据、读取数据的技能
  3. 认识运算分类积木中的取余运算积木

[过程与方法]:通过小组讨论交流合作,培养解决问题能力

[情感与价值观]:培养对信息技术的兴趣,培养想象力,逻辑思维能力

分析过程

通过题目的描述,这里涉及到余数的概念,那么什么是余数呢?

我们先来看一个大家熟悉的场景–教室排座位,如图:

教室里排座位
教室里排座位

规定每一排坐两个人,如果班级人数是偶数(双数),那么学生刚好成对坐在一起,如果班级人数是(奇数)单数,那么就会有一个同学落单了。

我们使用数学语言来描述一下,如果班级人数是偶数,能被2整除,余数为0,刚好成对。如果班级人数是奇数,不能被2整除,余数为1,就必定有一个同学落单了。

所谓,余数指整数除法中被除数未被除尽部分,如果余数为0,说明刚好能整除。我们再来看一个生活中的场景:

有余数的除法
有余数的除法

在大部分语言中,用“%”来表示取余运算。a% b表示a除以b所得的余数,也叫做a对b取余;比如,100 % 3结果为1, 14 % 3结果为2,在Scratch编程中,专门提供了一个取余运算指令,如图:

Scratch取余指令
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这三个条件,就将整个数字放到列表中,对应的代码如下:

图片[9]-韩信点兵_Scratch优秀教学案例设计第1篇-51scratch
筛选满足条件的数字

完整的代码如下:

Scratch韩信点兵完整代码
韩信点兵完整代码

执行代码,结果如下所示:

韩信点兵执行结果
韩信点兵执行结果

从执行结果可以看出,韩信的部队人数是1073。

课堂反思

让学生编程程序,并填写程序测试单,如图所示:

图片[12]-韩信点兵_Scratch优秀教学案例设计第1篇-51scratch

提问,让学生进行小组讨论,然后回答问题:

  • 第1个问题:什么是枚举法?
  • 第2个问题:什么是余数?
  • 第3个问题:描述下韩信是怎么计算士兵数量的?

延续拓展

请设计一个程序,让用户在键盘上输入今天的星期数和今后的天数,就可以计算出那一天的星期数。

日历
日历

[提示]:让我们先来想一想,假设今天是星期天,我们怎么推算一天后,两天后……六天后是星期几?

课后练习

舞蹈队有24个同学跳孔雀舞。

舞蹈队
舞蹈队
  1. 如果排成5行,平均每行几个同学,还余几个?
  2. 如果排成7行,平均每行几个同学,还余几个?
  3. 你能设计出几个排队方案,把同学正好排完(没有余数) ?
© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容