Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ факториал

Автор: medved777 18.01.2007 14:54

Помогите пожалуйста, исправить программу. Очень прошу! Только, извиняюсь, но не смогла вставить теги.

Условия :Вычислить пpиближенное значение бесконечной суммы, суммируя n первых членов ряда. Для получения суммы членов ряда следует использовать реккурентную формулу для получения следующего члена ряда через предыдущий.
Найти S (при к от 0 до бескончности) = (-1)^2k/(k^2+1)!


 program pr1;
var S,R,e:real;
k:integer;
begin
writeln('vvod stepeni tochnosty');
readln(e);
S:=1; K:=2; r:=1/2;
while r>=e do
begin
R:=R*(1/sqr(k)+1)*(sqr(k))*(sqr(k)-1);
S:=S+R;
k:=k+1;
end;
writeln('S= ',S);
end.

Автор: hiv 18.01.2007 17:12

Цитата(medved777 @ 18.01.2007 10:54) *
Код
R:=R*(1/sqr(k)+1)*(sqr(k))*(sqr(k)-1);
Проблема не с программой а с твоей математикой! Чему будет равно отношение S(k+1)/S(k) ? Ну никак не тому что ты запрограммировала (см. строку что я привел). Используй эту формулу: (n+k)! = n!*(n+1)*(n+2)*...*(n+k-1)*(n+k)

Автор: medved777 19.01.2007 12:04

Эту формулу мне учительница по пограммированию вывела. Возможно, я просто так дубово условия задачи написала. Думаю, что проблема все-таки в программе. Когда я ввожу степень точности, программа выдает ошибку. Пожалуйста помогите!

Автор: Lapp 19.01.2007 13:40

hiv прав, у тебя проблема с вычисление формулы. Лучше считай факториал явно в цикле и запоминай в отдельную переменную.
Вот, примерно так:

var
S,R,e,F:real;
i,k:integer;
begin
writeln('vvod stepeni tochnosty');
readln(e);
S:=1; K:=1; r:=1;
F:=1;
while r>=e do begin
for i:=Sqr(k-1)+2 to Sqr(k)+1 do F:=F*i;
R:=R/F;
S:=S+R;
k:=k+1;
end;
writeln('S= ',S);
end.

Автор: medved777 19.01.2007 16:02

Большое-пребольшое спасибо!