Нужно написать программу вычисления суммы факториалов всех чётных чисел от 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; begin for i:=1 to n do begin p:=p*i; if i mod 2=0 then 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; begin if a=0 then f:=1 else f:=a*f(a-1) end;
begin for n:=2 to 100 do if n mod 2=0 then s:=s+f(n); writeln(s); readln; end.
Большое спасибо тем, кто принимал участие в обсуждение этого топика.
volvo
12.12.2006 22:27
И тебе ЭТОГО достаточно? Ты бы сразу говорил, что тебе не нужно вычислять факториал с точностью до единиц, а достаточно результата 9.333564332617967 * 10^157 (ты представляешь себе, ЧТО это за число? Кстати, хочешь я для интереса приведу здесь точное, до единиц значение нужной тебе суммы?)