А где фото-то ничего не понятно.
Procedure SqRoot(a, b, c: real; var x1, x2: real; var nroots: integer);
{Корни квадратного уравнения с коэффициентами a,b,c.
nroots - количество найденных действительных корней
n=0: корни мнимые, х1 - вещественная часть, х2 - мнимая;
n=1: корни действительные и равные, х1=х2;
n=2: корни действительные и разные, х1, х2}
var
d: real;
begin
d := sqr(b) - 4 * a * c;
if d < 0 then
begin
nroots := 0;
x1 := -b / (2 * a);
x2 := sqrt(-d) / (2 * a);
end
else if d = 0 then
begin
nroots := 1;
x1 := -b / (2 * a);
x2 := x1
end
else
begin
nroots := 2;
d := sqrt(d);
x1 := (-b - d) / (2 * a);
x2 := (-b + d) / (2 * a)
end
end;
{тестирование}
var
a2, a1, a0, x1, x2: real;
n: integer;
begin
repeat
write('Введите коэффициенты уравнения: ');
readln(a2, a1, a0);
if abs(a2) + abs(a1) > 0 then
begin
SqRoot(a2, a1, a0, x1, x2, n);
case n of
0: writeln('Корни мнимые: ', x1:0:6, '-I*', x2:0:6, ', ',x1:0:6, '+I*', x2:0:6);
1: writeln('Корни действительные и равные: ', x1:0:6);
2: writeln('Корни действительные и разные: ', x1:0:6, ', ', x2:0:6)
end
end
until abs(a2) + abs(a1) = 0
end.
Тестовое решение:
Введите коэффициенты уравнения: 3 -2.5 1
Корни мнимые: 0.416667-I*0.399653, 0.416667+I*0.399653
Введите коэффициенты уравнения: -3 5 2
Корни действительные и разные: 2.000000, -0.333333
Введите коэффициенты уравнения: 4 -6 2.25
Корни действительные и равные: 0.750000
Введите коэффициенты уравнения: 0 0 0
Преобразуем выражение
Первые 2 слагаемых при переводе в с. сч. 3 дадут числа вида "10000...00", и количество нулей будет равно величине степени. (Можешь сам у в этом убедиться для чисел с небольшой степенью). Поэтому первые два слагаемых переведутся в число "100...0010000...00", кол-во нулей между единицами равно 66-45 = 21, правее средней единицы = 44.
Число
гораздо меньше. Поэтому при вычитании мы будем занимать разряд до тех пор, пока не дойдем до средней единицы, которая станет после этого 0, а все, что правее - двойками (было "100..00
100..00", стало "100..00
022..22", но только после заёма единицы, ещё нужно довычистывать). Затем проведем вычитание и посмотрим, сколько двоек пришлось убрать для этого.
Переводим
.
Вычитаем "100..00
100..0000" - 110 = "100..00
022..2
120"
Кол-во двоек между маркерованными цифрами = 44 - 3 = 41. Добавим ещё одну 2 правее маркерованной единицы = 42 -
ответ