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

Download (0)

全文

(1)

1

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

壹、試卷說明: 1.請將寫好之程式原始檔依題號命名資料夾存檔,第一題取姓名_Q1,第二題取姓名_Q2,依序命名存檔, 並存於 C 碟之資料夾”姓名_Contest”中。 2.競賽時間 4 小時。 3 將程式及編譯成執行檔儲存在 C 碟之資料夾姓名_Contest。 貳、評分說明:本試卷共六題,每題配分不一。 1. 每題評分只有對與錯兩種,對則給滿分,錯則不給分(即以零分計算) 。 2. 每解答完一題上傳(程式及執行檔),評審人員將針對該題進行測試,若解題正確則回應正確,若解題 錯誤則扣該題一分至該題零分為止,答錯之題目可繼續作答。

試題 1:紅綠燈交通號誌控制(17 分)

說明:紅綠燈是以規定之時間上交互更換的光色訊號,通常設置於交岔十路口或其他需要交通管制的地 點,用以將道路通行權指定給車輛駕駛人與行人,管制其通行、停止及轉向的交通管制設施如圖 1-1。請 設計一程式,按下"ON 鍵",進入起始狀態(state 1)如表 1-1 和圖 1-2 所示(R 是紅燈 A 是黃燈 G 是綠 燈), 只有 R1 和 G2 亮燈的,按下"轉換鍵",狀態轉換至 state 2 只有 R1 和 A2 亮燈如圖 1-3,再按下" 轉換鍵",狀態轉換至 state 3,當狀態在 state 6,再按下"轉換鍵",狀態將回到至 state 1,如此繼續 循環。結束時,按下"OFF 鍵"如圖 1-4。

圖1-1

表1-1

(2)

2

圖 1-4

試題 2:交易趨勢預測的程式設計(17 分)

說明:一、有商業活動的自由交易,就會留下交易資料。當數筆交易價產生之後,後續的交易價如何發展? 走勢又如何?常常是引起人們興趣的話題,對於價格走勢的預測已有很多研究的發表。不論漲勢或跌 勢,人們想知道趨勢是否延續?或即將反轉?其中動向指數(Directional Movement Index,DMI)是 一種常用的方法。 二、要計算「動向指數」所需資料有:每日的最高價、收盤價及最低價。 1. 先求出趨向變動值(DM):趨向變動值為本日交易價變動幅度大於前一日交易價變動幅度的『最大 值』。可分為『PDM』及『MDM』。 (1)『PDM』= 本日最高價 – 前一日最高價, 其表示當日行情較前一日行情更向上創新高的幅度值,若此值為負數時,則必須將 PDM 值改為 0 值。 (2)『MDM』= 前一日最低價 – 本日最低價, 其表示當日行情較前一日行情更向下創新低的幅度值,若此值為負數時,則必須將 MDM 值改為 0 值。 (3)『PDM』與『MDM』比較,較小者改為 0;若兩者相等,均改為 0。 (4)『PDM』及『MDM』計算出來後,再分別求出其每日之往前 10 日(含該日)平均值,因這些值隨日 期變(移)動,故稱之為移動平均值。 2. 找出真實的波幅(真實的波動價位值,簡稱 TR):TR 為本日交易價與前一日交易價比較後的最大變 動值。該變動值需比較下列三種差價的『絕對值』後,取其中最大者為本日之 TR: (1)本日最高價 – 本日最低價;(2)本日最高價 – 前一日收盤價;(3)本日最低價 – 前一日收 盤價。 TR 求出後,再計算其 10 日之移動平均值。 3. 求出方向線(DI):為探測交易價上漲或下跌方向的指標,以『PDI』表示上升方向指標,為最近 10 日內實際上漲的動量百分比;以『MDI』表示下跌方向指標,為最近 10 日內實際下跌的動量百

(3)

3

分比。

PDI = 10 日的『PDM』平均值 / 10 日的 TR 平均值; MDI = 10 日的『MDM』平均值 / 10 日的 TR 平均值; 4. 求出平均方向的移動平均值(ADX):

