Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2008, 23:53   #1
St@FFord
Новичок
Джуниор
 
Регистрация: 13.02.2008
Сообщений: 1
По умолчанию вычислить по формуле с использованием функции или процедуры

Завтра преподу надо сдать задачу на паскале...помогите сделать!Надо вычислить по формуле n!/(m!*(n-m)!) с использованием функции или процедуры(они должны высчитывать факториал), причем так что бы без использования double и extended типов вычислялся факториал больших чисел!Препод говорил что это основано на методе что 40!=30!*31*32...*40!Помогите плз
St@FFord вне форума Ответить с цитированием
Старый 14.02.2008, 10:05   #2
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
begin
readln(n,m);
p:=1;
c:=1;
for i:=1 to m do
begin
p:=p*i;
c:=c*(n-i+1);
end;
s:= c div p;
writeln(s);
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 22.02.2008, 10:16   #3
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

program factorial;
var
i, n: integer;
function Fact(n: integer): integer;
var
begin
if n= 1 then
Fact:= 1
else
Fact := n*Fact(n-1);
end;
begin
readln(n);
writeln(Fact(n));
readln;
end.
данный алгоритм называется рекурсией, то есть когда функция вызывает сама себя.
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 26.03.2008, 21:57   #4
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Задача №3.7
Написати програму, що дозволяє отримати послідовність десяткових цифр числа 100!.

Текст программы.
program factorial;
uses crt;
const n = 256;
type tnum = array [1..n] of byte;
var num1, num2, rez, rez2 : tnum;
nn,i,tn,aud,per,a1,r,sum,dlin1,dlin 2,dmax : byte; pr: boolean;

begin
clrscr; num1[1]:=1; dmax:=1;

for tn:=1 to 99 do { начало цикла }
begin
dlin1:=0; dlin2:=0; pr:=true;
num2[1]:= tn mod 10; {заполнение массива num2}
num2[2]:= tn div 10;

if tn>9 then r:=2 else r:=1;
for nn:=1 to r do {умножение num1 на num2}
begin
per:=0;
for i:=1 to dmax+1 do
begin
aud:= num1[i]*num2[nn]+per; a1:=aud;

if aud<10 then per:=0
else
begin aud:=aud mod 10;
per:=a1 div 10;
end;

if nn=1 then
begin
rez[i]:=aud; inc(dlin1)
end
else begin rez2[i+1]:=aud; inc(dlin2); end;
end;
end;

if dlin1>dlin2 then dmax:=dlin1+1 else dmax:=dlin2+1;
per:=0;
for i:=1 to dmax do {сложение rez и rez2}
begin
sum:=rez[i]+rez2[i]+per;
if sum<10 then per:=0
else begin sum:=sum-10; per:=1; end;
num1[i]:=sum; {факториал}
end;

writeln; writeln;
write(tn, '!= '); {вывод результата}
for i :=dmax downto 1 do
begin
if (num1[i]<>0) and (pr=true) then pr:=false;
{не печатаем лишние нули}
if not pr then write(num1[i]);
end;
end; {в начало цикла}

pr:=true; { 100! }
if tn=99 then
begin
num2[1]:=0; num2[2]:=0;
writeln; writeln; {вывод результата}
write(tn+1, '!= ');
for i :=dmax+2 downto 3 do num2[i+2]:=num1[i];
for i :=dmax downto 1 do
begin
if (num2[i]<>0) and (pr=true) then pr:=false;
{не печатаем лишние нули}
if not pr then write(num2[i]);
end;
end;
readln;
end.

Описание алгоритма.
Массивы num1, num2 – начальные значения умножаемых чисел. Результат умножения – массивы rez и rez2, которые суммируются между собою и записывают результат в массив num1, который и есть факториал определенного числа, после чего цикл повторяется.
Gorychev вне форума Ответить с цитированием
Старый 14.05.2008, 17:45   #5
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

какой-то очень сложный алгоритм для вичсления факториала))
|{ot вне форума Ответить с цитированием
Старый 14.05.2008, 18:21   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А ты попробуй проще получить 100!
puporev вне форума Ответить с цитированием
Старый 17.05.2008, 20:51   #7
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Недавно написал програмульку, которая вычисляет до 18000 факториал.
Вот эта - немного урезаная, считает чуть больше 100! :

uses crt;

var mas : array [1..165] of byte;
i ,j ,n ,k : byte;
st : string[3];

procedure mx ( a : word );
var buf : word;
zaluwok : word;
begin
zaluwok:=0;
for j:=n downto 3 do begin
buf:=mas[j];
buf:=buf*a+ zaluwok;
zaluwok:=buf div 10;
buf:=buf mod 10;
mas[j]:=buf;
end;
mas[1]:=zaluwok div 10;
mas[2]:=zaluwok mod 10;
end;

procedure nol;
begin
if mas[1]<>0 then begin
for j:=n downto 1 do mas[j+1]:=mas[j];
mas[1]:=0;
inc(n);
end;
if mas[2]<>0 then begin
for j:=n downto 2 do mas[j+1]:=mas[j];
mas[2]:=0;
inc(n);
end;
end;

begin

write('vvedite 4islo: ');
read(i);

str(i,st);
n:=length(st);

mas[1]:=1;

nol;

for k:=2 to i do
begin
mx(k);
nol;
end;

if i>=10 then n:=n-1;

write(i,'!=');

for k:=3 to n do write(mas[k]);

readkey;

end.
|{ot вне форума Ответить с цитированием
Старый 10.06.2008, 10:18   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

26.03.2008, 20:57
Gorychev ты не из МНТУ случайно? =))) Такая же задача попалась, с точностью до номера
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано действительное число а. Вычислить f(a) для функции f(x) Artem1987 Помощь студентам 11 11.11.2010 09:51
Процедуры и функции V25 Паскаль, Turbo Pascal, PascalABC.NET 1 17.11.2008 20:02
Программа с использованием функции Cartman18 Помощь студентам 1 10.12.2007 16:29
DLL + Процедуры(не функции) LEKA Общие вопросы Delphi 1 02.05.2007 20:37
Вычислить приближенное значение функции Бесселя IsapS Паскаль, Turbo Pascal, PascalABC.NET 5 17.01.2007 10:09