1.
請以C++或Java 實作以下副程式MilitaryTimeToRegularTime(),將24 小時制的時間
(稱為military time),轉換為12 小時制的時間,並回傳之。請注意,輸入參數24
小時制時間為字串(string),長度固定為5 個字元(char),若有格式錯誤,例如長度不
是5、不含冒號、不是數字字元或時間不合理等,則此副程式應回傳error 字串。
輸出格式請參考以下使用範例。(25 分)
// 以下為C++之function prototype,若使用Java,請自行作適當的修改
// 註:以下string 的宣告,也可以改用C 語言的char *替代之
string MilitaryTimeToRegularTime(string militaryTime)
{

}
void main()
{
        cout << MilitaryTimeToRegularTime("00:00") << endl; // 輸出 12:00 AM
        cout << MilitaryTimeToRegularTime("01:00") << endl; // 輸出 1:00 AM
        cout << MilitaryTimeToRegularTime("12:00") << endl; // 輸出 12:00 PM
        cout << MilitaryTimeToRegularTime("18:00") << endl; // 輸出 6:00 PM
        cout << MilitaryTimeToRegularTime("01:60") << endl; // 輸出 error
        cout << MilitaryTimeToRegularTime("03!50") << endl; // 輸出 error
        cout << MilitaryTimeToRegularTime("18:0x") << endl; // 輸出 error
}
2.
資訊系統經常需要分析各種客戶族群的消費能力,請以C++或Java 實作以下功能。

(一)
寫作一個儲存客戶資訊的class,稱為Customer,內含客戶的ID(身分證字號;
string)、age(年齡;int)、points(消費累積點數;int)等屬性(attributes 或
member variables)。注意:寫作Customer 時請作適當的封裝,並提供適當的建
構元(Constructor)。(12 分)
(二)
寫作一個副程式計算某年齡範圍的客戶,其點數平均值,格式如下:
// 以下為C++之function prototype,若使用Java,請自行作適當的修改
// input: customers 為一個vector(或ArrayList),儲存所有客戶的資訊
// minAge, maxAge:年齡範圍
// return:回傳所有年齡介於年齡範圍的客戶之點數平均值
double averagePoints(vector<Customer> &customers, int minAge, int maxAge)
注意: 寫作averagePoints() 時請提供適當的include/import , 不用寫呼叫
averagePoints()的主程式或其他副程式。(13 分)
3.

如下圖,BarChart(長條圖)是一個抽象類別,長條圖中每一條的長度儲存在bars
裡面,可以用addBar()增加一條新的資料,並指定其長度(length),另有plot()是一個
pure virtual function(或稱為abstract method),負責繪出長條圖;HorizontalBarChart
繼承BarChart,實作plot(),以水平方向繪製長條圖;VerticalBarChart 則繼承
BarChart,以垂直方向繪製長條圖。請以C++或Java 回答以下問題:


(一) 寫出BarChart 類別宣告與實作。(8 分)
(二) 寫出HorizontalBarChart 類別宣告與實作。例如,假設bars 包含3 筆資料,依
序為3, 10, 8,則副程式plot()應該在console 以文字方式繪出以下圖形。(9 分)
3 ***
10 **********
8 ********
(三) 若有一個宣告為VerticalBarChart 的pointer(或reference)變數p,請問p 是否
可以轉型(cast)為HorizontalBarChart 或BarChart 的pointer(或reference)?
(8 分)
 

4.
使用C++的「=」複製物件時,預設的複製方式是memberwise assignment,例如執
行o1 = o2 時,會將o2 的各member variable 複製至o1,若member variables 中有
pointer 時,則直接複製pointer,因此,o1 與o2 會共用此pointer 所指向的物件,此
後若變更o1 的內容時,也可能會變更o2,效果相當於shallow copy。在某些應用場
合,我們希望支援deep copy,也就是當執行o1 = o2 時,o1 應該擁有獨立的記憶體
區域,而不與o2 共用。在以下程式中,Rectangle 類別使用pointer 指向一個Point
(點),並使用整數儲存width、height,分別代表矩形的點座標,以及寬度及高度。
請寫出:

(一) operator =的實作,使得在執行Rectangle 的「=」時,自動產生deep copy 的效果。
(20 分)

(二) destructor 的實作,避免memory leak。(5 分)
class Rectangle {
public:
        Rectangle(int x = 0, int y=0, int w = 0, int h = 0)
                   : width(w), height(h) { point = new Point(x, y); }
       ...
       void print() {
               cout << "Rectangle x=" << point->getX() << " y=" << point->getY()
                       << " width=" << width << " height=" << height << endl;
         }
        Rectangle operator = (Rectangle rhs)
        {
           ...
         }
private:
         Point *point;
        int width;
        int height;
};

購買題庫後,可使用那些功能?

可觀看題目詳解,並提供模擬測驗!(免費會員無法觀看研究所試題解答)