105工科技藝競賽電腦軟體設計術科試題

14  Download (0)

全文

(1)

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)

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)

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)

4 顯示結果: c. 選項操作:輸入三點座標資料 顯示結果: d. 選項操作:選取「水平翻轉」 顯示結果: 試題 4:「大數據」之資料處理(17 分) 說明:所謂「大數據」,根據維基百科,指的是要處理的資料量規模,非常巨大,大到無法透過人工或電腦, 在合理的時間內,達到擷取,管理,處理,並整理成為人類所能解讀的資訊。從上述可知,資料處理是大 數據第一步驟,要從巨大的資料中,處理成為人類可以理解的資訊。請你寫一個程式,此程式能讓使用者 挑選要被處理的資料文字檔,經過您的程式處理後,可以顯示出人類可以理解的資訊。 程式功能要求範例 1:左邊是未處理的原始資料(input1.txt),右邊是你的程式處理過後,所得到人類可以理 解的資訊結果。

(5)

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)

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 位元。因此,採用「霍夫曼編碼」儲存 這一筆資料總位元數需 3bits20+3bits80+2bits550+1bit950 = 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。因此總位元數需 3bits20+2bits550+1bit950+3bits80= 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)

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)

8

2.2 拖拉圖檔後,可以顯示原圖,下方的按鈕文字改成 “Reveal The Image Behind” ,狀態改為可按下 如下右圖。

2.3 按下 Reveal The Image Behind 按鈕,可以顯示隱藏版的圖片

3 評分標準

3.1 可以開啟並顯示測試圖檔正確,且按鈕顯示文字與狀態正確

數據

Updating...

參考文獻

相關主題 :