二進位與像素圖案
課程總覽
依照「臺北市資訊科技課程教學綱要」的規定,低年級應實施不插電運算思維課程共 12 節課,本校安排於二年級上學期實施「二進位與像素圖案」單元共 4 節課。
此單元教學活動不會用到電腦,因此本網頁不是必備的,僅提供給老師參考。
請準備以下教具:
二進位撲克牌每人 5 張,正面黏貼圓點,數量分別為 1、2、4、8、16。老師需使用放大版約 A4 大小的紙張取代撲克牌,圓點也必須放大。
二進位與十進位數字對照表一份,B4 或對開大小。請列印學生使用的 A4 版本一人一份。
猜數字魔術卡放大版,B4 大小,內容請參考網頁。學生使用的空白魔術卡片一人一份,卡片上為 4x4 空白表格,需要五張,可以列印在一張 A4 紙張然後剪開。
像素圖案需要使用到方格紙,一個學生一張。
雙面軟磁鐵,一面黑一面白,裁剪為 8 公分見方,共 36 個。
如果不想花時間準備撲克牌,可以用網頁版的,但是必須到電腦教室上課。
本單元學生將學會:
樣式比對:能透過翻牌練習,找出二進位的規律。
樣式比對:能利用二進位與十進位對照表,製作猜數字魔術的道具卡片。
抽象化:能用二進位表徵像素圖案。
演算法:能將像素圖案表徵為向量式編碼、變動長度壓縮編碼。
資料來源
課程內容取材自「不插電的資訊科學」一書,請點擊連結下載全文!
單元一:二進位與像素圖案
什麼是二進位?
大多數的人類都擁有十個指頭,因此當需要計算數量時,就會自然而然的數著指頭來計算,但要如何計算超過 10 的數字呢?聰明的中國人想到了「位數」這個觀念,把兩個數字疊在一起來表示,如右圖。位數的觀念流傳到西方後,與印度-阿拉伯數字相結合,就成為現在所使用的十進位制。
所謂「十進位」,意思是每數到十就要增加一個位數,稱為「十位」,十個十則稱為「百位」......等等。
小朋友想想看,如果人類像「哆啦A夢」一樣只有手掌沒有手指,那要如何數數呢?
因為有兩隻手,所以最多只能數到 2,那就只能用「二進位」囉!
事實上在「二進位」被發明之前,我們已經在生活中廣泛地使用「二元狀態」來表達各種互相矛盾的觀念。例如:右邊照片上的開關直接使用「1」和「0」來表示「開」和「關」。
但是這種觀念與「二進位」並不完全相同,因為它們還沒有被運用於數學計算。
「二進位」到底與「電腦」有什麼關係呢?
因為電腦是使用「電位」來進行數學計算,可以想成是「通電」、「斷電」(其實也就是開關喔!),利用通電和斷電來控制電壓的變化就可以計算數學了。
給老師的說明
在電晶體(半導體)取代真空管之後,已經不再使用「通路」、「斷路」這樣的二元狀態,改用「高電位」、「低電位」來替代。
二進位的發明(1703年)遠早於電腦(1950年),曾經有一度被認爲是無用的數學。電腦之所以採用「二進位」不採用「十進位」,是因為早期電腦所使用的真空管只能表現「二元狀態」,無法表示「多元狀態」。也因為電腦的發明和採用,二進位才成為顯學。
除了數學計算以外,使用更為廣泛的「邏輯運算單元」(CPU 中的邏輯電路)的設計也是基於「二元狀態」。這也是電腦繼續採用二進位的最主要原因。
你會跟電腦一樣,只使用「0」 和「1」來數數嗎?
請把二進位撲克牌擺放在桌面上,從右邊數過來,第一張放點數最少的 1,第二張是點數第二少的 2 ......第五張則是 16,像下面這樣:
關於排列順序
十進位最右邊是個位,往左邊是十位、百位,這種排列方式稱為「高位優先」(big-endian),這是我們最習慣的方式。
在電腦上為了提高計算效率,會採取「低位優先」(little-endian)的方式排列。這兩種排列方式只是表示法不同,本質上沒有差異。
除了表示法的差異,計算順序也有兩種,中國的珠算是從左算到右,而現代數學則習慣從右算到左。儘管如此,計算結果並不會有不同。
請把所有的撲克牌翻到背面。把右邊第一張和第三張翻開,數數看總共是多少點?
翻開的牌是 1,沒翻開的牌是 0,五張牌的牌面是 00101,所以 00101 = 5
請隨意翻開或蓋上幾張牌,然後把牌面和點數記錄起來,牌面代表二進位數字,點數代表十進位數字。
沒有二進位撲克牌嗎? 請利用底下的網頁版撲克牌。
請試著按照順序用撲克牌表示 1、2、3、4、5......,並從其中找到規律性,讓數字一直加 1。
有什麼規律性?
從右邊往左邊找到蓋著的牌,將它翻開,如果右邊還有牌,將他們全部蓋上。
例如:3,右邊已經有兩張牌翻開,加 1 時必須翻開第三張牌,然後把右邊兩張牌蓋起來。
又例如:5,右邊三張牌中,第二張是蓋著的,第一張是翻開的,所以加 1 時把第二張牌翻開,然後蓋住第一張牌。
如何表示 0 ?
把所有的牌蓋起來就是 0,00000 = 0
5 張牌最多可以表示多大的數字?
根據實際測試結果為 31。 11111 = 31,用點數來看是 16+8+4+2+1 = 31。
5 張牌總共可以表示幾個數字呢?
31 再加上 0 這個數字,總共 32 個數字。
延伸活動:
老師從 0~31 中隨便挑一個數字,讓學生用二進位表示,看誰最快完成而且正確。
老師在黑板上用撲克牌放大版排出二進位數字,讓學生說出十進位數字,看誰最快最正確?
老師不使用教具,直接用粉筆寫出二進位數字,例如:01101,讓學生說出十進位數字,看誰最快最正確?
第二節課
猜數字魔術
老師把預先製作的魔術卡片張貼在黑板上,排列如下圖:
請學生在心中想一個數字,必須是牌面有出現的數字,然後由老師隨機點一位同學,請他上台把出現該數字的牌一一指出來,然後面向老師直視老師的雙眼,讓老師施展讀心術,讀出同學心中的數字。接著老師就可以大聲說出感應到的數字。
誰想玩這個遊戲呢?請同學上台來挑戰老師的讀心術,比賽看看是同學的眼睛比較會保守秘密,還是老師的讀心術比較厲害!
回想一下上節課的內容,老師為什麼總是能猜中呢?
假設同學心中想的是 24,這個數字出現在左邊的第一張和第二張卡片,如果用 0 表示沒出現, 1 表示有出現,那就是 11000。
請同學把上節課的二進位撲克牌拿出來,排列成 11000,然後把所有點數相加,得到 24。也就是說 11000 = 24
現在仔細觀察魔術卡片的左上角,這個數字是不是與二進位卡片上的點數相同呢?
所以變魔術時,把被指出的卡片左上角數字加起來,16+8 = 24,就得到同學心中的數字了!
利用底下的網頁玩玩看,試著找出讀心術的秘密!
這個魔術的秘密就是二進位。要製作魔術卡片,首先必須先製作「二進位與十進位對照表」,請老師點擊下方的文件建立副本,列印給全班同學,一人一張,副本文件可以線上編輯讓學生可以核對答案。還記得上一節課學會的翻牌技巧嗎?運用這個技巧把對照表完成。
完成對照表後,請將二進位最右邊的格子是 1 的數字挑出來,寫在空白魔術卡片上(如右上文件,請老師事先下載列印好),寫在哪個格子都可以!注意:不要漏掉數字或是重複同一個數字。請檢查卡片上的數字,是不是剛好都是奇數呢?如果不是的話,就是做錯了喔!
第一張魔術卡片完成後,接著挑出二進位右邊數來第二格是 1 的數字,寫在第二張空白魔術卡片上。注意:不要漏掉數字或是重複同一個數字。請比對卡片上的數字,是不是跟對照表上面的一樣呢?如果不是的話,就是做錯了喔!
依序完成剩下的魔術卡片之後,下課時就可以跟同學一起玩喔!
如何讓這個魔術看起來更厲害:
魔術卡片上的數字不要照順序排列,寫亂一點這樣比較不容易看出規律性。(數字要寫工整,不要鬼畫符喔!)
變魔術之前先把魔術卡片交給對方,請對方洗牌!如果對方不會洗牌,那就請對方任意對調順序!
如果對方洗好牌,要把魔術卡片還給你,這個時候就跟他說「我不用碰到卡片也能施展讀心術喔!」請對方把卡片收好。
請對方一張一張看魔術卡片,如果找到自己內心的數字,就把卡片正面展示給你看。趁這個機會把卡片上最小的數字記起來。
看完所有卡片後,把剛剛記住的數字加起來就是答案,但是不要急著告訴對方答案。要先假裝正在感應,但是收不到訊息,請對方再用力集中注意力。「對,繼續,答案快出現了!」。相信公佈答案時,對方一定會嚇一跳!
第三節課
像素圖案
小朋友,你們有看過電腦動畫嗎?你知道電腦是如何顯示圖像的嗎?
舉例來說,要顯示小寫 a,可以在方格紙上把格子塗黑,先把圖案設計出來,如右圖。這樣的圖案稱為「像素圖案」。
要讓電腦產生一樣的圖案,必須寫程式。首先必須告訴電腦,一行有幾格,然後把程式指令轉換成底下的符號來表示:
→:代表向右移動一格,如果右邊已經沒有格子,就移到下一行的最左邊。
x:代表要把格子塗黑。
用這個方法,我們可以把小寫 a,寫成下面的程式:
5→x→x→x→→→→→→x→→x→x→x→x→x→→→→x→x→→→→x→→x→x→x→x
請試著按照上面的指令,把圖案畫在老師發下的方格紙上面,跟隔壁同學比對看看一樣不一樣。
請畫出以下三個像素圖案:(將題目貼在下面網頁的向量表示法中,檢查答案對不對!)
3→x→→x→x→x→→x
4→x→x→→x→→→x→x→→→x→→x→x
5→x→→x→→x→→x→→x→x→→→→x→→x→→x→→→→x
像素圖案繪製完成後,如果要儲存成電腦檔案,有兩種格式可以選擇:
向量式:直接將產生像素的程式碼儲存起來,讀取檔案時只要再執行一次就可以得到相同圖案。
點陣式:將像素圖案轉換成二進位數字後再儲存。
右圖是把小寫 a 圖案,轉換成二進位數字,空格是 0,塗黑的格子是 1。
右邊的像素圖案,是動物園裡最受歡迎的兩隻動物,你能將他們轉換成二進位數字,以便儲存到電腦裡面永久保存嗎?
使用上面介紹的方法儲存電腦圖像,還有一個小問題,就是隨著圖像越來越大,儲存空間就會不夠。如果能有一個方法可以把大的圖案縮小後再儲存,然後讀出來的時候,再由電腦自動放大回原來的樣子,這樣就更完美了。這種方法稱為「壓縮」,就像媽媽把冬天棉被收起來時,會先摺疊壓平再裝到袋子裡一樣!
最簡單的壓縮方法是將相同的資料改用次數表示,稱為「變動長度壓縮法」(run length encoding)
以小寫 a 做例子,第一行由左到右分別是 1 個白,3 個黑,1 個白,寫成「1,3,1」,第二行開始是 4 個白,1 個黑,寫成「4,1」,第三行開始是 1 個白和 4 個黑寫成「1,4」,第四行一開始不是白色,而是黑色,這樣就會跟前面幾行的規則不同,我們希望每一行都是從白開始,因此先加一個 0,表示沒有白色,改由黑色開始,然後是 1 個黑,3 個白,1個黑,寫成「0,1,3,1」,第五行與第四行相同是「0,1,3,1」,最後一行開始是 1 個白,4 個黑,寫成「1,4」。
我們希望一個圖案儲存成一個檔案,而不是一行一行存在不同的檔案裡。所以剛剛的資料要儲存到電腦裡時,會連接在一起變成:1,3,1,4,1,1,4,0,1,3,1,0,1,3,1,1,4
但是變成這樣的話,電腦不知道要還原成 5x6 的圖案。所以還要在資料的最前面加上 5,6,把圖案的大小也記錄起來,完整的資料像這樣:5,6,1,3,1,4,1,1,4,0,1,3,1,0,1,3,1,1,4
延伸活動:
請自己設計一個像素圖案,然後把它變成壓縮格式,交給你隔壁同學!(你可以利用下面的網頁來製作。)
拿到隔壁同學給你的數字串後,你能夠像電腦一樣把圖案還原嗎?
第四節課
同位元檢測
老師把 25 張雙色軟磁鐵貼在黑板上,排列成 5x5 陣列。
請一位同學上台來把任意幾張圖案翻面變成隨機圖案。老師覺得還是不夠亂,於是又補上一行一列變成 6x6 陣列。
接下來是記憶力大考驗,等一下老師閉上雙眼時,請小朋友把其中一張牌翻面,不要讓老師知道是哪一張!
老師根據記憶中的牌形進行比對,找出被偷偷改變的牌。把這張被找出來的牌翻回原來的那一面,再請下一位同學來挑戰!
為什麼老師總是能夠發現哪一張牌被改變呢?
事實上,老師並不是憑著記憶力找到的,而是利用稱為「同位元檢測」的技巧發現的!
我們都知道警察會透過指紋抓犯人,為什麼大家不擔心警察會抓錯人呢?那是因為每個人的指紋都是獨一無二的,沒有人會相同,因此指紋被稱為「個人的生理特徵」。那麼如果資料有「指紋」是不是就能防止任何資料被亂改呢?
很可惜資料是沒有指紋的,不過我們可以用一些方法來觀察特徵,這樣也能起到類似指紋的功能!
先從簡單的例子來說明,如果有一行二進位資料長得像這樣:01001,我們利用奇偶數來找特徵,0 是偶數而 1 是奇數,剛剛的資料有兩個 1,所以是偶數。如果資料被改變成:01101,總共有 3 個 1,所以是奇數,原來的資料是偶數,現在變成奇數,這就證明資料有錯誤!
這個簡單的例子有兩個問題:
如果同時改變兩個數字就不會被發現。
雖然知道有錯誤,但不知道是哪一個出錯。
要解決這些問題就需要更複雜的「抓取特徵」的方法,如果資料超過一行的話,就可以利用不同方向的「同位元檢測」來尋找出錯的位置。
回到我們的魔術表演,黑板上的卡片,白色當成 0,0 是偶數,因此不管有幾個 0 都是偶數,所以白色可以忽略不去檢查。黑色是 1,1 是奇數,會隨著數量變化,例如:2 個就變偶數,3 個就又是奇數,我們必須特別留意黑色的個數。
當同學排完 5x5 的卡片時,老師開始檢查每一行的黑色數量,如果是奇數,就在最右側補上黑色卡片,讓它變成偶數。如果是偶數的話,就補上白色,維持偶數。接下來在每一列的下方也做一樣的檢查和補充。這樣就可以確定整個 6x6 的範圍內,無論是哪一行哪一列都會是偶數。
當同學改動其中一張卡片時,就會有一行變成奇數,也會有一列變成奇數,行列交叉的位置就是被改變的卡片。
如果一次改動兩張卡片,也能夠發現嗎?
如果被改動的卡片剛好不同行也不同列,那麼可以找到 4 張可疑的牌,因為不同行也不同列的兩張牌才會是答案,共有兩種可能,有 1/2 的機會找出正確答案。
如果被改動的卡片同行,只能找出被改動的兩列,如果是同列,則只能找出被改動的兩行。如果是 6x6 的表格,那麼只有 1/6 的機會猜到答案。
如果不是排成正方形,也能用這個方法找到被改變的卡片嗎?
是的,任何形狀只要行數和列數都超過 2 以上都可以使用這個方法。
延伸活動:
在補上最後一列和最後一行是,如果故意補成奇數,也能夠用來尋找被改變的卡片嗎?
你能夠翻動 3 張卡片,而且讓對方無法察覺有錯誤發生嗎?