Простой решатель квадратичных уравнений С++, возвращающий неверные ответы

Я работаю над школьным заданием, которое требует использования квадратного уравнения для нахождения корней ax^2+bx+c=0 с b и c в качестве входных данных.

#include <cmath>
#include <iostream>
using namespace std;

int main()
{
   int a, b, c;

   cout << "Enter coefficients a b c: " << endl;
   cin >> a >> b >> c;
   double r1, r2;

   r1=((-1)*b+sqrt(b*b-4*a*c))/2*a;

   r2=((-1)*b-sqrt(b*b-4*a*c))/2*a;


   cout << "The roots are: " << r1 << " and " << r2 << endl;

   return 0;
}

Однако, когда я ввожу 2 -8 8, правильным ответом будет 2 и 2, но я получаю 8 и 8 после запуска программы. Любая идея, что я делаю неправильно?


person bob    schedule 22.09.2017    source источник
comment
Вам не хватает скобок вокруг (2*a). Голосование за закрытие как простая опечатка. Примечание: -1*b можно записать просто как -b.   -  person Sergey Kalinichenko    schedule 22.09.2017


Ответы (1)


Ваша программа фактически умножает решение на a вместо того, чтобы делить его. (Вот почему он выключен в 4 раза)

r1 = (((-1)*b+sqrt(b*b-4*a*c))/2)*a);

Попробуйте поставить пару скобок вокруг 2*a:

r1=((-1)*b+sqrt(b*b-4*a*c))/(2*a);
person hugomg    schedule 22.09.2017
comment
Вау, я должен был это заметить. Спасибо - person bob; 22.09.2017
comment
Добро пожаловать. Пожалуйста, отметьте ответ как принятый, чтобы другие знали, что вам удалось его решить :) - person hugomg; 22.09.2017