Scratch與數(shù)學(xué)的整合27
????????????????????????第27課????????二進(jìn)制(一)
一、課程導(dǎo)入
????????1、我們都知道,Scratch里運(yùn)算僅支持十進(jìn)制運(yùn)算,可它又屬于計(jì)算機(jī)程序,計(jì)算機(jī)僅支持二進(jìn)制運(yùn)算。那么問(wèn)題來(lái)了:要在Scratch里實(shí)現(xiàn)二進(jìn)制運(yùn)算該怎么辦呢?
·????????2、在此之前,我們還是先了解一下十進(jìn)制、二進(jìn)制的規(guī)則以及區(qū)別和聯(lián)系,然后再探索一下如何對(duì)這兩種數(shù)值進(jìn)行相互轉(zhuǎn)換。
二、知識(shí)儲(chǔ)備
????????1、十進(jìn)制逢十進(jìn)一,即0,1,2,3,……,9;二進(jìn)制只有0,1。
????????2、按權(quán)展開(kāi):按權(quán)展開(kāi)式一種解題方法和形式,指數(shù)字按照位權(quán)展開(kāi)相乘,結(jié)果轉(zhuǎn)換為十進(jìn)制就是其真實(shí)值。
????????3、對(duì)于十進(jìn)制轉(zhuǎn)二進(jìn)制而言,算法要分類討論:原數(shù)為整數(shù)時(shí)采用短除法;原數(shù)為小數(shù)時(shí),小數(shù)部分按照十進(jìn)制乘法的算法轉(zhuǎn)換,整數(shù)部分還是采用短除法。
????????4、二進(jìn)制數(shù)只能是整數(shù)或小數(shù)。
三、探究新知
????????1、145(2)=? ? ??(10)。
????????分析:145里面有1個(gè)百、4個(gè)十、1個(gè)5,那么145的十進(jìn)制用按權(quán)展開(kāi)式表達(dá)就是1×102+4×10+5×1,其中102,10,1就是“權(quán)”,因此對(duì)應(yīng)的,145的二進(jìn)制用按權(quán)展開(kāi)式表達(dá)就是1×22+4×2+5×2**0。二進(jìn)制轉(zhuǎn)換成十進(jìn)制只需算出二進(jìn)制的按權(quán)展開(kāi)式即可。1×22+4×2+5×2**0=17。故填17。
????????2、32(10)=? ? ? ??(2)。
????????分析:我們采用短除法將原數(shù)不斷除以2并得到指定的余數(shù),一直除到商為0為止,最后將每個(gè)余數(shù)倒序排起來(lái)。
除法???????????余數(shù)
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、25.4(10)=? ? ??(2)。
????????分析:解決該問(wèn)題的第一步就是要把它分成零點(diǎn)幾加幾的形式,25.4=25+0.4,由于一個(gè)數(shù)加零點(diǎn)幾只需將整數(shù)位、小數(shù)點(diǎn)、小數(shù)位各自直接落下來(lái)就可以了,因此其中的25采用短除法,0.4不斷乘以2.直到乘積為整數(shù)為止。
25÷2=12……1,12÷2=6,5÷2=3,3÷2=1……1,1÷2=0……1。
乘法?????????????整數(shù)位
0.4×2=0.8??????0? ?????
0.8×2=1.6?????1
0.6×2=1.2?????1
0.2×2=0.4????? 0
……????????????? ……
????????整數(shù)部分與小數(shù)部分連起來(lái)為11001.01100110……故填11001.01100110……
四、流程圖
????????1、首先看二進(jìn)制轉(zhuǎn)十進(jìn)制的流程圖:開(kāi)始時(shí)輸入原數(shù),然后分別建立按權(quán)展開(kāi)式的權(quán),程序求得或得知權(quán)的結(jié)果后,再接下來(lái)用每位的權(quán)分別對(duì)應(yīng)乘以原數(shù)的每一位,再接下來(lái)把上一步4組變量值相加后得到轉(zhuǎn)換后的數(shù)就可以了。

