2006年2月14日 20:49

乙級電腦軟體設計技術士應考記

上週六,我為了乙級電腦軟體設計技術士的術科測驗,跑了一趟台中,到勤益技術學院應考。

說起來,這次應檢經驗非常不愉快啊。明明就是在高雄報名,也在高雄考學科,竟然要我跑到台中考術科,感覺非常不爽,而且基本上是砸鍋了。沒想到出了一題最優路徑選擇演算法的實作題,偏偏我最弱的就是那一點,沒做完那題,是一定不過的。寫了十年 C/C++ 程式,竟然沒考過,實在是太大意了。附帶一提,當年 (民國83年) 丙級電腦設計技術士一開辦,我就考到了,隔了十二年「終於」等到乙級檢定...

在實務上,C 語言程式還是佔大多數,純 C++ 語言的程式反而少。別懷疑,看看 Linux 上的軟體,八成都還是用 C 語言寫作。但不用 C++ 並不表示寫不出個體導向 (Object-Oriented) 的程式。早期接觸個體導向的程式人員,大都會用結構型態與函數指標進行資料封裝。像我用 C 語言同樣能實作繼承、動態連結等功能。再者我接觸 C++ 的時間算早,所以 C++ 後期發展出來的東西,如 template, STL 等,我反而不熟悉,考試時就先吃了虧。

而工具的選擇上,更是令我十分不滿。使用工具限定使用 VisualStudio .Net 跟 Borland C++Builder 這兩種,偏偏我都沒用過。我是在 Linux 環境下用 gcc/make 這些工具的。就算在 Win32 環境下,也還有 MinGW32 與 Borland C++ 5.5 command line tool 這兩套可自由取得 C/C++ 編譯工具,為何不能用?害我考試時還要先東摸西摸後,才搞清楚要如何建立專案及生成執行檔。我不清楚考 Java 的人,用的是什麼工具,或許也不是用 JDK 、 IBM VisualAge 或 eclipse。

還有一個小插曲。考試時不知為何,我無法使用 cin,cout, istream, ostream 這些東西,明明 include iostream 了,compiler 竟然說未宣告,見鬼了。偏偏題目限定要實作 >>, << 的運算子覆載作輸出入,於是我當場實作了一組最簡單的 In/Out class...

考試前,承辦單位事先寄了一份模擬試題。跟實際上的試題比對,大致可以看出術科應檢的重點。前三題都是 C++ 語言在運算子覆載以及動態連結上的應用實作。兩題實作運算子覆載及夥伴函數 (friend function) ,一題實作動態連結。但最後一題才是重點,最後一題一定是演算法,而且是冷門的演算法題型。例如模擬試題中的「最長遞增子串列」,我在 Google 上搜尋許久,才搞清楚那是 LIS ,而我手上的資料結構與演算法相關書籍中,根本沒提到這玩意。這次應檢時,則是出了「最優路徑選擇」,給你一個交通網絡圖,分 A~E 個交通系統及 1~9 個站點。試設計一個程式,可依使用者輸入的任兩站點,計算出最省交通費用的路線。

題目一跟題目三類似。我就說一下第三題吧。實作一 fraction 類別 (分子/分母) ,並提供四則運算與大於、小於及等於的運算子。最後再以夥伴函數的功能,實作 >> 及 << 的輸出入動作。我前面說到不能用 cout/cin 而被迫自己當場實作一組 In/Out class 的事,就是指這題。當然,題目本身並沒有要求考生實作一組 In/Out 。

