步驟三 |
程式第 90-92 列
void sort(int a[], int size)
{
}
未完成, 請隨便挑選一個排序的演算法實作一下,
將陣列 a[] 的內容依照其大小排序 (例如: selection sort,
bubble sort, quick sort 或是 heap sort)。
完成這個步驟以後你的程式應該基本上和範例執行程式有一樣的功能了
下面的內容故意不直接顯示, 你需要看再看, 可以不看的話就盡量不要看
例如一個基本的 selectionSort 的演算法大致如下:
int data[NDATA]; // 假設未排序的資料存放於此陣列中
int ndata; // 假設此變數記錄資料的筆數
int i;
for (i=0; i<ndata-1; i++)
{
1. 在 data[i+1], data[i+2] 到 data[ndata-1] 這些元素中找出最小的
2. 把 這個最小的元素和 data[i] 的資料對調
}
|
步驟四 |
請嘗試將這個程式分割成為四個檔案,
內容如下:
-
main.cpp: 包含 main() 函式
-
io.cpp: 包含 readFile() 和 printArray() 函式
-
statistics.cpp: 包含 mean(), median(), 和 mode() 函式
-
sort.cpp: 包含 sort() 函式
請注意 io.cpp, statistics.cpp, 和 sort.cpp 都要有相對應的 io.h, statistics.h 和 sort.h
檔案
分割檔案的大致步驟如下:
-
拷貝 main() 函式至 visual studio IDE 中一個新的編輯視窗,
存檔為 main.cpp
-
build 建立專案
-
加入所使用到的函式的宣告, 包括
void readFile(int *dataSize, int data[]);
void mean(const int [], int);
void median(int [], int);
void mode(int [], int [], int);
-
Build / Compile main.cpp, 確定語法已經正確 (不要做 build 的動作,
因為 readFile(), mean(), median(), mode()
這些函式都還沒有在這個專案中定義, 執行 build
的話最後在連結的時候會給你找不到上述函式的連結錯誤)
-
拷貝 readFile(), printArray() 函式的定義到新的編輯視窗中,
存檔為 io.cpp, 再拷貝這兩個函式的
宣告敘述到一個新的編輯視窗,
並在前後加上 #ifndef, #define, #endif 的敘述如下:
#ifndef IO_H
#define IO_H
void readFile(int *dataSize, int data[]);
void printArray(const int[], int);
#endif
#ifndef, #define, #endif 的敘述是為了防止重複引入定義的。
存檔為 io.h
-
修改 main.cpp 內容,
拿掉 void readFile(int *dataSize, int data[]); 敘述,
換成 #include "io.h"
-
將 io.h 及 io.cpp 兩個檔案加入專案中
(在 File View 中以滑鼠右健點選 XXX files ... 名稱,
選擇 Add files to project 選項,
或是選取選單 Project / Add to project / files...
也可以做到)
-
分別 compile main.cpp 以及 io.cpp
確定語法及個別的引入檔案是正確的,
此時擬應該會發現 io.cpp 需要引入 stdio.h
-
依照類似程序製作 statistics.cpp, statistics.h, sort.cpp 以及
sort.h 檔案, 記得一定要把個別檔案加入專案中
-
都完成後可以 build 並且執行測試
minimal declaration 原則:
請確實瞭解應該在什麼地方 #include 需要的 .h 檔案,
很多時候多加幾列 #include 敘述並不會有錯誤,
但是那代表你並不清楚什麼地方該加,
代表你並不清楚為什麼要加上那些 #include 敘述,
如果你不清楚的話請趕快問我、助教或是同學。
|