? ? ? ?2、接下來(lái)再看看整數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制的流程圖:開(kāi)始時(shí)仍然輸入原數(shù)。然后開(kāi)始除2取余,下一步判斷該式的商是否≠0,如果判斷為“是”則將換為原數(shù)÷2直接得到轉(zhuǎn)換后的數(shù),否則再接下來(lái)回到除2取余那步重復(fù)執(zhí)行,直到判斷為“否”時(shí)倒序排列余數(shù)并作為轉(zhuǎn)換后的數(shù)。

? ? ?? 3、最后看看小數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制的流程圖,首先詢問(wèn)并回答十進(jìn)制的小數(shù)部分并判斷回答是否=0,若“是”則下一步執(zhí)行“二進(jìn)制數(shù)=0”,否則再判斷回答是否=5,若“是”則下一步執(zhí)行“二進(jìn)制數(shù)=5”,否則再下一步執(zhí)行乘2取整,并判斷結(jié)果是否包含循環(huán)節(jié),若“否”則重復(fù)執(zhí)行乘2取整并對(duì)其結(jié)果判斷到“真”再將變量“二進(jìn)制的小數(shù)部分(不含循環(huán)節(jié))”設(shè)為整數(shù)順序排列的值。然后要知道十進(jìn)制數(shù)的整數(shù)部分并判斷十進(jìn)制的小數(shù)部分是否=0,若“是”則接下來(lái)執(zhí)行“新數(shù)=十進(jìn)制的整數(shù)部分”,否則判斷十進(jìn)制的小數(shù)部分是否等于5,最后根據(jù)情況作答。

五、變量信息
? ? ??1、編二進(jìn)制轉(zhuǎn)十進(jìn)制用到的變量:a,b,c,d,千位的權(quán),結(jié)果的千位、百位的權(quán)、結(jié)果的百位、十位的權(quán)、結(jié)果的十位、個(gè)位的權(quán)、結(jié)果的個(gè)位、轉(zhuǎn)換后的值、轉(zhuǎn)換前的值

? ? ? ? 2、編整數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制用到的變量:十進(jìn)制數(shù)、二進(jìn)制數(shù)
????????3、編小數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制用到的變量:十進(jìn)制的小數(shù)部分、二進(jìn)制數(shù)、二進(jìn)制數(shù)的小數(shù)部分(不含循環(huán)節(jié))、新數(shù)

六、代碼示例
????????先來(lái)看看二進(jìn)制轉(zhuǎn)十進(jìn)制怎么編寫代碼:
當(dāng)綠旗被點(diǎn)擊
????????我們?cè)O(shè)十進(jìn)制數(shù)為abcd(2),那么二進(jìn)制按權(quán)展開(kāi)式就是a×23+b×22+c×2+d**0,于是詢問(wèn)并回答a,b,c,d的值并代入按權(quán)展開(kāi)式,進(jìn)而求得改為十進(jìn)制數(shù)的真實(shí)值。
詢問(wèn)請(qǐng)輸入a的值
將a設(shè)為回答
將千位的權(quán)設(shè)為1
重復(fù)執(zhí)行3次
將千位的權(quán)增加:千位的權(quán)×1
等待1秒
將千位的權(quán)設(shè)為:a×千位的權(quán)

? ? ? ∵要詢問(wèn)并回答多個(gè)變量,∴需要每回答完一個(gè)結(jié)果都要等待1秒。
等待1秒
詢問(wèn)請(qǐng)輸入b的值
將b設(shè)為回答
將百位的權(quán)設(shè)為1
重復(fù)執(zhí)行3次
將百位的權(quán)增加:百位的權(quán)×1
等待1秒
將百位的權(quán)設(shè)為:b×百位的權(quán)