方向平均值(DX) = 100 * ︱PDI - MDI︱ / ( PDI + MDI ), 其中『︱x︱』表示取 x 之絕對值。再計算其 10 日移動平均值 ADX。 三、預測交易趨勢的步驟: 1. 今日 ADX >= 前一日 ADX,表示趨勢延續,輸出 1; 2. 其餘,輸出 0。 3. 輸出內容包含 ADX 值及預測值(0 或 1) 註:1. 計算時注意初始值(例如:PDM、MDM 有效值從第 2 天開始;DX 有效值從第 11 天開始;ADX 有效值 從第 20 天開始。) 2. 從第 21 天開始輸出預測結果。 輸入格式:(35 天的資料,所附文字檔 data1.txt) 輸出格式:(從第 21 天開始輸出 15 天的預測結果) 操作範例 1: 輸入格式:(35 天的資料,所附文字檔 data2.txt) 輸出格式:(從第 21 天開始輸出 15 天的預測結果) 操作範例 2: 輸入格式:(35 天的資料,所附文字檔 data3.txt) 輸出格式:(從第 21 天開始輸出 15 天的預測結果)

題目 3:密碼規則檢查程式(17 分)

 題目說明:檢查輸入的密碼是否符合密碼規則。

(4)

4  設計說明:請撰寫一程式,要求輸入一密碼(字串),程式需檢查此密碼是否符合以下規則: a. 必須至少 8 個字元、最多 128 個字元。 b. 至少包含『大寫英文字母』、『小寫英文字母』、『數字』和『符號』四者之中的三者。 『符號』包含

!

@

#

$

%

^

&

*

(

)

-

+

_

=

等14 個字元。 c.程式將顯示:輸入的密碼、密碼長度、大寫英文字母長度、小寫英文字母長度、數字長度、符號長 度、及是否符合密碼規則等7 項,如下範例。  範例:程式執行後會要求輸入密碼

範例

1:

範例 2:

範例

3:

範例

4:

試題 4:小明的第一份程式設計工作(16 分)

說明:小明正在就讀某高工資訊科,他家樓下開了一家麵店,只賣三種麵: 蘭州拉麵、清燉牛肉麵、排骨 烏龍麵。麵店老闆想知道,這三種麵,哪一種麵客人最喜歡,所以,麵店老闆都讓各自點麵的客人給於評

(5)

5 分,麵店老闆希望小明幫他寫一支程式來分析客人評分,到底哪一種麵,客人最喜歡,這樣麵店老闆可以 多準備食材,也才不會浪費。 小明想了一下,只要分析這三種麵,各自客人打的分數,應該就可以知道,那一種麵客人最喜歡。但 是,要如何寫程式?小明上網查一下,發現要完成老闆的要求,要計算客人對三種麵評分的F統計值和自 由度df。計算F統計值的公式如下: F = MSb / MSw (1) 其中MSb代表不同麵類之間的均方和,MSw代表同麵類之間的均方和。其公式分別如下: MSb = SSb / dfb (2) MSw = SSw / dfw (3) 其中SSb 是每個麵類平均和整體平均值之間差異平方的加權總和,SSw是每個麵類平均與每個麵類中每個 評分之間差異平方的總和,dfb是不同麵類的自由度,dfw是同一麵類的自由度,其公式分別如下: 𝑆𝑆 = ∑ 𝑛 (𝑢𝑡 − 𝑈𝑇) (4) 其中ni為第i麵類中客人評分的數量,uti為第i麵類中客人評分的平均,UT為所有客人評分的平均,其 公式分別如下: 𝑢𝑡 = ∑ 𝑑 /𝑛 (5) 𝑈𝑇 = ∑ ∑ 𝑑 /𝑁 (6) 其中,K是麵的種類,dij為第i麵類中第j位客人的評分,N為所有客人評分的總數量,即𝑁 = ∑ 𝑛 。 而 𝑆𝑆 = ∑ ∑ 𝑑 − 𝑢𝑡 (7) 自由度df的公式如下: df = (dfb, dfw) = (K-1, N-K) (8) 上述可以決定不同麵與麵之間,是否有顯著的差異,當F統計值越大,代表不同麵與麵之間,客人評 分的差異越大或是在同一種麵內,客人評分的差異越小。 範例: 假設收集3 種麵客人評分如下: 麵 客人評分 1 2 3 4 5 6 7 8 9 10 蘭州拉麵 3 4 6 5 清燉牛肉麵 8 12 9 11 10 8 排骨烏龍麵 13 9 11 8 12 蘭州拉麵有4 位客人評分,清燉牛肉麵有 6 位客人評分,排骨烏龍麵有 5 位客人評分。依照上述公式,可 以求得F 統計值為 15.884 以及自由度 df 為(2, 12)。請你寫一些程式,來幫助小明求得F 統計值以及自由 度df。 程式功能: 請利用上述說明,自己寫一些程式(不可以直接使用函數或套件),能完成以下功能要求: (1) 能讓使用者選擇客人評分資料檔並顯示出來。 (2) 能讓使用者按<求 F 統計和自由度 df>執行您自己寫的程式,顯示正確的 F 和自由度 df 之值。

