吳俊杰
主持人手記:本專(zhuān)欄主要介紹信息技術(shù)實(shí)驗(yàn)在基礎(chǔ)教育信息技術(shù)課當(dāng)中的典型案例,并期望這些案例能夠促進(jìn)信息技術(shù)課程學(xué)科合法性的提升、豐富信息技術(shù)課的教學(xué)內(nèi)容、拓展信息技術(shù)教師的課程設(shè)計(jì)視野。對(duì)此欄目有任何好的主意或建議,請(qǐng)發(fā)送稿件至towujunjie@163.com(主持人)或tougao1@chinaitedu.cn(雜志社)。
我們知道,二進(jìn)制的基礎(chǔ)是二值量,一個(gè)二值量可以表示兩種狀態(tài),兩個(gè)獨(dú)立的二值量可以表示2×2=4種狀態(tài),n個(gè)獨(dú)立的二值量可以表示2n種狀態(tài)。如果想將這些狀態(tài)和現(xiàn)實(shí)生活中需要測(cè)量或者控制的狀態(tài)結(jié)合起來(lái),就需要對(duì)其進(jìn)行編碼,將每種狀態(tài)和一種現(xiàn)實(shí)需要的計(jì)算機(jī)的輸入或輸出狀態(tài)對(duì)應(yīng)起來(lái)。例如,我們用二值量狀態(tài)表示不同的音符,則至少需要3個(gè)獨(dú)立的二值量,其8種狀態(tài)的7個(gè)狀態(tài)表示從do ~xi之間的7個(gè)音符,而這8種狀態(tài)如何和7個(gè)音符一一對(duì)應(yīng)起來(lái)則是一個(gè)編碼的過(guò)程,像這種將二值量的狀態(tài)和需要用二值量表述的信息一一對(duì)應(yīng)起來(lái)的過(guò)程,我們稱(chēng)為信息的編碼。在本章,我們將研究二值量的編碼的規(guī)律。
● 確定一組獨(dú)立二值量的編碼空間
獨(dú)立的兩個(gè)二值量是指他們之間可以彼此獨(dú)立地改變狀態(tài),如鍵盤(pán)上的兩個(gè)鍵,一個(gè)鍵按下并不會(huì)影響另一個(gè)鍵的狀態(tài),它們是彼此獨(dú)立的,但如果將兩個(gè)鍵用一根木桿粘接起來(lái),它們彼此之間就不再獨(dú)立了。
在Scratch傳感器板中,端口A、B、C、D是四個(gè)獨(dú)立的二值量,它們各自的兩種狀態(tài)放置到圖1所示的如果的條件判斷當(dāng)中,不同的組合就構(gòu)成了不同的狀態(tài)。
我們將LabPlusTMScratch傳感器板的四個(gè)按鍵接入A~D四個(gè)端口上(如圖2),四個(gè)按鍵便可控制四個(gè)端口的邏輯值。
當(dāng)然,我們可以通過(guò)復(fù)雜的邏輯關(guān)系,寫(xiě)一個(gè)非常長(zhǎng)的邏輯表達(dá)式來(lái)表述不同的狀態(tài),但此次我們用0表示按鍵彈起(默認(rèn)狀態(tài)),1表示按鍵按下,以ABCD的次序來(lái)建立一個(gè)0和1構(gòu)成的字符串,這個(gè)四位的字符串,用變量表示(如下頁(yè)圖3),用來(lái)偵測(cè)當(dāng)前狀態(tài)。
按下空格之后,任意按下這四個(gè)按鍵的一種組合,程序會(huì)記錄當(dāng)前的狀態(tài)到變量中,當(dāng)然我們可以使用枚舉的方法列出這16種狀態(tài),也可以發(fā)揮計(jì)算機(jī)的優(yōu)勢(shì),即我們用一個(gè)鏈表來(lái)保存所有的狀態(tài),接下來(lái)隨機(jī)地“亂按”出一種狀態(tài),讓計(jì)算機(jī)判斷該狀態(tài)是否是一個(gè)之前沒(méi)有發(fā)現(xiàn)的狀態(tài),并判斷是否要放在 鏈表中(如圖4)。
很快16種狀態(tài)就采集完成了,如果我們現(xiàn)在有一個(gè)簡(jiǎn)單的需求,即用二進(jìn)制的組合表示0~9這10個(gè)數(shù)字,狀態(tài)空間中狀態(tài)的數(shù)目16已經(jīng)能夠滿(mǎn)足將0~9這10個(gè)數(shù)字一一對(duì)應(yīng)起來(lái)的要求,下一步就需要建立一種對(duì)應(yīng)規(guī)則,即編碼。
● 將二值量和需要描述的信息對(duì)應(yīng)起來(lái)
圖5左圖的鏈表表示的是隨機(jī)生成的16種狀態(tài),這16種狀態(tài)的枚舉是沒(méi)有規(guī)律的,大概通過(guò)100次的隨機(jī)按鍵,會(huì)把這16種狀態(tài)收集齊全,狀態(tài)數(shù)目越多,越難以通過(guò)枚舉的方法得到所有狀態(tài)。因此,圖5右圖所示使用的排列組合方法,依據(jù)一些規(guī)律,能找到這16種狀態(tài),但是這種方法的效率仍然不夠高。無(wú)論是隨機(jī)組合得到的16種狀態(tài),還是用排列組合的方法得到的16種狀態(tài),我們都可以挑選前10種狀態(tài)和需要表述的0~9的數(shù)字相對(duì)應(yīng)。
考慮到在沒(méi)有任何按鍵按下時(shí),系統(tǒng)的默認(rèn)狀態(tài)為0000,因此默認(rèn)狀態(tài)不加入編碼,將圖5右圖的狀態(tài)與0~9的數(shù)字對(duì)應(yīng),得到了表1所示的編碼表,至此初步完成了編碼的過(guò)程。
表1的結(jié)論說(shuō)明至多使用四個(gè)按鍵當(dāng)中的兩個(gè),我們就可以獨(dú)立表示出10個(gè)不同的信息,根據(jù)編碼表我們可以將當(dāng)前狀態(tài)轉(zhuǎn)化為十進(jìn)制數(shù)輸出。我們使用如下頁(yè)圖6所示的廣播,就可以將用四個(gè)按鍵的組合輸出0~9所表示的數(shù)字。
但是如果做實(shí)驗(yàn)會(huì)發(fā)現(xiàn)當(dāng)輸入數(shù)字4的時(shí)候,即按鍵A和按鍵B同時(shí)按下,有時(shí)系統(tǒng)最終顯示的可能是0或者1,這是因?yàn)椋砷_(kāi)按鍵的瞬間,有可能按鍵A比按鍵B后松開(kāi),系統(tǒng)會(huì)認(rèn)為,只有A按下,因此認(rèn)為當(dāng)前狀態(tài)為1000,輸出0,同理有可能輸出1,這個(gè)問(wèn)題我們會(huì)在之后的文章中解決。
● 二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)化
用枚舉的方法得到所有狀態(tài)雖然比較容易理解,但是當(dāng)要處理的二值量的數(shù)目增多,即狀態(tài)的位數(shù)增多后,我們將會(huì)越來(lái)越難以枚舉所有狀態(tài),因此有必要用更加科學(xué)的方法將所有狀態(tài)表示出來(lái)。首先,讓我們回顧一下十進(jìn)制的情況,假設(shè)A、B、C、D四個(gè)端口每個(gè)端口都有0~9共10種狀態(tài),那么它們的組合自然是從0000~9999這10000種狀態(tài),我們獲取每個(gè)狀態(tài)的方法是,從最小的狀態(tài)0000開(kāi)始,每次給當(dāng)前狀態(tài)加1,當(dāng)我們加9次1得到狀態(tài)0009之后,我們需要運(yùn)用進(jìn)位法則即當(dāng)當(dāng)前位已經(jīng)為最高位9的時(shí)候,需要將當(dāng)前位歸0,之后,將上一位加1。運(yùn)用類(lèi)似的規(guī)則,我們發(fā)現(xiàn)二進(jìn)制的最高位為1,即0001再加1之后,末尾的一位應(yīng)該是0,上一位應(yīng)該加1,即變成0010。用這種加法法則,我們能夠從最小的狀態(tài)0000加起,一直加到1111,至此得到二進(jìn)制轉(zhuǎn)10進(jìn)制的編碼表。
我們可以將A端口不同,其余端口相同的二進(jìn)制狀態(tài)加以比較,發(fā)現(xiàn)它們都相差8;同理B端口不同,其余端口相同的二進(jìn)制狀態(tài)之間相差4;C端口不同,其余端口相同的二進(jìn)制狀態(tài)相差2;D端口不同,其余端口相同的各個(gè)狀態(tài)之間相差1。
這個(gè)規(guī)律可以表示為:十進(jìn)制數(shù)=A×8+B×4+C×2+D×1。其中A、B、C、D為各自端口的當(dāng)前狀態(tài),0表示彈起,1表示按下。如果用上面的公式來(lái)輸入0~9的數(shù)字,其中默認(rèn)需要將轉(zhuǎn)化的十進(jìn)制數(shù)減1,得到圖7所示的輸出結(jié)果。
至此,我們用科學(xué)探究的方法,研究了如何用四個(gè)獨(dú)立的二進(jìn)制數(shù)表示0~9共10個(gè)數(shù)字,在解決這個(gè)問(wèn)題的過(guò)程中,我們發(fā)現(xiàn)了四個(gè)獨(dú)立二進(jìn)制數(shù)所能表示的狀態(tài)總數(shù),并且知道了如何建立一個(gè)編碼表,找到了二進(jìn)制的進(jìn)位法則,并且通過(guò)對(duì)這個(gè)法則的深入研究發(fā)現(xiàn)了二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)的轉(zhuǎn)化規(guī)律,并且依照這個(gè)規(guī)律將程序簡(jiǎn)化。本單元的內(nèi)容在整個(gè)感測(cè)與控制技術(shù)的課程體系中處于非常核心的位置,二進(jìn)制的編碼是從數(shù)字化的開(kāi)始也是通信技術(shù)的基礎(chǔ)。本章內(nèi)容,期望通過(guò)探究的方式,而不是講授,讓學(xué)生理解為什么二進(jìn)制和十進(jìn)制的轉(zhuǎn)化方式是這樣的,這種講法,在之前的信息技術(shù)教材中是少有的。而將科學(xué)探究的過(guò)程引入到信息技術(shù)教學(xué)中,將原本“轉(zhuǎn)換公式”這種程序性知識(shí),轉(zhuǎn)化為“基于項(xiàng)目的學(xué)習(xí)”的過(guò)程性知識(shí),是信息技術(shù)基礎(chǔ)理論教學(xué)視角的一種轉(zhuǎn)變,而使用科學(xué)探究的方法,讓學(xué)生體驗(yàn)學(xué)科專(zhuān)家類(lèi)似的研究過(guò)程,也是為了提高學(xué)生面對(duì)復(fù)雜的真實(shí)情境的問(wèn)題解決能力,這種科學(xué)探究的方法,將會(huì)在后續(xù)文章中反復(fù)涉及。endprint