https://repl.it/@IlyaSiganov/quadraticequation#main.c
Напишите программу, которая решает любые квадратное уравнение в действительных числах методом дискриминанта.
Необходимо обработать все граничные ситуации.
$$ f(x) = ax^2 + bx + c $$
#include "test.h"
// Solution - это структура, которая хранит в себе набор решений квадратного
// уравнения. Если решений уравнение нет, то n_solutions = 0, а содержимое x1 и
// x2 неопределено. Если решения уравнения одно, то n_solutions = 1 и x1==x2
// == единственному решению. Если решений два, то n_solutions = 2, в x1 лежит
// решение, полученное вычитанием дискриминанта, в x1 лежит решение, полученное
// прибавлением дискриминанта
struct Solution {
int n_solutions; // количество решений. Ноль, 1 или 2
float x1; // первый корень уравнения
float x2; // второй корень уравнения
};
// quadratic_equation - находит корни квадратного уравнения a*x*x + b*x + c = 0.
// где
struct Solution quadratic_equation(float a, float b, float c) {
struct Solution solution;
// напиши меня!
solution.n_solutions = -1; // удали меня!
solution.x1 = a * b * c; // удали меня!
solution.x2 = a * b * c; // удали меня!
return solution;
}
int main(void) {
// Это тесты. НЕ УДАЛЯЙТЕ ИХ!
// Преподаватель будет грустить, если вы удалите тесты T_T.
// Тесты проверяют, что ваш код работает правильно.
// Если в задача решена неправильно,
// то в консоли вы увидите ошибку и пояснение.
// Сдавайте лабу, когда устраните все ошибки в тестах.
// Если возникли трудности, то попросите преподавателя вам помочь ^_^.
struct Solution solution;
solution = quadratic_equation(1, 2, -3);
ASSERT_INT(2, ==, solution.n_solutions);
ASSERT_FLOAT_EQUAL(-3.0, solution.x1, EPSILON);
ASSERT_FLOAT_EQUAL(1.0, solution.x2, EPSILON);
solution = quadratic_equation(3, 4, 1);
ASSERT_INT(2, ==, solution.n_solutions);
ASSERT_FLOAT_EQUAL(-1.0, solution.x1, EPSILON);
ASSERT_FLOAT_EQUAL(-1.0 / 3.0, solution.x2, EPSILON);
solution = quadratic_equation(1, 0, -9);
ASSERT_INT(2, ==, solution.n_solutions);
ASSERT_FLOAT_EQUAL(-3.0, solution.x1, EPSILON);
ASSERT_FLOAT_EQUAL(3.0, solution.x2, EPSILON);
solution = quadratic_equation(1, -4, 4);
ASSERT_INT(1, ==, solution.n_solutions);
ASSERT_FLOAT_EQUAL(2.0, solution.x1, EPSILON);
ASSERT_FLOAT_EQUAL(2.0, solution.x2, EPSILON);
solution = quadratic_equation(1, 1, 3);
ASSERT_INT(0, ==, solution.n_solutions);
solution = quadratic_equation(0, 2, 1);
ASSERT_INT(1, ==, solution.n_solutions);
ASSERT_FLOAT_EQUAL(-0.5, solution.x1, EPSILON);
ASSERT_FLOAT_EQUAL(-0.5, solution.x2, EPSILON);
return 0;
}