Вычислить и вывести на экран в виде таблицы значения функции - 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.
Объяснение кода листинга программы
- Объявляется функция
readln_check
с параметрамиs
(строка),a
иb
(дробные числа). - Внутри функции
readln_check
происходит ввод значения переменнойt
и проверка, пока оно не удовлетворяет условиям (t > a) и (t < b). - Затем программа возвращает значение
t
. - Объявляется функция
arccos_Taylor
с параметрамиx
(дробное число),eps
(дробное число) иn
(целое число). - Внутри функции
arccos_Taylor
происходит вычисление аппроксимации арккосинуса при помощи разложения в ряд Тейлора с точностьюeps
. - Вычисленное значение возвращается функцией, а также увеличивается счетчик
n
. - Затем объявляются переменные
x
,xn
,xk
,dx
,eps
иn
, а также константаlin
. - Программа запрашивает у пользователя ввод границ интервала табуляции, шага и точности.
- Далее происходит вывод таблицы со значениями
x
,y(x)
,n
иarccos(x)
для каждого шагаx
в интервале отxn
доxk
. - Программа останавливается в ожидании ввода пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д