Lab4-1: process an array of complex numbers

 
實習目標 由檔案讀取複數資料
使用 vector 物件記錄讀入的資料
使用 iterator 存取容器物件內資料物件
使用 sort 來依照每一個複數的大小 (絕對值) 來排序列印
 
步驟一 請另外產生一個 project (步驟請參考上一個實習的步驟二), 把實習 3-1 的 CComplex 類別拷貝過來, 就是把 Complex.h 和 Complex.cpp 兩個檔案拷貝過來。
步驟二 在 main() 函式中宣告一個 vector<CComplex> 的容器物件, 寫一個 readFile(vector<CComplex> *pVector) 的函式由檔案 complex.dat 中讀取複數資料, complex.dat 中資料格式如下:
    2 3.2
    4.1 5
    6 7
    ...
    
每一列代表一個複數, 例如第一列代表 2 + 3.2 i
步驟三 讀到的資料請設定到 CComplex 類別的物件內, 並且存放到 vector 的容器物件中
步驟四 在 main() 中 請使用 vector<...>::iterator 將所有的複數資料全部乘起來, 並且將結果列印出來

下面的範例是使用 vector 物件的 iterator 將先前實習的 DataRecord 裡的 value 欄位資料加起來的範例

    ...
    vector<DataRecord> dataContainer;
    vector<DataRecord>::iterator iter;
    ...
    int sum=0;
    for (iter=dataContainer.begin(); 
         iter<dataContainer.end(); iter++)
        sum += iter->value;
    ....
    
iterator 使用起來像是一個指標, 可以用 ++, <, >, =, *, -> 等等運算去移動, 擷取資料, 你可以抽象地把它想像成是指標, 目前內部實作也是指標, 但是請不要去把它真的轉型為指標,
    DataRecord *ptr = (DataRecord *)iter;
    
compiler 廠商並不保證它以後的實作一定是指標

參考範例程式

步驟五 上一個步驟的結果是 -8.96419 + -3.24387 i, 請寫一個 assert 敘述來自動確認這個結果。
步驟六 請撰寫一個比較複數長度大小的函式 greater() 以供 sort 使用來比較兩個複數的大小, 然後請在 main 函式中呼叫 sort 由小到大排序 (sort 的用法請參考 前次實習 步驟三)
步驟七 請用陣列的存取方式 (ex. dataContainer[i].value) 寫一個迴圈依序將所有的複數資料列印出來
步驟八 請助教檢查後, 將所完成的 project (去掉 debug/ 資料匣下的所有內容) 壓縮起來, 選擇 Lab4-1 上傳, 後面的實習課程可能需要使用這裡所完成的程式

C++ 物件導向程式設計課程 首頁

製作日期: 02/24/2004 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程系 Lagoon