面向過程是一種以步驟為中心的編程設計方法。編程的時候把解決問題的步驟拆分出來,並用函數把這些步驟實現出來,或者說包裝起來,便是面向過程的意思了。那麼,如果我們要用C++進行一個未知數的四則運算,那麼該怎麼拆分步驟呢?
你會發現都是順序的結果
如果忘記了C++有什麼類型可以會第4天看最底的小表格
我假設大家都聽過數學的函數,數學的函數裡的表示是這樣的: sin(x)
, f(y)
,你可以看見函數有一個名字,而在括弧裡的就是你要傳入的數值。如果要定義一個函數做什麼,和返回的數值是什麼。那麼就要用以下的方法。
我們假設要做一個 叫 add(x,y)
的函數,當中我們希望他計算出 x + y 的總和,那麼就可以這樣做。
auto sumOf(int x, int y){
auto sum = x + y;
//return 就是把我們希望要的答案輸出到主函數裡
return sum;
}
那麼怎麼獲得這個函數計算出的數值呢?,可以這樣
auto onePlusTwo = sumOf(1, 2);
auto ThreePlus15 = sumOf(15, 3);
如此類推,我們可以得出以下的函數
auto differenceOf(int x, int y){
auto sum = x - y;
//return 就是把我們希望要的答案輸出到主函數裡
return sum;
}
auto productOf(int x, int y){
auto product = x * y;
//return 就是把我們希望要的答案輸出到主函數裡
return product;
}
auto quotientOf(int x, int y){
auto quotient = x / y;
//return 就是把我們希望要的答案輸出到主函數裡
return quotient;
}
那麼我們下一步就是查詢數式究竟是 + - x ÷ 了
auto calculate(auto x, char operators, auto y){
switch(operators){
case '+': return sumOf(x,y); break;
case '-': return differenceOf(x,y); break;
case '*': return productOf(x,y); break;
case '/': return quotientOf(x,y); break;
}
然後再寫一個四則驗算器。
auto check(int x, char oeprators, int y, int z){
return calculate(x,operators,y) == z;
}
true
,反之 false
下一步便是寫出計算的For Loops了
auto evaluateX(char operators, int y, int z){
for(auto x = 0; x < 1000 ;x++){
if(check(x,operators,y,z)) return static_cast<double>(x);
else if(check(-x,operators,y,z)) return static_cast<double>(x);
else continue;
}
這個程序的範圍從-1000到1000,能應付簡單的計算,static_cast應付小數的
那怎麼使用函數呢?其實上面的函數有不少都有使用其他函數的,而下面就是在Main中使用。
int main(){
auto x = evalutateX('+',10,12);
cout << x << endl;
//輸出了 2
auto y = evalutateX('*',10,12);
cout << y << endl
//輸出了 1.2
auto z = evaluateX('/',10,18);
cout << z << endl;
//輸出了 180
}
這樣,我們一個並不是很Flexible的 Function就完成啦。回顧一下函數結構
|-- evaluateX()
|----check()
|--------calculate()
|------------sumOf()
|------------differenceOf()
|------------quotientOf()
|----check()
|--------calculate()
|------------sumOf()
|------------differenceOf()
|------------quotientOf()
明天會換個話題,講一講Vector,在第九天應該會講一種更強大的函數式Lamba,同時完善我們的程式