• 沒有找到結果。

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

N/A
N/A
Protected

Academic year: 2021

Share "103工科技藝競賽電腦軟體設計術科試題"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)

全國高級中等學校 103 學年度工業類科學生技藝競賽電腦軟體設計

壹、試卷說明: 1.請將寫好之程式原始檔依題號命名資料夾存檔,第一題取姓名_Q1,第二題取姓名_Q2,依序命名存檔,並存於 C 碟之資料夾”姓名_Contest”中。 2.競賽時間 4 小時。 3 將程式及編譯成執行檔儲存在 C 碟之資料夾姓名_Contest。 貳、評分說明:本試卷共六題,每題配分不一。 1. 每題評分只有對與錯兩種,對則給滿分,錯則不給分(即以零分計算) 。 2. 每解答完一題上傳(程式及執行檔),評審人員將針對該題進行測試,若解題正確則回應正確,若解題錯 誤則扣該題一分至該題零分為止,答錯之題目可繼續作答。 試題一:台北市上班搭捷運、坐公車、和自己開車遲到的機率(17 分) 說明:假設在台北市上班的方式只有搭捷運、坐公車、和自己開車三種。假設搭捷運上班的機率為 x (0 ≤x≤ 1); 坐公車上班的機率為 y (0 ≤y≤ 1);自己開車上班的機率為 z (0 ≤z≤ 1),x + y + z = 1。搭捷運遲到的機率為 a(0 ≤a≤ 1);坐公車遲到的機率為 b(0 ≤b≤ 1);開車遲到的機率為 c(0 ≤c≤ 1)。 請你設計一個程式,可用條件機率和貝氏定理來計算以下兩個問題的解。 (1) 在台北市的上班族遲到的機率是多少? (2) 如果已知有一個人上班遲到,那他是自己開車的機率為何? 說明 1:假設 E1和 E2事件發生的機率分別是 P(E1)和 P(E2)。在事件 E2發生的情況之下事件 E1發生的條件機 率P(E1|E2)定義為      其他 , 0 0 ) ( , ) ( ) ( ) | ( 2 2 2 1 2 1 E P E P E E P E E P  。 <舉例>:在圖 1 中 P(E2) = 0.4,P(E1E2) = 0.1,則條件機率P(E1|E2)=0.1 / 0.4 = 0.25。 圖 1 圖 2 說明 2:已知 n 個事件 E1,E2,∙∙∙∙En彼此之間沒有交集,而且 ( ) 1 1 

n i i E P 。如果已知條件機率 n i i E A P( | )} 1 { 那麼事件 A 發生的機率可以表示為 ( ) ( ) ( | ) 1 i n i i P A E E P A P

  。接著使用貝氏定理便可以反推得到“在事件 A 發 生的前提之下 Ei發生的條件機率P(Ei |A)”:

   n j j j i i i i E A P E P E A P E P A P A E P A E P 1 ( ) ( | ) ) | ( ) ( ) ( ) ( ) | ( 

<舉例>:在圖 2 中 P(E1) +P(E2) +P(E3) +P(E4) = 1;其中 P(E1) = 0.1,P(E2) = 0.2,P(E3) = 0.3,P(E4) = 0.4;已

(2)

+ 0.4*0.8 + = 0.7。由貝氏定理可以得到條件機率P(E1|A) = (0.1*0.5)/ 0.7;P(E2 |A) = (0.2*0.6)/ 0.7;P(E3|A) = (0.3*0.7)/ 0.7;P(E4 |A) = (0.4*0.8)/ 0.7。 參考範例:當輸入 x、y、z、a、b、c 之數值均介於[0, 1]之間時可以正確的解出以上兩個問題之解: 圖 3(在台北市的上班族遲到的機率為 0.041) 圖 4(如果已知有一個人上班遲到,那他是自己開車的機率為 0.3658536585) 當輸入 x、y、z、a、b、c 任一個之數值未能介於[0, 1]之間時在答案區顯示”無解”

(3)

試題二:分堆問題(16 分) 說明:分堆問題是把聚在一起的資料,當作一堆,如下圖所示,為 20 個人之身高和體重之分佈,其中,水平 軸是體重,垂直軸是身高,由此圖,我們可以知道有三堆,每一堆的身高和體重都差不多,但是電腦要如何 知道有三堆呢? 有一個分堆演算法如下: 1. 輸入 N 個人(xi)之身高 Hi和體重 Wi資料, 1 i N。 2. 因為每個人之身高 Hi和體重 Wi,其單位不一樣,所以,以下列式子,來得到正規化之身高 NHi體重 NWiH H i i

H

NH

(1) W W i i

W

NW

(2) 其中,H, W, H, W, 分別定義如下: N H N i i H

  1

(3) N W N i i W

  1

(4) N H N i H i H

   1 2 ) (

(5) N W N i W i W

   1 2 ) (

(6) 3. 初始分三堆 Sj, 0 j 2: 第一個人之身高和體重初始在第一堆 S0,第二個人之身高和體重初始在第二 堆 S1,第三個人之身高和體重初始在第三堆 S2,剩下的人,用亂數來初始分入這三堆中。

(4)

4. 執行以下步驟 200 次,若是分堆穩定,即每一堆都沒有異動了,表示分堆完成,就提早結束。 5. 在第 t 次中,計算第 j 堆 Sj(t)中,所有人之平均身高 uj(t)(H)和平均體重 uj(t)(W),其公式分別如下:

  ) ( ) ( 1 ) ( () ) ( t j i S x i i t j t j x H S H u (7)

  ) ( ) ( 1 ) ( () ) ( t j i S x i i t j t j x W S W u (8) 6. 其中,xi(Hi)和 xi(Wi)分別為第 xi位人之身高 Hi和體重 Wi,xiSj(t)是第 xi位人屬於在第 t 次中,第 j 堆 Sj(t)之人。 例如,假設有 d0, d1, d2 三個人聚成一堆,其體重和身高分別為 d0 = {64, 110}, d1 = {65, 160}, d2 = {72, 180}. 則這一堆之平均體重和平均身高為{(64+65+72)/3, (110+160+180)/3} = {67.0, 150.0}. 7. 依照這新的每堆之平均身高 uj(t)(H)和平均體重 uj(t)(W),重新更動每一堆的人選,其做法是將第 xi 位人之身高和體重與第 j 堆之平均身高 uj(t)(H)和平均體重 uj(t)(W)計算距離 dj(xi),其公式如下:

) ( 2 ) (

)

