Уравнение вида a⋅x2 + b⋅x + c = 0 — квадратное уравнение.
a, b, c — действительные числа, a ≠ 0.
Для того чтобы вычислить корни квадратного уравнения, нужно сначала найти дискриминант.
D = b2 — 4⋅a⋅c;
- если D < 0, то квадратное уравнение не имеет корней;
- если D = 0, то уравнение имеет один действительный корень(иногда говорят, что корней два, но они одинаковые):
- x1 = x2 = -b / (2⋅a);
- если D > 0, то уравнение имеет два действительных корня:
- x1 = (-b + √D) / (2⋅a);
- x2 = (-b + √D) / (2⋅a).
program QuadraticEquation;
var
a, b, c, x1, x2, discriminant : real;
begin
{ввыод данных}
write('a = ');
readln(a);
write('b = ');
readln(b);
write('c = ');
readln(c);
{дискриминант}
discriminant := sqr(b) - 4 * a * c;
if discriminant < 0 then
writeln('Квадратное уравнение не имеет корней')
else
begin
if discriminant = 0 then
begin
{квадратное уравнение имеет два одинаковых корня}
x1 := -b / (2 * a);
x2 := x1;
end
else
begin
{уравнение имеет два разных корня}
x1 := (-b + sqrt(discriminant)) / (2 * a);
x2 := (-b - sqrt(discriminant)) / (2 * a);
end;
{вывод корней уравнения}
writeln('x1 = ', x1:8:3);
writeln('x2 = ', x2:8:3);
end;
writeln('Press Enter to Exit...');
readln;
end.
Вариант № 2
{ Пример 1.5. Решить квадратное уравнение ax^2 + bx + c = 0.
Система тестов
╔═════╦═══════════════╦══════════════╦══════════════════════════════╗
║Номер║ Проверяемый ║ Коэффициенты ║ ║
║теста║ случай ╟───┬────┬─────╢ Результаты ║
║ ║ ║ a │ b │ c ║ ║
╠═════╬═══════════════╬═══╪════╪═════╬══════════════════════════════╣
║ 1 ║ d>0 ║ 1 │ 1 │ -2 ║ x1 = 1, x2 = -2 ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 2 ║ d=0 ║ 1 │ 2 │ 1 ║ Корни равны: x1= -1, x2= -1 ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 3 ║ d<0 ║ 2 │ 1 │ 2 ║ Действительных корней нет ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 4 ║ a=0, b=0, c=0 ║ 0 │ 0 │ 0 ║ Все коэффициенты равны нулю,║
║ ║ ║ │ │ ║ х - любое число ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 5 ║ a=0, b=0,c<>0 ║ 0 │ 0 │ 2 ║ Неправильное уравнение ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 6 ║ a=0, b<>0 ║ 0 │ 2 │ 1 ║ Линейное уравнение. Один ║
║ ║ ║ │ │ ║ корень: х= -0,5 ║
╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
║ 7 ║a<>0, b<>0, c=0║ 2 │ 1 │ 0 ║ x1 = 0, x2 = - 0,5 ║
╚═════╩═══════════════╩═══╧════╧═════╩══════════════════════════════╝
}
Program QuadraticEquation;
Uses Crt; { подключение библиотеки Crt }
Var a, b, c : Real; { a, b, c - коэффициенты уравнения}
Discr : Real; { Discr - дискриминант }
x1, x2 : Real; { x1, x2 - корни }
Test, NTest : Integer; { Ntest - количество тестов }
BEGIN
ClrScr;
Write('Введите количество тестов : ');
ReadLn(NTest);
For Test := 1 to NTest do { цикл по всем тестам задачи }
begin
Write('Тест ', Test, '. Введите коэффициенты a, b, c : ');
ReadLn(a, b, c);
If (a=0) and (b=0) and (c=0)
then begin Write('Все коэффициенты равны нулю.');
WriteLn('x - любое число ')
end
else
If (a=0) and (b<>0)
then WriteLn('Линейное уравнение. Oдин корень: x =', (-c/b):6:2)
else
If (a=0) and (b=0) and (c<>0)
then WriteLn('Неправильное уравнение.')
else
begin
Discr := b*b - 4*a*c;
If Discr > 0
then begin
x1:=(-b + Sqrt(Discr)) / (2*a);
x2:=(-b - Sqrt(Discr)) / (2*a);
WriteLn('x1=' , x1:6:2 , '; x2=' , x2:6:2)
end
else
If Discr = 0
then
begin
x1 := -b/(2*a);
WriteLn('Корни равны: x1=', x1:6:2, ' x2=', x1:6:2)
end
else WriteLn('Действительных корней нет.');
end;
WriteLn
end;
ReadLn
END.