實習目標 |
由檔案讀取複數資料
使用 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