• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Факториал n

  • Автор темы Автор темы NomadZ
  • Дата начала Дата начала

NomadZ

Новые
Регистрация
14 Дек 2017
Сообщения
18
Реакции
0
Баллы
0
Факториал n

Здравствуйте, помогите пожалуйста с написанием кода для следующего задания на Pascal'е. И если не сложно написать комментарии для дальнейшего разбора программы.
Задача:
 

Вложения

  • 3_2 лаб ЯП.png.webp
    3_2 лаб ЯП.png.webp
    44.8 KB · Просмотры: 171
Легко. Правда, с модулем Math и оператором cell разбирайтесь сами: у меня ничего такого нет, да и не надо (хоть бы Вы написали, что у Вас за реализация Паскаля! Они ведь, знаете ли, разные бывают).
Код:
Var
 Max_Cardinal,j,t:Cardinal;
 i:word;

Function Nfact(n:word):Cardinal;
var
  k:word;
  fact:Cardinal;
begin
 if n=0 then fact:=1 else
  begin
   fact:=1;
   for k:=1 to n do fact:=fact*k;
  end;
 Nfact:=fact;
end;

Begin
 Max_Cardinal:=1;
 for i:=1 to 31 do Max_Cardinal:=Max_Cardinal*2;
 Max_Cardinal:=(Max_Cardinal-1)*2+1;
 Writeln('Max_Cardinal = ',Max_Cardinal);
 i:=0;
 While Nfact(i)<=Max_Cardinal/(i+1) do
  begin
   Inc(i);
   t:=Trunc(Exp(Ln(Nfact(i))/3));
   j:=t-1;
   repeat
    Inc(j);
   until j*j*j-j>=Nfact(i);
   if j*j*j-j=Nfact(i) then
    Writeln(i,'   ',Nfact(i),'   ',j-1,'*',j,'*',j+1);
  end;
 Readln
End.
 
Назад
Сверху