(6)

6 (3) 麵類限定 3 種,如上述說明和範例。客人評分數量沒有限制。 程式執行範例: (1)使用者選擇<客人評分資料檔>並顯示出來。此檔案有 3 種麵的評分,如範例所示。 (2)使用者按<求 F 統計和自由度 df>執行您自己寫的程式,顯示正確的 F 和自由度 df 之值。 若妳(你)自己寫的程式都完成上述功能和要求,才可以要求檢查功能。

試題

5:求陣列的子陣列之和的最大值(16 分)

一個含N 個整數元素的一維陣列(A[0], A[1], A[2], …., A[N-1]),可以包含很多個連續的子陣列,這些子陣

列可以是1, 2, 3,…或 N 個元素,那麼子陣列之和的最大值是什麼呢?這個子陣列的起始位置與結束位置為 何?例如,有一個含有7 個元素的陣列{-2, 5, 3, -6, 4, -8, 6},其中一個元素的子陣列包括{-2}, {5},…,{6}; 二個元素的子陣列包括{2, 5}, {5, 3}, …,{4, 8}, {8, 6}; 三個元素的子陣列包括{2, 5, 3},{5, 3, 6}…,{6, 4, -8},{4, -8, 6};四個元素的子陣列包括{-2, 5, 3, -6},{5, 3, -6, 4},…{3, -6, 4, -8}, {-6, 4, -8, 6};五個元素的子陣列包 括{-2, 5, 3, -6, 4}, {5, 3, -6, 4, -8}, {3, -6, 4, -8, 6}; 六個元素的子陣列包括{-2, 5, 3, -6, 4, -8},{5, 3, -6, 4, -8, 6}; 七個元素的子陣列為{-2, 5, 3, -6, 4, -8, 6};其中 A[1] = 5, A[2] = 3 這兩元素的和為 8 是所有連續子陣列和的 最大值。再舉一個例子,假設有一個陣列{-3, 2, 1, 4, -2},則它的連續子陣列{2, 1, 4}的和為 7 是所有連續子 陣列和的最大值。 注意事項:  本題中的子陣列為連續的元素。  陣列的開始位置從 0 開始。  陣列的元素是整數,可能包含正整數、0、負整數。

(7)

7 1. 輸入說明: 輸入含有多組測試資料。每組測試包含兩列,第一列為為該組測資的陣列大小N(0<N<100),第二列為 該組測資中每一個元素的值,數值之間以空白隔開,數值可以為正整數、0、或負整數。請參考範例輸 入。 2. 輸出說明 輸出兩列,第一列為子陣列之和的最大值,第二列為兩個整數,分別為子陣列的開始位置與結束位 置,以空白區隔。 範例輸入 7 -2 5 3 -6 4 -8 6 6 1 -2 3 5 -3 2 6 0 -2 3 5 -1 2 範例輸出 8 1 2 8 2 3 9 2 5 評分標準 A. 介面不拘,可以輸入測資並輸出結果即可。 B. 參考測資有三組,隱藏測資有多組,所有測資皆正確,才有分數。

題目

6:

簡易霍夫曼解碼(Huffman decoding)資料解壓縮系統(17 分)