題目二,給你一個 publication 類別,衍生 book 及 type 類別,以動態連結實作 getdata() 及 putdata() 兩個方法。


  • shirock 發表於樂多回應(7)C/C++/C#/Java編輯本文
    │昨日人次:5 │累計人次:6927
     
    引用列表:
    Borland C/C 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C compiler 和相關工具
    How to use Borland C/C 5.5 Complier【石頭閒語】 at 2006年9月6日 17:49
    MinGW 是取 Minimalist GNU for Windows 計劃之意,其目標為提供一個可在 Win32 平台上開發 Win32 native code 的 GNU GCC tools
    How to use MinGW GNU GCC and with PSPad【石頭閒語】 at 2006年9月8日 13:58
    隔了一年後再次應考乙級電腦軟體設計技術士 C 職類,依然歃羽而歸,真是令我情何以堪。
    2006 年乙級電腦軟體設計技術士應考記【石頭閒語】 at 2006年10月8日 22:00
    回應文章
    這次好像沒有人有過!?(我考的是Java)
    | 檢舉 | Posted by 825 at 2006年10月9日 14:49
    關於無法用cin/cout...我猜可能你沒有使用 std 這個namespace ...
    | 檢舉 | Posted by 路人 at 2006年10月31日 11:13
    你忘了 using namespace std;
    | 檢舉 | Posted by BEN at 2008年10月7日 02:21
    謝謝BEN在隔了兩年之後又提了一次。

    是的。因為我當初學 C++ 時(1995年),沒有 namespace std 這種東西。而且我個人用的編譯器設定也是比較寬鬆的設定,並不要求這點。所以我常常忘記 namespace std 這一行。

    請大家不要再針對 namespace std 這一點回應,謝謝。
    | 檢舉 | Posted by 遊手好閒的石頭成 at 2008年10月12日 09:05

    感覺不是那麼簡單考!
    難怪市面好像沒看到乙級電腦軟體設計
    | 檢舉 | Posted by Wei at 2009年4月10日 21:27

    今年小弟有去考軟體設計乙級(Java).考題己有改變.
    原本是考三題debug一題寫程式.但今年是改成
    二題填空(就是要自己把不足的程式碼補進去),
    一題寫程式.
    填空的考題大概如下.
    1.利用即有的程式對以下二個整數作加減
    -123456789123456789
    9876543210987654321
    程式中所缺的是加法和減的函式,要應試者自己補.
    2.虛擬販賣機的操作流程,
    蠻像以下網址的程式,但是考試時會把記算退錢的函
    式拿掉要應試者填寫. http://en.literateprograms.org/Vending_Machine_(java)#chunk%20def:test%20vending%20machine
    第三題則是給一個實作題,有10組學生,和10名老師.每一組學生可以填志願去作老師的選擇,而老師也是要填寫志願選擇學生.
    1.某位老師只有一組學生選,那就會被配對在一起.
    2.某A老師有多組學生選,那就看那一組學生在填志願時
    是把某A老師填在比較前面的志願.那就配對在一起.
    2009年Java的題目大概就如上.提供給大家作參考.
    | 檢舉 | Posted by hank at 2009年10月25日 18:51
    我覺得去考 Java 的比較簡單..
    尤其是 Linux 陣營的...

    我是 2006 年 July 23 拿到乙級 Java.
    (所以 2006 年應該是有人過..我是那個非常早交卷被評審誤當放棄的人, 我很早就離開試場, 不知道後面狀況怎樣)

    我是直接用 DOS prompt 下的 edit 寫, 然後去 javac 產生我的 binary.
    我想對於只會 Linux 程式設計的..這樣子會比較容易..
    他也是有甚麼其他的選擇, 但不管如何, JDK 一定會被安裝到系統裡面. 所以就用 JDK 吧.

    我個人是會寫 Java 但是不常寫, 比較常寫 C/C++ (gtk+/QT). 但是看到乙級 C++ 那個要用啥 Visual/Borland, 就不屑去考了.

    演算法部份. 我覺得只要有參加過程式設計比賽得獎 (IOI/ACM) 這種那就不需要去特別準備.
    所以如果要練演算法, 首先還是要去準備好兩本書: Data Structure in XXXX (Horowitz) 跟 Introduction to Algorithms (CLR)
    然後把 http://uva.onlinejudge.org/
    100~199 號題 (Volume I, 只有100題) 不跳號的全部寫過一次..乙級題目對於一般的參賽者, 應該是可以在 15 分鐘內寫完

    我個人的感想是還蠻容易的.. 只是 Windows 環境下沒有好的編輯器.. edit 很難用, 沒變色也不會縮排. 所以害我寫得不是很順. 但這不是很大的問題, 反正 javac 會告訴哪邊有打錯.

    不過印象中還是有時間玩一場難度中等的踩地雷就是了...因為他規定一定要超過某個時間才能交卷..印象中 Windows 有彈珠台, 太空軍校生什麼的, 但是試場的好像被移掉了
    | 檢舉 | Posted by PaulLiu at 2010年4月4日 18:57