Нужно написать программу вычисления суммы факториалов всех чётных чисел от 2 до 100, используя подпрограмму для вычисления факториалов.
volvo
6.12.2006 23:48
В поиск... Подпрограмма для вычисления факториалов больших чисел уже выкладывалась на форуме, так же, как и программа для нахождения суммы, которая тебе нужна!
Rocket
8.12.2006 1:40
Программу я написал:
Program FactorialX;
const n=100;
Function sumfact(n:integer):real;
var i:integer; p:real; s:real;
begin
p:=1;
s:=0;
beginfor i:=1to n dobegin p:=p*i;
if i mod2=0then s:=s+p;
end;
end;
sumfact:=s;
end;
begin
writeln('Summa factorialov = ', sumfact(n));
readln;
end.
Но, когда я считаю сумму 100! компилятор выдаёт следующую ошибку: Floating point overflow. Что делать, подскажите.
klem4
8.12.2006 1:47
А ты попробуй сам посчитать 100! и поймешь в чем дело ... очень большое число выходит, в Real оно не поместится
Что тебе нужно делать ? Прочитать пост №2.
Rocket
10.12.2006 20:05
В поиске похужую тему не получилось найти. Подскажите пожайлуста.
Кроме этого, модуль содержит реализацию вычисления факториала, корректно работающую с числами больше 12... Procedure Fact(Var A: TLargeInt; n: LongInt);
Rocket
12.12.2006 22:06
Вот оканчательный вариант программы (решена через рекурсию):
Program FactorilX;
{$N+}var
n:integer; s:double;
function f(a:double):double;
beginif a=0then f:=1else f:=a*f(a-1)
end;
beginfor n:=2to100doif n mod2=0then s:=s+f(n);
writeln(s);
readln;
end.
Большое спасибо тем, кто принимал участие в обсуждение этого топика.
volvo
12.12.2006 22:27
И тебе ЭТОГО достаточно? Ты бы сразу говорил, что тебе не нужно вычислять факториал с точностью до единиц, а достаточно результата 9.333564332617967 * 10^157 (ты представляешь себе, ЧТО это за число? Кстати, хочешь я для интереса приведу здесь точное, до единиц значение нужной тебе суммы?)