Найти значение функции используя ряд Тейлора - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от значения х нач до х кон с шагом дх с точностью Экспоненты. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. есть код, но неправильный пожалуйста, помогите!
Листинг программы
  1. Program lab33;
  2. var f,x,eps,s,a:real;
  3. x1,x2,dx:real;
  4. i,n: integer;
  5. begin
  6. write('x=');readln(x);
  7. write('x2=');readln(x2);
  8. write('dx=');readln(dx);
  9. write('eps=');readln(eps);
  10. writeln('*******************************************');
  11. writeln('* n * f * s * a * x *');
  12. writeln('*******************************************');
  13. while x<=x2 do
  14. begin
  15. if (abs(x)>1) then
  16. begin
  17. n:=1; a:=1/x; s:=a;
  18. while (abs(a)>eps) do
  19. begin
  20. a:=((2*n+1))/((2*n+3)*x*x)*a;
  21. s:=s+a;
  22. n:=n+1;
  23. end;
  24. writeln('* ',n:3,' * ',ln((x+1)/(x-1)):7:4,' * ',(2*s):7:4,' * ',a:7:4,' *',x:5:1,'*');
  25. end
  26. else
  27. writeln('no');
  28. x:=x+dx;
  29. end;
  30. writeln('*******************************************');
  31. readln;
  32. end.

Решение задачи: «Найти значение функции используя ряд Тейлора»

textual
Листинг программы
  1. function GetPrecision(eps: Double): Byte;
  2. var
  3.     Result: Byte;
  4. begin
  5.     Result := 0; eps := Abs(eps);
  6.     while (eps < 1) do
  7.     begin
  8.         eps := eps * 10;
  9.         Inc(Result);
  10.     end;
  11.     GetPrecision := Result;
  12. end;
  13. procedure PrintLine(const n: Byte);
  14. var
  15.     i: Byte;
  16. begin
  17.     for i := 1 to n do
  18.         Write('-');
  19.     WriteLn;
  20. end;
  21. var
  22.     xa, xb, xh, s, si, eps: Double;
  23.     i: Word;
  24.     precision: Byte;
  25. begin
  26.     Write('Input Xa='); ReadLn(xa);
  27.     repeat
  28.         Write('Input Xb='); ReadLn(xb);
  29.     until (xb >= xa);
  30.     Write('Input Xh='); ReadLn(xh);
  31.     Write('Input eps='); ReadLn(eps);
  32.     precision := GetPrecision(eps);
  33.     PrintLine(34 + 2 * precision); //WriteLn(LINE);
  34.     WriteLn('|        x | ', 'f(x)':(4 + precision), ' | ', 'sum':(4 + precision), ' |     n |');
  35.     PrintLine(34 + 2 * precision); //WriteLn(LINE);
  36.     while (xa <= xb) do
  37.     begin
  38.         if (Abs(xa) > 1)
  39.         then
  40.         begin
  41.             s := 0; i := 0; si := 1 / xa;
  42.             while (Abs(si) > EPS) do
  43.             begin
  44.                 s := s + si / (2 * i + 1);
  45.                 Inc(i);
  46.                 si := si / Sqr(xa);
  47.             end;
  48.             WriteLn('| ', xa:8:2, ' | ', Ln((xa + 1) / (xa - 1)):(4 + precision):precision, ' | ', (2 * s):(4 + precision):precision, ' | ', (i + 1):5, ' |');
  49.         end
  50.         else
  51.             WriteLn('| ', xa:8:2, ' | ', 'inf':(4 + precision), ' | ', 'inf':(4 + precision), ' |     - |');
  52.         xa := xa + xh;
  53.     end;
  54.     PrintLine(34 + 2 * precision);  //WriteLn(LINE);
  55. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы