2006年02月14日

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

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

說起來,這次應檢經驗非常不愉快啊。明明就是在高雄報名,也在高雄考學科,竟然要我跑到台中考術科,感覺非常不爽,而且基本上是砸鍋了。沒想到出了一題最優路徑選擇演算法的實作題,偏偏我最弱的就是那一點,沒做完那題,是一定不過的。寫了十年 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() 兩個方法。


Posted by shirock at 樂多Roodo! │20:49 │回應(6)C/C++
工具:編輯本文
Ads by Roodo! 
引用列表:
Borland C/C 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C compiler 和相關工具
How to use Borland C/C 5.5 Complier【石頭閒語】 at 2006年09月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年09月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年04月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