Scratch与数学的整合27

2023-08-17 07:01:16 来源: 哔哩哔哩

第27课        二进制(一)

一、课程导入

1、我们都知道,Scratch里运算仅支持十进制运算,可它又属于计算机程序,计算机仅支持二进制运算。那么问题来了:要在Scratch里实现二进制运算该怎么办呢?


(相关资料图)

·        2、在此之前,我们还是先了解一下十进制、二进制的规则以及区别和联系,然后再探索一下如何对这两种数值进行相互转换。

二、知识储备

1、十进制逢十进一,即0,1,2,3,……,9;二进制只有0,1。

2、按权展开:按权展开式一种解题方法和形式,指数字按照位权展开相乘,结果转换为十进制就是其真实值。

3、对于十进制转二进制而言,算法要分类讨论:原数为整数时采用短除法;原数为小数时,小数部分按照十进制乘法的算法转换,整数部分还是采用短除法。

4、二进制数只能是整数或小数。

三、探究新知

1、145(2)=      (10)。

分析:145里面有1个百、4个十、1个5,那么145的十进制用按权展开式表达就是1×10²+4×10+5×1,其中10²,10,1就是“权”,因此对应的,145的二进制用按权展开式表达就是1×2²+4×2+5×2**0。二进制转换成十进制只需算出二进制的按权展开式即可。1×2²+4×2+5×2**0=17。故填17。

2、32(10)=        (2)。

分析:我们采用短除法将原数不断除以2并得到指定的余数,一直除到商为0为止,最后将每个余数倒序排起来。

除法           余数

32÷2=16     0

16÷2=8       0

8÷2=4         0

4÷2=2          0

2÷2=1          0

1÷2=0          1

因此32(10)=100000(2),故100000。

3、(10)=      (2)。

分析:解决该问题的第一步就是要把它分成零点几加几的形式,=25+,由于一个数加零点几只需将整数位、小数点、小数位各自直接落下来就可以了,因此其中的25采用短除法,不断乘以2.直到乘积为整数为止。

25÷2=12……1,12÷2=6,5÷2=3,3÷2=1……1,1÷2=0……1。

乘法             整数位

×2=      0       

×2=     1

×2=     1

×2=      0

……              ……

整数部分与小数部分连起来为……故填……

四、流程图

1、首先看二进制转十进制的流程图:开始时输入原数,然后分别建立按权展开式的权,程序求得或得知权的结果后,再接下来用每位的权分别对应乘以原数的每一位,再接下来把上一步4组变量值相加后得到转换后的数就可以了。

2、接下来再看看整数的十进制转二进制的流程图:开始时仍然输入原数。然后开始除2取余,下一步判断该式的商是否≠0,如果判断为“是”则将换为原数÷2直接得到转换后的数,否则再接下来回到除2取余那步重复执行,直到判断为“否”时倒序排列余数并作为转换后的数。

3、最后看看小数的十进制转二进制的流程图,首先询问并回答十进制的小数部分并判断回答是否=0,若“是”则下一步执行“二进制数=0”,否则再判断回答是否=5,若“是”则下一步执行“二进制数=5”,否则再下一步执行乘2取整,并判断结果是否包含循环节,若“否”则重复执行乘2取整并对其结果判断到“真”再将变量“二进制的小数部分(不含循环节)”设为整数顺序排列的值。然后要知道十进制数的整数部分并判断十进制的小数部分是否=0,若“是”则接下来执行“新数=十进制的整数部分”,否则判断十进制的小数部分是否等于5,最后根据情况作答。

五、变量信息

1、编二进制转十进制用到的变量:a,b,c,d,千位的权,结果的千位、百位的权、结果的百位、十位的权、结果的十位、个位的权、结果的个位、转换后的值、转换前的值

2、编整数的十进制转二进制用到的变量:十进制数、二进制数

3、编小数的十进制转二进制用到的变量:十进制的小数部分、二进制数、二进制数的小数部分(不含循环节)、新数

六、代码示例

先来看看二进制转十进制怎么编写代码:

当绿旗被点击

我们设十进制数为abcd(2),那么二进制按权展开式就是a×2³+b×2²+c×2+d**0,于是询问并回答a,b,c,d的值并代入按权展开式,进而求得改为十进制数的真实值。

询问请输入a的值

将a设为回答

将千位的权设为1

重复执行3次

将千位的权增加:千位的权×1

等待1秒

将千位的权设为:a×千位的权

∵要询问并回答多个变量,∴需要每回答完一个结果都要等待1秒。

等待1秒

询问请输入b的值

将b设为回答

将百位的权设为1

重复执行3次

将百位的权增加:百位的权×1

等待1秒

将百位的权设为:b×百位的权

2的1次方等于它指数本身,因此求结果的十位不用重复执行。

等待1秒

询问请输入c的值

将c设为回答

将十位的权设为2

将结果的十位设为:c×十位的权

2**0就不能直接用运算模块求值了,∵它的原意显然是0个2相乘,不过重复0次怎么执行啊?2**0=1,只能照抄这个结果。

等待1秒

询问请输入d的值

将d设为回答

将个位的权设为2

将结果的个位设为:d×个位的权

等待1秒

将转换后的值设为:结果的个位+结果的十位+结果的百位+结果的千位

将转换前的值设为:连接a连接b连接c连接d

说:“连接(4个连接)(和转换前的值和)2=(和转换后的值和)10”

再来看看整数的十进制转二进制怎么编写代码:

当绿旗被点击    (0)       

(1)——(4):根据整数十进制转二进制的方法可知,是对原数不断除以2,虽然原数(10)=新数(2)是同一个等式内两个变量,但由于进位制规则不同,∴为了避免矛盾,我们必须设二进制数为“空”。它的过程是一个整体,∴要用到重复执行。

重复执行1次    (1)

询问请输入十进制数    (2)

将十进制数设为回答    (3)

将二进制数设为        (4)

(5)——(7):接下来就可以改成二进制数了。∵涉及到余数,而系统内步遇到余数时会用小数代替,这样就“不合法”了,而向下取整只取该数的整数部分,∴要用向下取整模块作出有必要的调整。

重复执行到十进制数<2    (5)

将二进制数设为连接十进制数÷2的余数和二进制数    (6)

将十进制数设为:十进制数÷2向下取整    (7)

(8)——(10):当“重复执行到”模块满足判断条件,即余数为0时商对应为1就要执行下面的程序。把余数看成一个整体和1连接起来就是最后的结果。

如果十进制数=1那么    (8)

将二进制数设为连接1和二进制数    (9)

说:“连接(4个连接)(和回答和)10=(和二进制数和)2”    (10)

最后看看小数的十进制转二进制怎么编写代码:   

七、课后思考

请用Scratch编写下列程序:(1)已知10c0(2)=10(10),求c的值。(2)把零点几的十进制改编成八进制。

标签:

[责任编辑:]

最近更新