1
全國高級中等學校 105 學年度工業類科學生技藝競賽電腦軟體設計
壹、試卷說明: 1.請將寫好之程式原始檔依題號命名資料夾存檔,第一題取姓名_Q1,第二題取姓名_Q2,依序命名存檔,並存 於 C 碟之資料夾”姓名_Contest”中。 2.競賽時間 4 小時。 3 將程式及編譯成執行檔儲存在 C 碟之資料夾姓名_Contest。 貳、評分說明:本試卷共六題,每題配分不一。 1. 每題評分只有對與錯兩種,對則給滿分,錯則不給分(即以零分計算) 。 2. 每解答完一題上傳(程式及執行檔),評審人員將針對該題進行測試,若解題正確則回應正確,若解題 錯誤則扣該題一分至該題零分為止,答錯之題目可繼續作答。試題 1:數字系統轉換(17 分)
說明:數字系統裡 bi 是基底 ai是數字,如anbn + an − 1bn − 1 + an − 2bn − 2 + ... + a0b0,基底可為負整數或正整 數。請設計一程式能將一個十進位整數 n,0<n<32768 轉換成基底介於-2~-20 及 2~20 任一基底的數。基底 二十之數字由 0,1,2,3,4,5,6,7,8,9 與 10→A, 11→B, 12→C, 13→D, 14→E, 15→F, 16→G, 17→H,18 →I ,19→J 所組成,其它小於 20 之基底依此類推。例 1:(2748)10 = (6H8)20 例 2:轉換為十六進位(2748)10 = (ABC)16例 3:轉換為負 2 進位(25)10=(1101001)-2 數字轉換及人機界面如下圖所示: 功能要求: 1. 人機界面的字型大小≧12。 2. 能正確將任一個十進位數轉換成正基底為介於 2~20 的數並能清除。 3. 能正確將任一個十進位數轉換成負基底為介於 -2~-20 的數並能清除。試題 2:圖中人物身高體寬量測程式(17 分)
影像處理常需用某些擁有固定長度或直徑的物件(如椅子、籃球、欄杆…)來量測另一物件的長度或寬度。 說明:掃描圖片,每個圖點(pixel)色彩值如下公式計算2
圖點色彩值 colorValue = R*0.3+G*0.59+B*0.11。
若 colorValue >= 200 則該圖點視為白點。也就是說, 若圖點色彩值 colorValue 在 201~255 間表該圖點是白點(該圖點視為不是圖像之一點)。 若圖點色彩值 colorValue 在 0~200 間表該圖點視為是圖像之一點。 作法:掃描圖片先計算左邊椅子的高度(830mm),再計算右邊圖案的高度,依比例算出是幾 mm。 同樣做法計算出右邊圖案的寬度是幾 mm。 請寫一支程式如下左圖,按 “載入圖檔” 鈕能瀏覽磁碟機檔案,再選擇並讀入圖檔,如下右圖。 請選擇 “站立男 2.jpg” 圖檔,如下左圖 按“右邊圖案身高” 鈕能計算出身高約 1718mm,按“右邊圖案體寬” 鈕能計算體寬約 585mm,如上圖。 再按 “載入圖檔” 鈕能重新瀏覽磁碟機檔案、選擇讀入另一圖檔,如 一個牆面 166cm.jpg, 再按 “右邊圖案身高” 鈕及按 “右邊圖案體寬” 鈕能計算高度及寬度分別約為 1660mm 及約 606mm, 如下圖。3 評分時會用其他圖檔測試,計算出來的 mm 值誤差在 3%內,均可視為程式功能正確。 (注意:功能全部完成才能上傳)
試題 3:可繪出任意角度三角形相關操作的計算程式
(16 分) 說明:一、本題旨在測驗演算法,不用繪圖模式的繪圖函式,請完成任意角度三角形的相關操作。 二、在有效範圍內,輸入任意二個點座標(x1,y1),(x2,y2),例如:(5, 5),(15, 15),經過演算法計算, 以「*」符號連接成線,例如:「********」,繪出一條直線,如圖一。 三、在有效範圍內,輸入任意三個點座標(x1,y1),(x2,y2),(x3,y3),例如:(5, 5),(15, 15),(15, 5), 將此三點座標當做三角形的頂點,繪出三角形,如圖二。 四、在三角形的原範圍,完成水平翻轉,如圖三 圖一 繪出一條直線 圖二 繪出三角形 圖三 圖二的水平翻轉 斜率公式: 輸入及輸出格式: 輸入格式:5 5 15 15 輸出結果: 輸入格式:5 5 15 15 15 5 輸出結果: 操作畫面: a. 主選單 b. 選項操作:輸入二點座標資料4 顯示結果: c. 選項操作:輸入三點座標資料 顯示結果: d. 選項操作:選取「水平翻轉」 顯示結果: 試題 4:「大數據」之資料處理(17 分) 說明:所謂「大數據」,根據維基百科,指的是要處理的資料量規模,非常巨大,大到無法透過人工或電腦, 在合理的時間內,達到擷取,管理,處理,並整理成為人類所能解讀的資訊。從上述可知,資料處理是大 數據第一步驟,要從巨大的資料中,處理成為人類可以理解的資訊。請你寫一個程式,此程式能讓使用者 挑選要被處理的資料文字檔,經過您的程式處理後,可以顯示出人類可以理解的資訊。 程式功能要求範例 1:左邊是未處理的原始資料(input1.txt),右邊是你的程式處理過後,所得到人類可以理 解的資訊結果。
5 程式功能要求範例 2:左邊是未處理的原始資料(input2.txt),右邊是你的程式處理過後,所得到人類可以理 解的資訊結果。 程式功能要求範例 3:左邊是未處理的原始資料(input3.txt),右邊是你的程式處理過後,所得到人類可以理 解的資訊結果。 程式功能要求範例 4:左邊是未處理的原始資料(input4.txt),右邊是你的程式處理過後,所得到人類可以理 解的資訊結果。 請你仔細觀察上面四個程式功能要求範例,更要觀察左邊未處理的原始資料(input1.txt,input2.txt,input3.txt, input4.txt),以及右邊人類可以理解的資訊,寫一程式,可以讓使用者挑選要被處理的資料文字檔(input1.txt, input2.txt,input3.txt,input4.txt),經過您的程式處理後,可以顯示出人類可以理解的資訊(上述範例右邊)。 程式功能: 請利用上述範例和說明,寫一個程式,能夠完成以下功能和要求:
6 (1) 能讓使用者挑選要被處理的資料文字檔(input1.txt,input2.txt,input3.txt,input4.txt)。 (2) 你的程式可以完成範例 1 之程式功能要求。 (3) 你的程式可以完成範例 2 之程式功能要求。 (4) 你的程式可以完成範例 3 之程式功能要求。 (5) 你的程式可以完成範例 4 之程式功能要求。 若妳(你)的程式都完成上述功能和要求,才可以要求檢查功能。
試題 5:簡易霍夫曼編碼(Huffman encoding)資料壓縮系統(17 分)
說明:(一) 有一筆資料經統計含有四個文 字及每個文字重複出現的次數,如右圖所 示;要區分四個文字 i、n、h 及 u 則僅需 二進制 2 位元(bits)的編碼(如 00、01、10 及 11)。因此,以「傳統編碼」方法來儲存這一筆資料總位元數需 2bits (20+550+950+80) = 3200 bits。 (二)如採用「霍夫曼編碼」則可減少這一筆資料儲存總位元數,即 資料可被壓縮;其方法如右圖所示分兩步驟,1.擴展:每次找出未 被取出過的兩個出現次數最小者而組合成新次數,但被取出者不可 重複被取出,重複此擴展而直到最後一個。例如:第一次擴展找到 兩個出現次數最小者 20 與 80 而組合成新次數 100;第二次擴展找 到另兩個最小者 100 與 550 而組合成新次數 650;第三次擴展再找 到另兩個最小者 650 與 950 而組合成新次數 1600;直到最後只剩一 個而終止擴展。2.編碼:從擴展樹的根節點計算到葉節點有幾條分 支,即有幾個編碼位元數,如葉節點 i、u、n 及 h 分別 3、3、2 及 1 位元。因此,採用「霍夫曼編碼」儲存 這一筆資料總位元數需 3bits20+3bits80+2bits550+1bit950 = 2350 bits,較 3200 bits 明顯減少,故壓縮比 = 壓縮前 3200 bits / 壓縮後 2350 bits = 1.3617(取小數點四位)。 假設以陣列 0~3 儲存統計資料如下圖所示來執行「霍夫曼編碼」,1.擴展:第一次擴展找到兩個出現次數最 小者 20(陣列 0)與 80(陣列 3)而組合成新次數 100,陣列 4 記錄兩個最小陣列 0 與 3 以備編碼用及記錄擴展 文字*;第二次擴展找到另兩個次數最小者 100(陣列 4)與 550(陣列 1)而組合成新次數 650,陣列 5 記錄兩個 最小陣列 4 與 1 及*;第三次擴展再找到另兩個次數最小者 650(陣列 5)與 950(陣列 2)而組合成新次數 1600, 陣列 6 記錄兩個最小陣列 5 與 2 及*;直到最後一個而終止擴展。2.編碼:針對具有擴展文字*從陣列最大者 返回對應擴展陣列以決定編碼位元數。首先將擴展陣列 6 之編碼位元設為 0,對應兩個最小陣列 5 與 2 增值 為 1,即各編碼位元各設為 1;再從擴展陣列 5,對應兩個最小陣列 4 與 1 再增值為 2,即各編碼位元各設 為 2;再從擴展陣列 4,對應兩個最小陣列 0 與 3 再增值為 3,即各編碼位元各設為 3。因此總位元數需 3bits20+2bits550+1bit950+3bits80= 2350 bits,壓縮比即為 1.3617。文字 i 出現次數 20 n 550 h 950 u 80 陣列 0 1 2 3 文字 * 出現次數 100 * 650 * 1600 陣列 4 5 6 最小陣列 2 3 1 2 最小陣列 1 0 4 5 文字 i 出現次數 20 n 550 h 950 u 80 陣列 0 1 2 3 編碼位元 3 2 1 3 文字 * 出現次數 100 * 650 * 1600 陣列 4 5 6 最小陣列 2 3 編碼位元 2 1 1 2 0 最小陣列 1 0 4 5 編碼 擴展 (三)請參考以上例題所述之方法,設計如下圖所示之「簡易霍夫曼編碼資料壓縮系統」,每當滑鼠點一下
Random Set 鍵,該系統在「文字」右方四個方格內隨機產生四個不同小寫字母(a~z)及其「出現次數」為 文字 i 出現次數 20 n 550 h 950 u 80 文字 i 出現次數 20 n 550 h 950 u 80 編碼位元 2 2 2 2 3 bits 550 * 950 100 3 bits 650 80 20 1600 * 2 bits * 1 bit i u n h 擴展與編碼 根節點 葉節點
7 1~999 之間的不同數值,同時將「傳統編碼」、「霍夫曼編碼」及「壓縮比」等右方欄位的數值清除;另, 可以人工修改「出現次數」之 1~999 的不同數值。每當滑鼠點一下 Encoding 鍵,則針對這筆資料而在「傳 統編碼」、「霍夫曼編碼」及「壓縮比」等右方分別顯示其儲存總位元數及壓縮比率(取小數點四位)。上述可 重複操作,直至以滑鼠點一下 Exit 鍵,則離開此系統。 Encoding 簡易霍夫曼編碼資料壓縮系統 Encoding System Exit 文字 Random Set 出現次數 壓縮比 1.3617 i 20 3200 2350 bits bits 傳統編碼 霍夫曼編碼 n 550 h 950 u 80 範例 輸入格式:每當滑鼠點一下 Random Set 鍵,該系統在「文字」右方四個方格內隨機產生四個不同小寫 字母 k、o、r、u,及其「出現次數」分別為 654、513、273、131,同時將「傳統編碼」、「霍 夫曼編碼」及「壓縮比」等右方欄位的數值清除。 輸出格式:每當滑鼠點一下 Encoding 鍵,則針對這筆資料而在「傳統編碼」、「霍夫曼編碼」及「壓縮 比」等右方分別顯示其儲存總位元數 3142 bits、2892 bits 及 1.0864 。 Encoding 簡易霍夫曼編碼資料壓縮系統 Encoding System Exit 文字 Random Set 出現次數 壓縮比 1.0864 k 654 3142 2892 bits bits 傳統編碼 霍夫曼編碼 o 513 r 273 u 131
試題 6:
Blake Neubert 的數位畫框(17 分)說明: Blake Neubert 是一位美國著名的畫家,他的油畫作有一種特殊的創作,稱為刮刮畫(Scrape away painting),也就是刮掉表面的油彩後,會呈現另一幅畫作。今天我們將一張有 R, G, B 三個 channel 的 bmp 圖檔嵌入一張隱藏的圖片,做法是透過每一個 channel 的像素值的最低位元(LSB)值,來決定隱藏圖檔的像 素值,如果最低位元值是 1,則隱藏圖檔的像素值為 16,否則為 235。
1 假設某一個位置的 B, G, R 的像素值如下
B channel G channel R channel 則隱藏圖的該像素的(B, G, R)值為(235, 16, 16) 。
2 介面格式不拘,只要可以開啟並顯示圖檔,按下按鈕後,輸出隱藏圖片即可。參考介面如下,可以透過 拖拉圖片的方式開啟圖檔,並於下方顯示按鈕,按鈕初始文字 “What song is he singing?”,按鈕狀態是 不能按下(停用, disabled)。
2.1 初始畫面如下左圖
8
2.2 拖拉圖檔後,可以顯示原圖,下方的按鈕文字改成 “Reveal The Image Behind” ,狀態改為可按下 如下右圖。
2.3 按下 Reveal The Image Behind 按鈕,可以顯示隱藏版的圖片
3 評分標準
3.1 可以開啟並顯示測試圖檔正確,且按鈕顯示文字與狀態正確