Помогите, пожалуйста, с решением такой задачи:
Дано вещественное число 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.
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.
не понял.. .
for k:=i to (2*N+1) do F:=F*i;
... у тебя равно i чему?
....каждый раз считаешь факториал заново?
for k:=i to (2*N+1) do F:=F*i;
... у тебя равно i чему?
....каждый раз считаешь факториал заново?
Ряды.. .
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 при вычислении факториала.
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
Похожие вопросы
- Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
- Помогите пожалуйста с решением задач в паскале
- Помогите пожалуйста с решением задачи, если можно объясните как расшифровать.
- Помогите составить алгоритм решения задачи
- Помогите пожалуйста составить решение с задачей по программированию(на любом языке программирования)
- Помогите пожалуйста, решить данную задачу методом пузырька!!!
- Всем добрый вечер! Помогите пожалуйста решить данную задачу по информатике.
- Помогите пожалуйста,как эту задачу написать в Паскале?
- помогите пожалуйста, люди добрые. задача на C#.
- Помогите пожалуйста решить эти задачи