Я хочу вычислить корень квадратного уравнения ax2 + bx + c = 0
, Я думаю, что мой алгоритм правильный, но я новичок в функциях, и я думаю, что моя ошибка заключается в их вызове. Не могли бы вы помочь мне? Заранее спасибо. Вот код
#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;
}
Определите функцию как:
int quadraticEquation(int a,int b, int c)
Без & знаки для передачи параметров по значению, а не по ссылке (хотя, как утверждает хуанхопанза в комментарии, это строго не требуется).
И назовите это как:
cout << "The solution is: " << quadraticEquation( a, b, c);
Без int, потому что в вызовах функций вы не должны указывать тип параметра.
Так должно быть:
cout << "The solution is: " << quadraticEquation(a, b, c); // no types in calling a function
Это не совсем заданный вопрос, и Эренон и Пако Абато действительно ответили на проблему C ++.
Но есть еще некоторые улучшения в вашем алгоритме:
if delta <= (-EPS)
if abs(delta) < EPS)
одно двойное решение: double x = - b / a;