Найти значение функции используя ряд Тейлора - Turbo Pascal
Формулировка задачи:
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от значения х нач до х кон с шагом дх с точностью Экспоненты. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.
есть код, но неправильный
пожалуйста, помогите!
Решение задачи: «Найти значение функции используя ряд Тейлора»
textual
Листинг программы
function GetPrecision(eps: Double): Byte;
var
Result: Byte;
begin
Result := 0; eps := Abs(eps);
while (eps < 1) do
begin
eps := eps * 10;
Inc(Result);
end;
GetPrecision := Result;
end;
procedure PrintLine(const n: Byte);
var
i: Byte;
begin
for i := 1 to n do
Write('-');
WriteLn;
end;
var
xa, xb, xh, s, si, eps: Double;
i: Word;
precision: Byte;
begin
Write('Input Xa='); ReadLn(xa);
repeat
Write('Input Xb='); ReadLn(xb);
until (xb >= xa);
Write('Input Xh='); ReadLn(xh);
Write('Input eps='); ReadLn(eps);
precision := GetPrecision(eps);
PrintLine(34 + 2 * precision); //WriteLn(LINE);
WriteLn('| x | ', 'f(x)':(4 + precision), ' | ', 'sum':(4 + precision), ' | n |');
PrintLine(34 + 2 * precision); //WriteLn(LINE);
while (xa <= xb) do
begin
if (Abs(xa) > 1)
then
begin
s := 0; i := 0; si := 1 / xa;
while (Abs(si) > EPS) do
begin
s := s + si / (2 * i + 1);
Inc(i);
si := si / Sqr(xa);
end;
WriteLn('| ', xa:8:2, ' | ', Ln((xa + 1) / (xa - 1)):(4 + precision):precision, ' | ', (2 * s):(4 + precision):precision, ' | ', (i + 1):5, ' |');
end
else
WriteLn('| ', xa:8:2, ' | ', 'inf':(4 + precision), ' | ', 'inf':(4 + precision), ' | - |');
xa := xa + xh;
end;
PrintLine(34 + 2 * precision); //WriteLn(LINE);
end.
Объяснение кода листинга программы
- Функция GetPrecision принимает аргумент eps типа Double и возвращает тип Byte. Она использует цикл while для увеличения значения Byte в соответствии с увеличением eps до тех пор, пока eps меньше 1.
- Простой цикл for используется в процедуре PrintLine для вывода ряда из 34 точек (-) через пробел.
- Переменные xa, xb, xh, s, si и eps объявлены как Double, а i как Word. Переменная precision инициализируется значением, возвращаемым функцией GetPrecision.
- В блоке while переменная s инициализируется как 0, а i и si инициализируются как 0 и 1/xa соответственно. Цикл while выполняется, пока abs(si) больше или равен EPS.
- Внутри цикла while переменная s обновляется как сумма si / (2 * i + 1). Индекс i увеличивается на 1, а si делится на 2.
- После завершения цикла while выводится строка с xa, Ln((xa + 1) / (xa - 1)) и (4 + precision):precision. Если xa больше или равно 1, то выводится
infвместо значений xa и Ln. - После вывода строки с xa выводится ряд из 34 точек (-) через пробел.
- Переменная xa обновляется как xa + xh.
- Выводится последняя строка с xa, Ln((xa + 1) / (xa - 1)) и (4 + precision):precision. Если xa больше или равно 1, то выводится
infвместо значений xa и Ln.