|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.02.2008, 23:53 | #1 |
Новичок
Джуниор
Регистрация: 13.02.2008
Сообщений: 1
|
вычислить по формуле с использованием функции или процедуры
Завтра преподу надо сдать задачу на паскале...помогите сделать!Надо вычислить по формуле n!/(m!*(n-m)!) с использованием функции или процедуры(они должны высчитывать факториал), причем так что бы без использования double и extended типов вычислялся факториал больших чисел!Препод говорил что это основано на методе что 40!=30!*31*32...*40!Помогите плз
|
14.02.2008, 10:05 | #2 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
Код:
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
22.02.2008, 10:16 | #3 |
Форумчанин Подтвердите свой е-майл
Регистрация: 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. данный алгоритм называется рекурсией, то есть когда функция вызывает сама себя. |
26.03.2008, 21:57 | #4 |
Участник клуба
Регистрация: 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, который и есть факториал определенного числа, после чего цикл повторяется. |
14.05.2008, 17:45 | #5 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
какой-то очень сложный алгоритм для вичсления факториала))
|
14.05.2008, 18:21 | #6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
А ты попробуй проще получить 100!
|
17.05.2008, 20:51 | #7 |
Форумчанин
Регистрация: 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. |
10.06.2008, 10:18 | #8 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
26.03.2008, 20:57
Gorychev ты не из МНТУ случайно? =))) Такая же задача попалась, с точностью до номера
пыщь
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дано действительное число а. Вычислить 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 |