Другие языки программирования и технологии

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания. Pascal

В задании ошибка -там k надо брать, естественно, не от нуля, потому что на ноль делить нельзя, а от единицы. Можно сделать итарационный цикл с while для вычисления ряда Маклорена при конкретном значении аргумента х этого степенного ряда и параметрический цикл for для табуляции функции S(x). А значение параметра n будет вычисляться автоматически при вычислении суммы ряда Маклорена, у меня эта сумма вычисляется с заказываемой точностью 1e-14 (или одна стотриллионная). Вот что тогда получается:

var i, n: integer;
x, k, h, sx: real;

function Y(x: real): real;
begin
Y := x * arctan(x) - 0.5 * ln(1.0 + x * x)
end;

function S(x: real): real;
var sum, xx, p, znak, e: real;
begin
S := 0.5 * x * x;
p := x * x;
xx := - x * x;
k := 2;
e := 1e303;
while abs(e) > 1e-14 do
begin
k := k + 2;
p := p * xx;
e := p / (k * (k - 1));
S := S + e
end
end;

begin
h := 0.1;
writeln('x': 2, 'S(x)': 14,
'Y(x)': 18, 'n': 15);
for i := 1 to 10 do
begin
x := i * h;
sx := S(x);
n := round(k / 2);
writeln(x: 3: 1, sx: 18: 14,
Y(x): 18: 14, n: 10)
end
end.

Смотрим результаты и убеждаемся, что получается хорошая точность, а максимальное количество n будет при х=1.
Александр Бортников
Александр Бортников
66 572
Лучший ответ
Дмитрий Николаевич Базин Я попробовал решить задачу отталкиваясь от того, что x это диапазон a до b с шагом h:

program test;
var y, a, b, h, x, Sx, Yx, n:real;
begin
a:=0.1;
b:=1.0;
h:=0.1;

x:=a;
n:=0;

while x<=b do
begin

Yx:= x*arctan(x)-ln(sqrt(1+exp(x)));

x:=x+h;
writeln(Yx);
writeln('---------------------', n); n:=n+1;
end;

end.

Ответы не сходятся, а как решить S(x) не понимаю.

Ваш код даёт ошибку Program5.pas(22) : Операция '+' не применима к типам function(x: real): real и real, я решаю в PascalABC.Net

Похожие вопросы