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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2009, 19:14   #1
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию Функция вычисления факториала (Паскаль))

Написать функцию вычисления факториала. С помощью подпрограммы вычислить 5!, 12!, 17!.

Помогите пож-та!
Doublefaced вне форума Ответить с цитированием
Старый 23.09.2009, 19:38   #2
werder_ua
 
Аватар для werder_ua
 
Регистрация: 16.04.2009
Сообщений: 8
По умолчанию

Код:
function f(x:integer):ieteger;
var i,n:integer;
begin
n:=1;
for i:=1 to x do
begin
n:=n*i;
end;
f:=n;
end;

Последний раз редактировалось Stilet; 24.09.2009 в 09:29.
werder_ua вне форума Ответить с цитированием
Старый 23.09.2009, 19:44   #3
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Цитата:
Сообщение от werder_ua Посмотреть сообщение
function f(x:integer):ieteger;
var i,n:integer;
begin
for i:=1 to x do
begin
n:=n*i;
end;
f:=n;
end;
И что это?

17! не влезет в интежер.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 23.09.2009, 19:56   #4
werder_ua
 
Аватар для werder_ua
 
Регистрация: 16.04.2009
Сообщений: 8
По умолчанию

можно взять тип longint.

longint тож не буде канати. Надо взять тип которий будет больше longint.
в делфі можно попробовать тип int64, а в паскале ???????

Последний раз редактировалось Stilet; 24.09.2009 в 09:30.
werder_ua вне форума Ответить с цитированием
Старый 24.09.2009, 12:31   #5
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Цитата:
в делфі можно попробовать тип int64, а в паскале ???????
Можно extended. В данном случае использование именно целого типа не критично.
megachuhancer вне форума Ответить с цитированием
Старый 24.09.2009, 21:00   #6
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Нашел решение
Код:
program Project457;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var o,n:integer;

function fact(n:integer):longint;
begin
if n=1 then fact:=1
         else fact:=fact(n-1)*n;
end;

begin
write('vvedi chislo: ');
readln(n);
o:=fact(n);
writeln('otvet:', o);
readln;
end.
Только опять же 17! неправильно считает.

Последний раз редактировалось Doublefaced; 24.09.2009 в 21:43.
Doublefaced вне форума Ответить с цитированием
Старый 24.09.2009, 22:53   #7
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

Код:
program pr(input,output);
uses crt; {$I-}
const kol = 10000;

var a:array[0..kol] of integer;
m,prov,old,i,n:integer;
c:char;

procedure faktor(var n:integer);
var m,j,i,prom1,prom2:integer;
begin
j:=1;
prom1:=0;
for j:=1 to n do
for i:=1 to m do begin
prom2:=a[i]*j+prom1;
a[i]:=prom2 mod 10;
prom1:=prom2 div 10;
end;
if prom1>0 then begin
inc(m);
a[m]:=prom1;
end;
end;

begin
old:=TextAttr;
repeat
textattr:=blue;
clrscr;
gotoxy(10,5);
write('Vvedite n ');
readln(n);
if n=0 then begin
textattr:=green;
clrscr;
gotoxy(8,7);
writeln('result=','1');
end;
prov:=ioresult;
if prov>0 then begin
textattr:=red;
clrscr;
gotoxy(10,8);
write('Owibka! Vvedite drygoe n');
readkey
end
else
begin
m:=kol;
for i:=1 to m do a[i]:=0;
a[1]:=1;
faktor(n);
while a[m]=0 do
m:=m-1;
textattr:=green;
clrscr;
gotoxy(8,7);
write('result=');
for i:=m downto 1 do
write(a[i]);
readln
end;
clrscr;
textattr:=white;
gotoxy(13,10);
write('Do you want to leave this program Y/N?');
c:=readkey;
until (c='y') or(c='Y');
textattr:=old;
clrscr;
end.
kakawkin вне форума Ответить с цитированием
Старый 25.09.2009, 10:49   #8
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Цитата:
Только опять же 17! неправильно считает.
На самом деле твоя программа и 13! уже неправильно считает.
Но судя по
Цитата:
Код:
...
{$APPTYPE CONSOLE}

uses
  SysUtils;
...
можно предположить, что ты пишешь на Delphi, а значит можешь использовать int64 и не париться.

kakawkin, для 17! нет смысла писать длинную арифметику, т.к. даже в TP можно тупо использовать вещественный тип. Но зато с помощью твой программы можно посчитать большие факториалы, если надо. Но сейчас вроде не надо.
megachuhancer вне форума Ответить с цитированием
Старый 25.09.2009, 11:00   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Ну можно применить индейскую хитрость и воспользоваться табличным методом. Факториал по сути что? Константа. Вот и забейте в строковой массив числа, че их считать каждый раз - медленно и не уютно, длинные арифметики, в диапазон не уложитесь и пр. Ну скажем факториал до 100. Пользователь вводит номер элемента массива (например факториал 17!), а вы с 17-го элемента массива выводите ответ. Дешево и сердито.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2009, 11:17   #10
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Utkin, первоначальной задачей было написать функцию вычисления факториала, а не программу, которая выдает факториал заданного числа, всё равно каким способом его получая.

[Оффтоп.] А так вообще - хороший способ, я сам им пользовался, например, когда в какой-то задаче(олимпиадной) требовалось рассчитать дружественные числа, а ограничение по времени было жестким, то сначала я реализовал медленный алгоритм, ждал минут 10, пока всё посчитается, а потом забил таблицу с результатами в решение. Помогает .
megachuhancer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление факториала (Pascal) DsDevis Помощь студентам 8 09.12.2010 18:56
(паскаль) Обработка кв. матрицы. Программа есть. Не корректно работает функция SUM.. aslanbek999 Помощь студентам 3 02.06.2009 19:51
функция вычисления сред.арифм и сред.геометр Demigoddess Общие вопросы C/C++ 2 15.05.2009 20:24
Паскаль,функция и множество pavlentus Помощь студентам 4 20.04.2009 20:39
Си, вычисление факториала ManInBlack Помощь студентам 2 07.03.2009 00:50