Формулировка. Дано натуральное число n. Вывести на экран решения всех квадратных урав-
нений вида x
2
+ 2ax – 3 = 0
для всех a от 1 до n.
Решение. Эта задача очень похожа на задачу 12. В принципе, ее можно было бы решить, ис-
пользуя код этой задачи, взяв первый и последний коэффициенты равными 1 и –3 соответственно и
запустив цикл по всем a от 1 до n, умножив a на 2 во всех формулах.
Однако исследуем это уравнение математически и попытаемся оптимизировать решение:
1) Найдем дискриминант уравнения:
( )
( )
(
)
2
2
2
4 1
3
4
12
4
3
D
a
a
a
=
− ⋅ ⋅ − =
+
=
+
Очевидно, что найденная величина неотрицательна, и, если быть точнее, то при a от 1 до n она
всегда принимает значение не меньше 16 (так как при a = 1 она равна 4 * (1 + 3) = 4 * 4 = 16).
Следовательно, наше уравнение всегда имеет решение, причем их два.
2) Найдем формулы корней уравнения:
(
)
2
2
2
2
2
1
2
2
4
3
2
4
3
2
2
3
3, 3
2
2
2
a
a
a
a
a
a
x
a
a
x
a
a
− +
+
− +
+
− +
+
=
=
=
= − +
+
= − −
+
Итак, формулы корней уравнения получены, и теперь только осталось вывести в цикле значе-
ния корней для всех a от 1 до n, не забыв сделать вывод форматированным (так как решения будут
вещественными).
Код:
1.
program MyQuadraticEquation;
2.
3.
var
4.
a, n: word;
5.
x1, x2: real;
6.
7.
begin
8.
readln(n);
9.
for a := 1 to n do begin
10.
x1 := sqrt(a * a + 3) - a;
11.
x2 := -a - sqrt(a * a + 3);
12.
writeln('a = ', a, ', x1 = ', x1:4:2, ', x2 = ',
x2:4:2)
13.
end
14.
end.
Do'stlaringiz bilan baham: |