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