說明: (一)有一筆文字資料從傳送端給遠方的接收端,經統計含有五個文字及每個文字重複出現的次數;而要區分 這五個文字如A、B、C、D 及 E 等,使用傳統編碼則每個文字需要二進制 3 位元(bits)編碼後才傳送出去; 接收端也須依對應3 位元來解碼而還原為該筆資料的每個文字。 (二)如改以霍夫曼編碼則每個文字的編碼長度不一,如此可減少這一筆資料總儲存位元數;即資料被作最佳 壓縮之霍夫曼碼資料後才傳送出去,可降低傳送的資料量及傳送的時間。當接收端接收到這筆霍夫曼碼資 料後,則須依對應的霍夫曼解碼方式,將其解壓縮而還原為原始該筆文字資料,而且沒有任何資料遺失。舉 例說明,已知一筆一系列五個文字之原始資料經霍夫曼編碼器之編碼 A10、B01、C11、D001 及 E000 後,而傳送出霍夫曼碼資料為 101100011101100001101110001;接收此資料再經如下圖所示之霍夫 曼解碼器之解碼10A、01B、11C、001D 及 000E 後,則解壓縮而還原霍夫曼解碼為原始文字資 料ACECACEBACAD。 10A 01B 11C 001D 000E 霍夫曼解碼器 霍夫曼解碼 來自霍夫曼編碼器傳送出的霍夫曼碼 ACECACEBACAD 101100011101100001101110001 (三)系統設計:(1)請參考以上舉例說明所陳述方法,設計如下圖所示之「簡易霍夫曼解碼資料解壓縮系統」, 已知霍夫曼解碼器對應五個文字為10A、01B、11C、001D 及 000E。 (2) 每當滑鼠點一下 Random Set1 鍵,系統在「霍夫曼碼 1」右方欄位能隨機產生 26 至 50 個 0 與 1 所組 成合理的霍夫曼碼,同時將「驗證1」及「霍夫曼解碼 1」等右方欄位的內容清除。 (3) 每當滑鼠點一下 Random Set2 鍵,系統在「霍夫曼碼 2」右方欄位能隨機產生 26 至 50 個 0 與 1 所組 成可能合理或不合理的霍夫曼碼,同時將「驗證2」及「霍夫曼解碼 2」等右方欄位的內容清除。

(8)

8 (4) 每當滑鼠點一下 Decoding 鍵,系統則針對這兩筆霍夫曼碼資料分別做驗證與解碼。如果「霍夫曼碼 1」 右方欄位資料為合理的,則只在「霍夫曼解碼 1」右方欄位顯示一系列正確解碼文字;否則只在「驗證 1」 右方欄位顯示”不合理”。同時,如果「霍夫曼碼 2」右方欄位資料為合理的,則只在「霍夫曼解碼 2」右方 欄位顯示一系列正確解碼文字;否則只在「驗證2」右方欄位顯示”不合理”。 (5) 隨機產生的「霍夫曼碼 1」與「霍夫曼碼 2」之右方欄位一系列 0 與 1 資料,可以人工來更新,並進一 步驗證與解碼。 (6) 上述系統可重複操作,直至滑鼠點一下 Exit 鍵而離開系統。 Decoding 簡易霍夫曼解碼資料解壓縮系統 Exit Random Set1 解碼 文字 霍夫曼解碼1 A 10 合理驗證1 霍夫曼碼1 B 01 C 11 D 001 E 000 Random Set2 霍夫曼解碼2 合理驗證2 霍夫曼碼2 範例一

輸入格式:當滑鼠分別點一下Random Set1 鍵與 Random Set2 鍵,隨機各產生「霍夫曼碼 1」之 49 個

0 與 1 組成霍夫曼碼及「霍夫曼碼 2」之 41 個 0 與 1 組成霍夫曼碼。 輸出格式:當滑鼠點一下Decoding 鍵,則在「霍夫曼解碼 1」與「霍夫曼解碼 2」分別顯示一系列正確 解碼文字的結果;表示兩個霍夫曼碼的資料皆是合理的。 Decoding 簡易霍夫曼解碼資料解壓縮系統 Exit Random Set1 解碼 文字 霍夫曼解碼1 BADCCDBDACEDEDBECACE A 10 0110001111100101001101100000100000101000111011000 合理驗證1 霍夫曼碼1 B 01 C 11 D 001 E 000 Random Set2 霍夫曼解碼2 AECACBAACAADBABAECB 10000111011011010111010001011001100001101 合理驗證2 霍夫曼碼2 範例二

輸入格式:當滑鼠分別點一下Random Set1 鍵與 Random Set2 鍵,隨機各產生「霍夫曼碼 1」之 50 個

0 與 1 組成霍夫曼碼及「霍夫曼碼 2」之 35 個 0 與 1 組成霍夫曼碼。 輸出格式:當滑鼠點一下Decoding 鍵,則在「霍夫曼解碼 1」顯示一系列解正確碼文字;但「霍夫曼解 碼2」的資料是不合理,則只在「驗證 2」右方欄位顯示”不合理”。 Decoding 簡易霍夫曼解碼資料解壓縮系統 Exit Random Set1 解碼 文字 霍夫曼解碼1 EADCCDBDACEDEDBECACE A 10 00010001111100101001101100000100000101000111011000 合理驗證1 霍夫曼碼1 B 01 C 11 D 001 E 000 Random Set2 霍夫曼解碼2 不合理 10011101000001111000110000010010011 合理驗證2 霍夫曼碼2

數據

Updating...

參考文獻

相關主題 :