Это уравнение вида Ax2 + Bx + C = 0, где A, B и C — заданные константы (с ограничением A != 0).
Первым шагом решения уравнения является вычисление дискриминанта D = B2-4AC. Если D = 0, уравнение имеет единственный действительный корень x = -B/2A, в противном случае существует пара корней x1 = (-B+sqrt(D))/2A, x2 = (-B-sqrt(D))/2A (корни являются действительными или комплексными в зависимости от знака дискриминанта).
Примеры:
x + 1 = 0 — не квадратное уравнение;
x2 — 2x + 1 = 0 — единственный корень 1;
x2 — 1 = 0 — пара корней 1 и -1;
2x2 — 3x + 1 = 0 — пара корней 1 и 0.5;
x2 + 1 = 0 — пара комплексных корней i и -i (или (0, 1) и (0, -1)).
Задача состоит в том, чтобы прочитать целочисленные константы A, B и C, заданные пользователем, вычислить корни уравнения и вывести их. Если A = 0, выведите сообщение об ошибке “Уравнение не является квадратным” (“Not a quadratic equation.”). Корни следует выводить в формате (a, b) или a + ib, где a и b — дробные числа с 6 или менее знаками после десятичной запятой.
Этот класс примеров демонстрирует работу с дробными и комплексными числами (если язык предоставляет эти типы данных), а также с математическими функциями. Кроме того, для общения с пользователем может использоваться как консоль, так и графический интерфейс.
Пример для версий Borland C++ Builder 6, g++ 3.4.5, Microsoft Visual C++ 9 (2008)
В этом примере используется класс complex<>, входящий в состав библиотеки STL. Все вычисления выполняются в комплексных числах, т.к. это позволяет не беспокоиться о знаке дискриминанта и различных представлениях корней для действительного и комплексного случаев.
Оператор >> класса complex<> перегружен так, что он распознает несколько форматов вводимых чисел, в т.ч. и числа без мнимой части, так что константы A, B и C читаются не как целые числа, а сразу как комплексные. Такая реализация позволяет расширить область применения примера до уравнений с дробными и даже комплексными коэффициентами.
Оператор << класса complex<> также перегружен и выводит любое комплексное число x как (x.real(),x.imag()), поэтому для вывода корней без мнимой части как обычных дробных чисел используется функция print.