Pascal. Факториал

Ответить
Den4ik
Сообщения: 8
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

Напишите пожалуйста прогу для вычисления факториала из 16. Используя стеки и очереди.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

F16 = 20922789888000 ;)
It's a long way to the top if you wanna rock'n'roll
Den4ik
Сообщения: 8
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

Я и сам знаю что 16!=20922789888000. :)
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Зачем тогда писать бесполезную программу, если это число вычисляется всего один раз?
It's a long way to the top if you wanna rock'n'roll
Den4ik
Сообщения: 8
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

Эта задача по практике, если я ее не сдам тогда меня не допустят к экзаменам.
Я не знаю как работать с очередями, т.к . пропустил эту тему во время семестра.
Если можете помогите горе студенту с программой.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Юзайте поиск в разделе "Алгоритмы", там лежит функция вычисления факториала. Ее надо только немного видоизменить
It's a long way to the top if you wanna rock'n'roll
Den4ik
Сообщения: 8
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

Я написал программу если можете проверьте и еще помогите написать к ней описание, а то у меня нет времяни скоро экзамен.

program asd;


type EXO = ^ O;
O = record
Data: longint;
Next: EXO;
end;

var BeginO, EndO: EXO;
summ,k,t,i:longint;

procedure writeO(var BeginO, EndO : EXO; c:longint);
var u : EXO;
Begin
new(u);
u^.Data := c;
u^.Next := Nil;
if BeginO = Nil then BeginO := u else EndO^.Next := u;
end;

procedure readO(var BeginO, EndO : EXO; var c:longint);
var u:EXO;

function FreeO(x1:EXO) : boolean;
begin
FreeO := (x1=Nil);
end;
begin
if FreeO(BeginO) then writeln('Free') else
begin
c:=BeginO^.Data;
u := BeginO;
BeginO := BeginO^.Next;
dispose(u);
end;
end;

begin
write('Please, enter numb: ');
readln(t);
if t > 16 then
begin
writeln('t > 16. Exit!');
readln;
halt(1);
end;
summ:=1;
for i:=1 to t do
begin
writeO(BeginO,EndO,i);
readO(BeginO,EndO,k);
summ:=summ*k;
end;
writeln('Summ: ',summ);
readln;
end.
Ответить