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

Паскаль не получается, подскажите?

Рассматривается вариант вычисления суммы бесконечного ряда, текущий член ai которого содержит степенные выражения, факториалы.

Что то не то написал. поправьте пожалуйста.
Program Lab4;
const
n=1000;
e=0.0001;
label met;
Var x,y,s,xn,xk,dx,a :real;
i:integer;
Begin
write('Введите xn,xk,dx=');
readln(xn,xk,dx);
x:=xn;
While x
Предлагаю такой вариант:
var i,n: integer;
s,x,e,d,sum: real;
procedure fact(y:integer);
begin
while y>=1 do begin
s:=s*y;
dec(y);
end;
end;

begin
cls;
e:=1e-10; s:=1;
x:=0.5;
repeat
fact(n);
d:=(exp(0.5*n*ln(2)+n*ln(x))+sin(n*3.1415926/4))/s;
sum:=sum+d;
writeln(' sum=',sum);
s:=1; inc(n);
until abs(d)<e;>
Владимир Диканев
Владимир Диканев
10 096
Лучший ответ
Зачем „мудрствовать”, когда можно представить каждое слогаемое, как предыдущее значение, умноженное на √(2)·x/n и умноженное на одну из восьми возможных значений sin(n·π/4) (которые можно рассчитать заранее) .

const
  X0 = 0.2;
  X1 = 0.8;
  dX = 0.2';
  Eps = 0.000001;

var
  X, Q, Ai, S : Real;
  N : Integer;
  SinN : array [0..7] of Real;

begin
  Q := Sqrt(2);
  for N := 0 to 7 do
    SinN[N] := Sin(N * Pi / 4);

X := X0;
  repeat
    Ai := 1;
    S := 1;
    N := 0;
  repeat
      Inc(N);
      Ai := Ai * Q * X / N;
      S := S + Ai * SinN[N mod 8];
    until Abs(Ai * SinN[N mod 8]) < Eps;

    WriteLn('S(', X:0:2, ') = ', S:0:7, ' Y(', X:0:2, ') = ', Exp(X)*Sin(X)+1:0:7, ' Погрешность = ', Abs(S - Exp(X)*Sin(X)-1):0:9);
    X := X + dX;
  until X > X1;
end.

Результат работы программы:

S(0.20) = 1.2426667 Y(0.20) = 1.2426553 Погрешность = 0.000011398
S(0.40) = 1.5813333 Y(0.40) = 1.5809439 Погрешность = 0.000389433
S(0.60) = 2.0320000 Y(0.60) = 2.0288457 Погрешность = 0.003154334
S(0.80) = 2.6106667 Y(0.80) = 2.5965053 Погрешность = 0.014161326