'+' 操作不适用于 function(x: real): real 和 real 类型。检查程序的运行对于a = 0.1; b = 1.0; h = 0.1;

The '+' operation is not applicable to the types function(x: real): real and real. Check the operation of the program for a = 0.1; b = 1.0; h = 0.1;

检查程序对a = 0.1的运行; b = 1.0; h = 0.1; select 参数 n 的值取决于任务。

为什么我会收到错误消息?解决这个问题的最佳方法是什么?如何简化?

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.

-->'+'操作不适用于类型function(x: real): real and real

我尝试根据 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)

错误信息的意思是+的第一个参数是一个函数。我敢打赌这是 S := S + e 行。虽然您可以分配给 S 以设置 S 的 return 值,但您不能那样读回它。

您可以在该函数中引用一个函数;这与递归一起使用。但是你需要真正给自己打电话。例如。 Fibonacci := Fibonacci(i-1) * i。现在*左边不是函数,而是函数调用的结果

解决方案:只需使用一个临时变量,并将其分配给 SS

end;