Найти значение функции используя ряд Тейлора - 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.

Объяснение кода листинга программы

  1. Функция GetPrecision принимает аргумент eps типа Double и возвращает тип Byte. Она использует цикл while для увеличения значения Byte в соответствии с увеличением eps до тех пор, пока eps меньше 1.
  2. Простой цикл for используется в процедуре PrintLine для вывода ряда из 34 точек (-) через пробел.
  3. Переменные xa, xb, xh, s, si и eps объявлены как Double, а i как Word. Переменная precision инициализируется значением, возвращаемым функцией GetPrecision.
  4. В блоке while переменная s инициализируется как 0, а i и si инициализируются как 0 и 1/xa соответственно. Цикл while выполняется, пока abs(si) больше или равен EPS.
  5. Внутри цикла while переменная s обновляется как сумма si / (2 * i + 1). Индекс i увеличивается на 1, а si делится на 2.
  6. После завершения цикла while выводится строка с xa, Ln((xa + 1) / (xa - 1)) и (4 + precision):precision. Если xa больше или равно 1, то выводится inf вместо значений xa и Ln.
  7. После вывода строки с xa выводится ряд из 34 точек (-) через пробел.
  8. Переменная xa обновляется как xa + xh.
  9. Выводится последняя строка с xa, Ln((xa + 1) / (xa - 1)) и (4 + precision):precision. Если xa больше или равно 1, то выводится inf вместо значений xa и Ln.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы