Вычислить и вывести на экран в виде таблицы значения функции - Pascal (80352)

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

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

Ребят, помогите решить задачку через рекуррентное уравнение, желательно с подробными объяснениями! Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда, на интервале от Хнач до Хкон с шагом dx и точностью. Таблицу снабдить заголовком и шапкой. Строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда: Написал программу, но она не рабочая.. В чем ошибка(-и)???
program lab2; {вычисление функции, заданной с помощью ряда}
uses crt;
var
   xn, xk, dx, eps, ch, y, x:real;  {ch - член ряда, y - значение аргумента}
   n: integer; {n - число интераций}
 
begin
clrscr;
writeln('Введите x начальное, x конечное, шаг и точность');
readln(xn, xk, dx, eps);
{xn - x начальное, xk - x конечное, dx - шаг, eps - точность}
    if(xn>xk) then
    begin
         writeln('Начальное значение аргумента больше конечного, программа сменит их местами');
         x:=xn;
         xn:=xk;
         xk:=x;
    end; {если xc>xn поменяем их местами}
 
    if(xn<xk) then 
    begin
         writeln;
         writeln('Таблица значений функции');
         writeln('+-----+-------------------+-----+');
         writeln('|  x  |         y         |  n  |'); {шапка}
         writeln('+-----+-------------------+-----+');
         ch:=pi/2; {первый член ряда}
         y:=ch; {начальное значение аргумента}
         x:=xn;
         xk:=xk+dx/2;
         n:=0;
              while abs(ch)>eps do {цикл с предусловием}
              begin
                   ch:=ch*((-1)*((((2*n+1)*(2*n+1)*(x*x))/((2*n+2)*(2*n+3))))); {рекурентная формула} {очередной член ряда}
                   n:=n+1;
                   y:=y+ch;
                   if (abs(ch)<eps) and (x<=xk) then
                   begin
                        writeln('| ', x:3:2, '| ', y, ' |  ', n:2, ' |'); {вывод данных}
                        ch:=pi/2;
                        y:=ch;
                        x:=x+dx;
                        n:=0;
                   end;
              end;
         writeln;
         writeln('Нажмите Enter для выхода из программы');
         readln;
    end;
end.
Буду благодарен любой помощи

Решение задачи: «Вычислить и вывести на экран в виде таблицы значения функции»

textual
Листинг программы
uses math;
function readln_check(s: string; a, b: extended): extended;
var t: extended;
begin
  repeat
    write(s, ': (', a:0:15, '..', b:0:15, '];  ', s, ' = ');
    readln(t)
  until (t > a) and (t < b);
  readln_check := t
end;
function arccos_Taylor(x, eps: extended; var n: integer): extended;
var a, t: extended;
begin
  a := x;
  t := a;
  n := 0;
  while abs(a) >= eps do
    begin
      inc(n);
      a := (n - 0.5) / n * (n - 0.5) / (n + 0.5) * x * x * a;
      t := t + a
    end;
  arccos_Taylor := pi / 2 - t;
  inc(n)
end;
 
const lin = '+--------------------+-------------------+------------+-------------------+';
var x, xn, xk, dx, eps: extended;
    n: integer;
begin
  writeln('Введите границы интервала табуляции:');
  xn := readln_check('Граница 1', -1, 1);
  xk := readln_check('Граница 2', -1, 1);
  if xn > xk
    then begin
      x := xn;
      xn := xk;
      xk := x
    end;
  dx := readln_check('Шаг', 0, 1);
  xk := xk + dx / 2;
  eps := readln_check('Точность', 0, 1);
  writeln('Таблица:');
  writeln(lin);
  writeln('|          x         |        y(x)       |      n     |      arccos(x)    |');
  writeln(lin);
  x := xn;
  while x < xk do
    begin
      writeln('| ', x:18:15, ' | ', arccos_Taylor(x, eps, n):0:15, ' | ', n:10, ' | ', arccos(x):0:15, ' |');
      x := x + dx
    end;
  write(lin);
  readln
end.

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

  1. Объявляется функция readln_check с параметрами s (строка), a и b (дробные числа).
  2. Внутри функции readln_check происходит ввод значения переменной t и проверка, пока оно не удовлетворяет условиям (t > a) и (t < b).
  3. Затем программа возвращает значение t.
  4. Объявляется функция arccos_Taylor с параметрами x (дробное число), eps (дробное число) и n (целое число).
  5. Внутри функции arccos_Taylor происходит вычисление аппроксимации арккосинуса при помощи разложения в ряд Тейлора с точностью eps.
  6. Вычисленное значение возвращается функцией, а также увеличивается счетчик n.
  7. Затем объявляются переменные x, xn, xk, dx, eps и n, а также константа lin.
  8. Программа запрашивает у пользователя ввод границ интервала табуляции, шага и точности.
  9. Далее происходит вывод таблицы со значениями x, y(x), n и arccos(x) для каждого шага x в интервале от xn до xk.
  10. Программа останавливается в ожидании ввода пользователя.

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


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

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

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