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

Помогите, пожалуйста, с решением задачи из задачника Абрамяна.

Помогите, пожалуйста, с решением такой задачи:
Дано вещественное число X и целое число N (> 0). Найти значение выражения X − X3/(3!) + X5/(5!) − … + (−1)N·X2·N+1/((2·N+1)!). Полученное число является приближенным значением функции sin в точке X.

Вот что я сам пытался наваять:

var X,F,R: real; {F- факториал, R- результат}
N,i,k: integer;
begin
Task('For23');
Read(X,N);
F:=1;
for k:=i to (2*N+1) do F:=F*i;
R:=X+power(-1,N)*power(X,2*N+1)/F;
k:=-1; F:=1;
for i:=3 to N do
if (i mod 2 <>0) then begin
F:=F*i; R:=R+k*power(X,N)/F;
k:=-k;
end;
Write(R);
end.
var
x, p, f, r: real;
n, i: integer;
begin
readln(x, n);
p := x;
f := 1;
r := x;
for i := 1 to n do begin
p := -p * x * x; { степень с измененным знаком (+/-) }
f := f * (2 * i) * (2 * i + 1); { факториал }
r := r + p / f; { добавить к сумме следующий член ряда }
end;
writeln('sum: ', r:0:5);
writeln('sin(x): ', sin(x):0:5);
end.
Толя Кисель
Толя Кисель
83 776
Лучший ответ
не понял.. .

for k:=i to (2*N+1) do F:=F*i;

... у тебя равно i чему?
....каждый раз считаешь факториал заново?
Viktor Podlich
Viktor Podlich
63 240
Ряды.. .
R(X) = Summ(i=1..N, C(i, X)),
где C(1, X)=X, C(2, X)=0, C(i, X)=-1*C(i-2, X)*X*X/(i-1)/i.

Типичное решение: написать функцию C(i, X) и складывать в цикле до N или пока Abs(C(i, X)) >1.0e-5;
Или устроить массив C[i], заполняя его в цикле, а потом складывать его элементы

Пример функции (рекурсия) :
function C(i: Integer; X: double): double;
begin
if i = 1 then Result := X // база рекурсии
else if (i <= 0) or (i mod 2 = 0) then Result := 0 // пропустим чётные, и ограничимся положительными
else Result := -1*X*X/i/(i-1)*C(i-2, X);
end;

Для теста в конце надо вывести значение синуса: Writeln(sin(X));

ЗЫ
По вашему коду:
Во-первых, не очень понятно, к чему это:
for k:=i to (2*N+1) do F:=F*i;
R:=X+power(-1,N)*power(X,2*N+1)/F;
правильно:
R:=X;
Во-вторых, у вас в цикле F:=F*i, но нужно F:=F*i*(i-1) - так как i mod 2 пропускает чётные i при вычислении факториала.
Это for23. Решение этой задачи доступно на 3 ЯЗЫКАХ На сайте HSECODES.COM