Найти значение функции используя ряд Тейлора - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д