2014-12-13 67 views
-2

我想計算一個二次方程ax2 + bx + c = 0的根。我認爲我的算法是正確的,但我對函數很陌生,我認爲我的錯誤在於調用它們。你可以幫幫我嗎?先謝謝你。這是代碼。計算二次方程的根。 C++

#include<iostream> 
#include<cmath> 
using namespace std; 
const double EPS = 1.0e-14; 
int quadraticEquation(int& a,int& b, int& c) 

{ 
    if(abs(a) < EPS) 
    { 
     if(abs(b) < EPS) 
     { 
      cout << "No solution" << endl; 
     } 
     else 
     { 
      double x = - c /b ; 
      cout << "One root: " << x << endl; 
     } 
    } 
    else 
    { 
     double delta = b * b - 4 * a * c; 
     if(delta < 0) 
     { 
      cout << "No solution:\n" ; 
     } 
     else 
     { 
      double square_delta = sqrt(delta); 
      double root_1 = (-b + square_delta)/(2 * a); 
      double root_2 = (-b - square_delta)/(2 * a); 
      cout << "x1 = " << root_1 << endl; 
      cout << "x2 = " << root_2 << endl; 
     } 
    } 

} 

int main() 
{ 
    int a = 1; 
    int b = 2; 
    int c = 3; 
    cout << "The solution is: " << quadraticEquation(int a,int b,int c); 

    return 0; 
} 
+0

你能解釋一下你的實際問題? – Alexandru 2014-12-13 18:37:34

+1

正如你在你的代碼中隱含地注意到的那樣,二次方程通常有兩個解*,它們通常不是整數。 – 2014-12-13 19:08:02

+0

@ Cheersandhth.-Alf:呃,他什麼也沒有返回。只需從函數內部打印兩個根。但他也打印未定義的返回值。 – 2014-12-13 19:09:04

回答

-1

定義函數爲:

int quadraticEquation(int a,int b, int c) 

沒有&跡象由值而不是通過參考操作(雖然作爲一個juanchopanza狀態傳遞參數評論它並沒有嚴格要求)。

,並調用它爲:

cout << "The solution is: " << quadraticEquation(a, b, c); 

沒有INT因爲在函數調用你不能提供參數的類型。

+0

答案的第一部分既是不必要的也是錯誤的(儘管在這種情況下按價值傳遞整數是有意義的)。 – juanchopanza 2014-12-13 19:05:06

+1

我並不下調,因爲我不能說在技術上答案是錯誤的,但限制二次方那些只有一個整數根的方程式聽起來就錯了。 – 2014-12-13 19:09:17

+0

編輯我的答案。我希望現在更準確。 – 2014-12-13 19:15:02

3

它應該是:

cout << "The solution is: " << quadraticEquation(a, b, c); // no types in calling a function 
+0

哇,我做了什麼愚蠢的錯誤。真的非常感謝erenon! – rcson 2014-12-13 18:45:08

2

這不是真正的問題,erenon和Paco Abato確實回答了C++問題。

但仍有一些改善您的algorythm:

  • ABS(一)< EPS和ABS(B)< EPS - 如果ABC(C)< EPS每隔x是解決
  • 如果增量< 0應該是if delta <= (-EPS)
  • 您忘記if abs(delta) < EPS)一個雙重解決方案:double x = - b/a;