IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сумма факториалов
Rocket
сообщение 6.12.2006 18:58
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Нужно написать программу вычисления суммы факториалов всех чётных чисел от 2 до 100, используя подпрограмму для вычисления факториалов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2006 19:48
Сообщение #2


Гость






В поиск... Подпрограмма для вычисления факториалов больших чисел уже выкладывалась на форуме, так же, как и программа для нахождения суммы, которая тебе нужна!
 К началу страницы 
+ Ответить 
Rocket
сообщение 7.12.2006 21:40
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Программу я написал:

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.
Что делать, подскажите.

Сообщение отредактировано: Altair - 12.12.2006 22:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 7.12.2006 21:47
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А ты попробуй сам посчитать 100! и поймешь в чем дело ... очень большое число выходит, в Real оно не поместится

Что тебе нужно делать ? Прочитать пост №2.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rocket
сообщение 10.12.2006 16:05
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В поиске похужую тему не получилось найти.
Подскажите пожайлуста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 10.12.2006 16:10
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Длинная арифметика

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

Цитата
Кроме этого, модуль содержит реализацию вычисления факториала, корректно работающую с числами больше 12...
Procedure Fact(Var A: TLargeInt; n: LongInt);


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rocket
сообщение 12.12.2006 18:06
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вот оканчательный вариант программы (решена через рекурсию):

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.


Большое спасибо тем, кто принимал участие в обсуждение этого топика.

Сообщение отредактировано: Altair - 12.12.2006 22:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 18:27
Сообщение #8


Гость






И тебе ЭТОГО достаточно? Ты бы сразу говорил, что тебе не нужно вычислять факториал с точностью до единиц, а достаточно результата 9.333564332617967 * 10^157 (ты представляешь себе, ЧТО это за число? Кстати, хочешь я для интереса приведу здесь точное, до единиц значение нужной тебе суммы?)
 К началу страницы 
+ Ответить 
Rocket
сообщение 12.12.2006 21:15
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Валяй.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 21:59
Сообщение #10


Гость






Вот эта сумма:
Цитата(Console)
9333564332617971985596018467227020903065654134088304973047398395833383430802345
8451476498346375013246436791749910869210824214880296081688944437945541028258666
 К началу страницы 
+ Ответить 
arhimag
сообщение 12.12.2006 22:04
Сообщение #11


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


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


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 22:08
Сообщение #12


Гость






0.01 секунды, а тебе зачем?
 К началу страницы 
+ Ответить 
arhimag
сообщение 12.12.2006 22:09
Сообщение #13


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


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

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

Сообщение отредактировано: volvo - 12.12.2006 22:11


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 13:56
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"