Решить квадратное уравнение заданного вида с параметром

Формулировка. Дано натуральное число n. Вывести на экран решения всех квадратных уравнений вида x2 + 2ax – 3 = 0 для всех a от 1 до n.

Решение. Эта задача очень похожа на задачу 13. В принципе, ее можно было бы решить, используя код этой задачи, взяв первый и последний коэффициенты равными 1 и -3 соответственно и запустив цикл по всем a от 1 до n, умножив a на 2 во всех формулах.

Однако исследуем это уравнение математически и попытаемся оптимизировать решение:

1) Найдем дискриминант уравнения:pascal26_1

Очевидно, что найденная величина неотрицательна, и, если быть точнее, то при a от 1 до n она всегда принимает значение не меньше 16 (так как при a = 1 она равна 4*(1 + 3) = 4 * 4 = 16). Следовательно, наше уравнение всегда имеет решение, причем их два.

2) Найдем формулы корней уравнения:pascal26_2

Итак, формулы корней уравнения получены, и теперь только осталось вывести в цикле значения корней для всех a от 1 доn, не забыв сделать вывод форматированным (так как решения будут вещественными).

Код:

  1. program MyQuadraticEquation;
  2. var
  3. a, n: word;
  4. x1, x2: real;
  5. begin
  6. readln(n);
  7. for a := 1 to n do begin
  8. x1 := sqrt(a * a + 3) — a;
  9. x2 := -a — sqrt(a * a + 3);
  10. writeln(‘a = ‘, a, ‘, x1 = ‘, x1:4:2, ‘, x2 = ‘, x2:4:2)
  11. end
  12. end.