(

t j i S x t j i i j

x

x

d

(9) j*

(

i

)

arg

0

min

j 2 j

(

i

)

x

d

x

d

 

(10) 其中,arg min 表示從 j 堆距離中,找出第 xi人距離哪一堆最近,j*表示,第 xi人要重新分配到第 j 堆 Sj(t)中。例如,假設有一 d0 人之身高和體重為{140, 68},假設有三堆 c0, c1, c2 其平均身高和平均體 重分別為 c0 = {120.0, 66.0}, c1 = {160.0, 69.0}, 和 c2 = {130.0, 70.0},在此我們用未正規化資料來說明, d0 和 c0 之距離為 sqrt((68 - 66.0)^2 + (140 - 120.0)^2) = 20.10,而 d0 和 c1 之距離為 sqrt((68 - 69.0)^2 + (140 - 160.0)^2) = 20.22,d0 和 c2 之距離為 sqrt((68 - 70.0)^2 + (140 - 130.0)^2) = 10.20. 所以,d0 最靠近 c2, 也就是 d0 要重新分配到第 2 堆中,sqrt 表示開根號。 程式功能:請利用上述演算法,寫一個程式,能完成以下功能要求: (1) 能讓使用者挑選文字檔,此文字檔之範例 Sample.txt 如下:

(5)

其中,第一列之 20,表示有 20 個人,第一列之 2 表示每個人有體重和身高 2 個資料,第二列起是這 20 個人之體重和身高。 (2) 能讓正確分類。程式執行範例: 從上圖左邊開始,按 1 載入資料,可以讓使用者選擇輸入之文字檔,此例是選擇 Sample.txt,按 2 執行分堆, 會依照您所寫之程式,進行依照體重與身高來進行分堆動作,分堆結果,顯示分堆之結果,第 0 筆分到第 1 堆,在第 1 堆中確實有顯示此筆之體重與身高資料,第 1 筆分到第 0 堆,在第 0 堆中確實有顯示此筆之體重 與身高資料,第 2 筆分到第 2 堆,在第 2 堆中確實有顯示此筆之體重與身高資料,其他筆,依此列推,最後 分堆結果,顯示在上圖右邊。 若妳(你)的程式都完成上述功能和要求,才可以要求檢查功能。 試題三:

隨機八位元2的補數之整數相加與驗證系統

(17分) 說明:1.設計一個程式系統能隨機產生兩組八位元 2 的補數(two's complement, 簡寫 2's) 二進制整數值,並作 二進制相加運算及十進制驗證。如下圖系統所示,每當滑鼠點一下 Random 鍵,則隨機產生兩組八位元 2's 二 進制值 00000000~11111111 範圍之間整數值 A 與 B,並各顯示其右方,且清除其他空格。每當滑鼠點一下 Add 鍵,則執行二進制加法 Sum = A+B,其和之八位元 2's 二進制值顯示於右方;同時判斷如果 Sum 的和為不合理 值者,則附加顯示「underflow」或「overflow」於最下方。每當滑鼠點一下 Verify 鍵,則自動將 2's 二進制值 A、B、Sum 分別轉換為等效十進制值,並各顯示對應的右方,如和為超出範圍之不合理值,再附加顯示「不 足位」或「溢位」於右行之最下方空格。上述可重複操作,直至滑鼠點一下 Exit 鍵,則自動離開此系統。 Add A: 隨機八位元 2 的補數之整數相加與驗證系統 Exit 二進制加法 Random B: Sum: 十進制驗證 Verify 2.以八位元表示一個 2's 二進制整數值,最左方的位元為符號位元,0 代表正值而 1 代表負值,能表示的 2's 二 進制及等效十進制整數值的合理範圍為 1000000(2's) = -128 至 01111111(2's) = +127。例如: (a) 2's 二進制值 01001010(2's)轉換為十進制正整數值,即為 01001010(2's) = +74。 轉換方法:最左方符號位元為 0 表示正整數,剩下 7 位元再由左至右選擇原對應權重 64、32、 16、 8、4、2、1,即 64+8+2= 74。 (b) 2's 二進制值 11001010(2's) 轉換為十進制負整數值,即為 11001010(2's) = -54。

(6)

轉換方法:最左方符號位元為 1 表示負整數,剩下 7 位元再由左至右選擇原對應權重 64、32、 16、 8、4、2、1,即 64+8+2= 74,再將 74 - 128 = -54。 3.當兩組八位元 2's 二進制值作相加運算時,如有進位而超過八位元者,超過的位元則可忽略;如被加數 A 與 加數 B 均為負值,而和 Sum 為正值,應為不合理值,即「underflow」或「不足位」;如被加數 A 與加數 B 均為正值,而和 Sum 為負值,應為不合理值,即「overflow」或「溢位」。 範例 1:滑鼠點一下 Random 鍵,隨機產生兩組八位元 2's 二進制 01001010 與 11001010,顯示在 A 與 B 的右 方,且清除其他空格。滑鼠再點一下 Add 鍵,二進制加法 Sum = A+B 的和顯示 Sum 的右方,此和為合理值, 如左下圖。滑鼠再點一下 Verify 鍵,則八位元 2's 二進制 A、B、Sum 之等效十進制值各顯示其對應右方,如 右下圖。 Add A: 隨機八位元 2 的補數之整數相加與驗證系統 Exit 二進制加法 01001010 Random B: 11001010 Sum: 00010100 十進制驗證 Verify Add A: 隨機八位元 2 的補數之整數相加與驗證系統 Exit 二進制加法 01001010 Random B: 11001010 Sum: 00010100 十進制驗證 74 -54 20 Verify

範例 2:左下圖為滑鼠依序點一下 Random 鍵與 Add 鍵之結果,A 與 B 均為負值,而和 Sum 為正值,則為不 合理值,即「underflow」。右下圖為滑鼠再點一下 Verify 鍵之驗證結果,等效十進制值 -86 + (-54) = -140 已 超出最小值-128 範圍,而和 Sum 結果卻為正值 +116,顯然為不合理值,即「不足位」。 Add A: 隨機八位元 2 的補數之整數相加與驗證系統 Exit 二進制加法 10101010 Random B: 11001010 Sum: 01110100 underflow 十進制驗證 Verify Add A: 隨機八位元 2 的補數之整數相加與驗證系統 Exit 二進制加法 10101010 Random B: 11001010 Sum: 01110100 underflow 十進制驗證 -86 -54 116 不足位 Verify 試題四:某校運動會報名管理程式(16 分) 說明:一、某校舉辦運動會競賽,採中小規模辦理,比賽的項目包含團體賽及個人賽,團體賽有大隊接力及 四項趣味競賽。四項趣味競賽為一顆球的距離、天旋地轉、滾大球袋鼠跳及牽手同心等。個人賽有 100 公尺、400 公尺接力、800 公尺及跳高等四項。同時,考量賽程的安排及參賽學生體能不若運 動員,因此,實施若干報名參賽的限制,規則如下: (一)分男生組及女生組。 (二)參加大隊接力不受男女生之限制,惟每多一位男生總成績增加 2 秒。 (三)參加大隊接力項目不受團體賽或個人賽之限制。 (四)選手可報名參加至多 2 項團體賽,已報名團體賽不可再報名個人賽。 (五)選手可報名參加至多 2 項個人賽,已報名個人賽不可再報名團體賽。 二、主辦單位受理選手報名並安排賽程前,為了處理報名的眾多資料,並須檢核選手是否遵守參賽報名 規則,因此,設計一程式處理這些報名資料並加以檢核。此外,選手在報名期限內反應漏報而需 補報,或更改報名項目等,該程式除接受補報,或更改項目外,同時線上檢測補報或更改的項目 是否仍符合報名參賽的限制。 三、此程式具有(1)批次輸入、(2)選手查詢、(3)刪除、(4)逐筆輸入及(5)顯示所有資料的功能。批次 輸入將檔案的選手資料一次整批輸入(或整批貼入元件);選手查詢須輸入班級、學號、姓名等內

(7)

容;刪除資料須輸入班級、學號、姓名及報名項目等內容;逐筆輸入資料須輸入班級、學號、姓 名、性別及報名項目等內容;顯示所有資料則顯示已完成報名的資料。 輸入格式: 班級 學號 姓名 性別 報名項目 機 1 年 1 班 s1030101 徐強 男 跳高 機 1 年 1 班 s1030101 徐強 男 400 公尺接力 機 1 年 1 班 s1030101 徐強 男 大隊接力 機 1 年 1 班 s1030102 李濠 男 滾大球袋鼠跳 機 1 年 1 班 s1030102 李濠 男 天旋地轉 機 1 年 1 班 s1030102 李濠 男 大隊接力 (檔案如附件) 輸入及輸出參考畫面:1. 主選單 2. 選項操作:選手查詢 3. 選項操作:逐筆輸入

(8)

4. 選項操作:刪除

5. 選項操作:逐筆輸入

試題五:Email組合程式(16分)

請幫某班老師的所有學生學號組成 Email 字串,方便日後連絡。將數個 8 碼的字串數字先算出個別的檢查碼為 第 9 碼組成學生學號(共 9 碼),再串“@antu.edu.tw”形成個人 Email,接著用一個分號及一個空白如“

;

”,將全

(9)

部個人 Email 串在一起,但最後一個 Email 後面不需再串“

;

”。 檢查碼是將 8 位的字串數字由左至右分別依序乘以 1~8 後再相加之總和取 10 的餘數,接著再依下表取出對應 的檢查碼。 如 8 位的字串數字為 44030015,總和為

4

*1+

4

*2+

0

*3+

3

*4+

0

*5+

0

*6+

1

*7+

5

*8=71,總和取 10 的餘數為 1,所 以檢查碼為 7,該學生學號及 Email 分別為 440300157,440300157@antu.edu.tw。 請撰寫一支能完成上述 Email 組合的程式,該程式可輸入 8 位數的連續範圍(如下左圖 A)及 數個 8 位字串數字(如下左圖 B)。注意:個別的 8 位字串數字可用逗號或空白分隔。 餘數 0 1 2 3 4 5 6 7 8 9 檢查碼 0 7 4 1 8 5 2 9 6 3

(10)

試題六:.模(Mod)指數計算 XP(mod N)(17 分)

說明: 若兩數 A 和 B 之差 A-B(或 B-A)能被 N 整除,或 A 與 B 被 N 除得相同餘數則稱 A 與 B 為模 N 同餘(數), 其式可表示為 A≡B(mod N),可唸成『A 和 B 對模 N 同餘』,此關係稱為同餘;而 N 稱此同餘之模。例如 26≡11(mod 5), 其意為 26 Mod5 和 11Mod 5 皆得餘數為 1; 同理 -7≡15(mod 11), 其意為 -7 Mod11 和 15Mod 11 皆得餘數為 4;

因 26-11=15 被 5 整除,-7-15=--22 被 11 整除。由定義知 A≡B(mod N)可表示成 A-B≡N‧Y,其中 Y≧0 整 數。若給定 A、B、N,卻沒有一個 Y 滿足同餘的條件,則 B 對模 N 而言是 A 的非同餘。若有相同餘數 A≡0(mod N)表示 A 可被 N 整除。例如 35≡0(mod 7)。同餘的應用不少,例如火車時程表校歷,求潤年,密碼等等。同餘 的運算法則有三個:

(a)若 A≡B(mod N)則對任一 Y 可得 A+Y=B+Y(mod N) (b)若 A≡B(mod N)則對任一 X 可得 AX=BX(mod N) (c)若 A≡B(mod N)則對任一 P 可得 AP=BP(mod N) 要計算 x 的 p 次方對 N 取餘數值,如果直接計算會數值會太大,請利用同餘的運算法則來計算: 例子 1:42551(mod 5)=? 已知 42=16 且 42≡1(mod 5),利用法則(c),兩邊皆乘 p=1274 次方,可得(42)1274=42548, 42548≡1(mod 5),再 利用法則(b),兩邊再乘 X=43=64,可得 42548X43 = 42551,42551≡64(mod 5),最終餘數為 4。 例子 2:可以利用上面的模的性質進行降冪計算。要計算 Xp(Mod N)的值如 6265Mod 133 可以利用法則(b)和 (c)採用如下的方法::

6265 Mod 133= 62 * 6264 Mod 133= 62 * (622)32 Mod 133= 62 * 384432 Mod 133

= 62 * (3844 Mod 133)32 Mod 133= 62 * 12032Mod 133= 62 * (1202Mod 133)16 Mod133

=62 * 3616 Mod 133= 62 *(362Mod 133)8Mod133=62 * 998 Mod 133

= 62 * (992Mod 133)4Mod 133=62 * 924 Mod 133= 62 * (922 Mod 133)2 Mod 133

=62 * 852 Mod 133= 62 *(852 Mod 133) Mod 133=62 * 43 Mod 133= 2666 Mod 133= 6 請利用上述演算法,寫一個程式,能輸入 2≦X≦100, 0≦p≦3000, 0 <N≦200 計算 XP

(mod N)餘數, 如圖 2 所示清除鍵能清除輸入,能再輸入 X, P, N: 按結束鍵程式結束

42551

參考文獻

相關文件

第二十四條 學、術科測 試辦理單位應遴聘具有 下列資格之一者,擔任 學科測試及術科測試採 筆試非測驗題方式之監 場人員:. 一、

【第6題】

」競賽,是結合生物科技與工程概念,以應用與設計為導向 的最新生物科學,為解決人類周遭生活問題。iGEM

➢ 第49屆全國賽試題方向與規範,將依據國際技能競賽 (WSC)汽車技術(Automobile Technology)之技術規範 (Technical Descriptions)

(一)初試:採筆試方式,題目類型為選擇題,每科目題數各 50 題(每題 2 分,各題未作 答不予計分,答錯倒扣 0.6 分) 。初試成績達參加複試標準(初試科目其中

一、成績計算:以術科實作及面試之原始分數計算,術科實作成績佔 70%,面試成績佔 30% (術 科實作原始分數*70%+面試原始分數*30%,分數四捨五入至小數點第 2

題目問什麼?請把它找出來。 【題目問每人 會分到幾枝鉛筆】..

第三十九條 術科測試應 檢人進入術科測試試場 時,應出示准考證、術 科測試通知單、身分證 明文件及自備工具接受 監評人員檢查,未規定