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

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

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

Автор: Rocket 6.12.2006 22:58

Нужно написать программу вычисления суммы факториалов всех чётных чисел от 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

В поиске похужую тему не получилось найти.
Подскажите пожайлуста.

Автор: klem4 10.12.2006 20:10

http://forum.pascal.net.ru/index.php?showtopic=2428&hl=%F4%E0%EA%F2%EE%F0%E8%E0%EB%EE%E2+%E1%EE%EB%FC%F8%E8%F5+%F7%E8%F1%E5%EB

Внизу модуль Volvo для работы с большими числами

Цитата
Кроме этого, модуль содержит реализацию вычисления факториала, корректно работающую с числами больше 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 (ты представляешь себе, ЧТО это за число? Кстати, хочешь я для интереса приведу здесь точное, до единиц значение нужной тебе суммы?)

Автор: Rocket 13.12.2006 1:15

Валяй.

Автор: volvo 13.12.2006 1:59

Вот эта сумма:

Цитата(Console)
9333564332617971985596018467227020903065654134088304973047398395833383430802345
8451476498346375013246436791749910869210824214880296081688944437945541028258666

Автор: arhimag 13.12.2006 2:04

долгол программа считала?

Автор: volvo 13.12.2006 2:08

0.01 секунды, а тебе зачем?

Автор: arhimag 13.12.2006 2:09

мой варинат работал 3,5 секунды sad.gif надо апгрейтить свой модуль

А может, компьютер тебе Upgrade-ить надо smile.gif