Вычисление функции с заданной точностью - Pascal ABC
Формулировка задачи:
Вариант №21 в прикрепленном изображении
Помогите найти ошибку,
пишет "Программа завершена из-за переполнения программного стека"
Решение задачи: «Вычисление функции с заданной точностью»
textual
Листинг программы
program p1;
var
n: integer;
p: integer;
x, e, f, f1: real;
function fac(p: integer): integer;
begin
if p = 1 then fac := 1 else fac := p * fac(p - 1);
end;
begin
writeln('Введите х');
readln(x);
writeln('Введите e');
readln(e);
f := pi / 2;
f1 := 0;
n := 1;
while (abs(f1 - f) > e) do
begin
f1 := f;
f := f - ((fac(2 * n) * exp(ln(x) * (2 * n + 1))) / (exp(ln(4) * n) * fac(n) * (2 * n + 1)));
n := n + 1;
end;
writeln(f);
end.
Объяснение кода листинга программы
- Создается программа p1.
- Определяются переменные: n, p, x, e, f, f1 типа integer, real.
- Определяется функция fac(p: integer) типа integer.
- Вычисляется значение функции fac при p = 1 и присваивается переменной fac.
- Задаются начальные значения переменных n, p, x, e, f, f1.
- Выводится запрос на ввод значения x.
- Читается значение x.
- Выводится запрос на ввод значения e.
- Читается значение e.
- Инициализируется переменная f значением pi / 2.
- Инициализируется переменная f1 значением 0.
- Инициализируется переменная n значением 1.
- Запускается цикл while, который выполняется, пока abs(f1 - f) > e.
- Внутри цикла вычисляется значение f1.
- Вычисляется значение f.
- Увеличивается значение n на 1.
- Вычисляется значение f.
- Повторяются шаги 14-17 до тех пор, пока abs(f1 - f) <= e.
- Выводится значение f.
- Программа завершается.