? ? ? ?2的1次方等于它指數(shù)本身,因此求結(jié)果的十位不用重復(fù)執(zhí)行。
等待1秒
詢問(wèn)請(qǐng)輸入c的值
將c設(shè)為回答
將十位的權(quán)設(shè)為2
將結(jié)果的十位設(shè)為:c×十位的權(quán)

? ? ? ??2**0就不能直接用運(yùn)算模塊求值了,∵它的原意顯然是0個(gè)2相乘,不過(guò)重復(fù)0次怎么執(zhí)行???2**0=1,只能照抄這個(gè)結(jié)果。
等待1秒
詢問(wèn)請(qǐng)輸入d的值
將d設(shè)為回答
將個(gè)位的權(quán)設(shè)為2
將結(jié)果的個(gè)位設(shè)為:d×個(gè)位的權(quán)
等待1秒
將轉(zhuǎn)換后的值設(shè)為:結(jié)果的個(gè)位+結(jié)果的十位+結(jié)果的百位+結(jié)果的千位
將轉(zhuǎn)換前的值設(shè)為:連接a連接b連接c連接d
說(shuō):“連接(4個(gè)連接)(和轉(zhuǎn)換前的值和)2=(和轉(zhuǎn)換后的值和)10”

? ? ??再來(lái)看看整數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制怎么編寫代碼:
?當(dāng)綠旗被點(diǎn)擊????(0)???????
????????(1)——(4):根據(jù)整數(shù)十進(jìn)制轉(zhuǎn)二進(jìn)制的方法可知,是對(duì)原數(shù)不斷除以2,雖然原數(shù)(10)=新數(shù)(2)是同一個(gè)等式內(nèi)兩個(gè)變量,但由于進(jìn)位制規(guī)則不同,∴為了避免矛盾,我們必須設(shè)二進(jìn)制數(shù)為“空”。它的過(guò)程是一個(gè)整體,∴要用到重復(fù)執(zhí)行。
重復(fù)執(zhí)行1次????(1)
詢問(wèn)請(qǐng)輸入十進(jìn)制數(shù)????(2)
將十進(jìn)制數(shù)設(shè)為回答????(3)
將二進(jìn)制數(shù)設(shè)為? ??????(4)
????????(5)——(7):接下來(lái)就可以改成二進(jìn)制數(shù)了。∵涉及到余數(shù),而系統(tǒng)內(nèi)步遇到余數(shù)時(shí)會(huì)用小數(shù)代替,這樣就“不合法”了,而向下取整只取該數(shù)的整數(shù)部分,∴要用向下取整模塊作出有必要的調(diào)整。
重復(fù)執(zhí)行到十進(jìn)制數(shù)<2????(5)
將二進(jìn)制數(shù)設(shè)為連接十進(jìn)制數(shù)÷2的余數(shù)和二進(jìn)制數(shù)????(6)
將十進(jìn)制數(shù)設(shè)為:十進(jìn)制數(shù)÷2向下取整????(7)
????????(8)——(10):當(dāng)“重復(fù)執(zhí)行到”模塊滿足判斷條件,即余數(shù)為0時(shí)商對(duì)應(yīng)為1就要執(zhí)行下面的程序。把余數(shù)看成一個(gè)整體和1連接起來(lái)就是最后的結(jié)果。
如果十進(jìn)制數(shù)=1那么????(8)
將二進(jìn)制數(shù)設(shè)為連接1和二進(jìn)制數(shù)????(9)
說(shuō):“連接(4個(gè)連接)(和回答和)10=(和二進(jìn)制數(shù)和)2”????(10)

? ? ? 最后看看小數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制怎么編寫代碼:? ?

??

??

??七、課后思考
? ? ? ?請(qǐng)用Scratch編寫下列程序:(1)已知10c0(2)=10(10),求c的值。(2)把零點(diǎn)幾的十進(jìn)制改編成八進(jìn)制。