Как найти факториал числа на паскале

Факториал числа n — это функция, которая возвращает произведение всех натуральных чисел от 1 до n включительно.

Для обозначения факториала используется восклицательный знак — “!”.
n! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ … ⋅ n
Факториал нуля 0! = 1

Программа для рекурсивного вычисления факториала

Если посмотреть на формулу n! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ … ⋅ n с обратной стороны, то можно заметить, что факториал числа n равен n! = (n — 1)! ⋅ n.
Записав это выражение в виде функции получим — f(n) = f(n-1) ⋅ n.

Код программы:

{$CODEPAGE UTF8}
program FactorialCalc;
var
  result : QWord;
  x : integer;

function Factorial(n : integer) : QWord;
begin
  if (n = 0) or (n = 1) then
    Factorial := 1
  else
    Factorial := Factorial(n - 1) * n;
end;

begin
  writeln('Рекурсивное вычисление факториала');
  write('x = ');
  readln(x);
  result := Factorial(x);
  writeln(x, '!', ' = ', result);
  readln;
end.

В программе использован тип QWord (без знаковое 64-битное число) для получения наибольшего результата. Используя этот тип, можно найти факториал числа до 20, если число больше двадцати, то результат будет с ошибкой.
Если этот тип данных не поддерживается вашим компилятором, вы можете заменить QWord на любой другой целочисельный тип(к примеру integer).

Программа для вычисления факториала в цикле

{$CODEPAGE UTF8}
program Factorial;
var
  k, res : QWord;

function Fact(n : integer) : QWord;
var
  i : integer;
begin
  Fact := 1;
  if n > 0 then
    for i := 1 to n do
      Fact := Fact * i;
end;

begin
  writeln('Вычисление факториала');
  write('Введите целое число от 0 до 20 ');
  readln(k);
  res := Fact(k);
  writeln(k, '!', ' = ', res);
  readln;
end. 

Смотрите также:

Вычислить факториал заданного числа n (n> 0) () — тоесть произведение чисел от 1 до n.

Вот подобное, но у меня не выходит…

Program my;
var 
    i, s: integer; 
    f: longint;
begin
s := 1;
for i := 1 to 20 do
    f := f*i;
    writeln('произведение от 1 до 20 ',f);
    readln;
end.

Grundy's user avatar

Grundy

79.9k9 золотых знаков76 серебряных знаков133 бронзовых знака

задан 23 фев 2012 в 15:18

dadayar's user avatar

1

Потому что вы, как я понимаю, первоначально хотели, чтобы значение факториала содержалось в переменной «s», но позже зачем-то завели переменную «f», которая вообще хранит в себе адрес ячейки памяти, в которой находится (Вы же её не обнулили). Вот функция, возвращающая факториал до «n»:

function factorial(n):integer;
var 
    i,f: integer; 
begin
f:=1;
for i := 1 to n do
    f := f*i;
    result:=f;
end;

Nicolas Chabanovsky's user avatar

ответ дан 23 фев 2012 в 15:39

AseN's user avatar

AseNAseN

13.6k13 золотых знаков60 серебряных знаков122 бронзовых знака

1

Чуток осталось — присвоить начальное значение переменной f. Сейчас она не инициализирована, поэтому итоговое значение равно нулю.

Program my;
var 
    i: integer; 
    f: longint = 1;
begin
    for i := 1 to 10 do
        f := f*i;
    writeln('произведение от 1 до 10 ', f);
end.

ответ дан 23 фев 2012 в 15:40

Nicolas Chabanovsky's user avatar

Nicolas ChabanovskyNicolas Chabanovsky

50.9k81 золотой знак261 серебряный знак499 бронзовых знаков

1

Программа вычисляет факториал положительного числа N:

fact(0) = 1;
fact(n) = fact(n-1)*n;

Решение:
факториал можно вычислять рекурсивно (по формуле, приведенной выше).

program functions_4;
uses crt;
var
  n: integer;
function factorial(m: integer): integer;
var i, f: integer;
begin
  f:=1;
  for i:=1 to m do
    f:=f*i;
  factorial:=f;
end;
begin
  clrscr;
  write('N > '); read(n);
  write(n, '! = ', factorial(n));
  readkey;
end.

Чтобы понять это решение вам пригодится материал по теме «Функции и процедуры в Pascal«.

Другое решение — вычисление факториала в цикле:

Program factorial;
Uses Crt;
Var f,n,i : LongInt;

Begin
	ClrScr;
	Write('Введите n=');readln(n);
	f:=1;
	For i:=1 To n Do f:=f*i;
	Write('Факториал от числа ',n,'! = ',f);
	Readln
End.

Чтобы понять это решение достаточно материала лекции «Циклы в Pascal«.

В данной задаче нам понадобятся 3 переменные. Переменная n будет хранить в себе число вводимое с клавиатуры. Переменная i будет играть роль счетчика для цикла. Переменная f хранит в себе окончательный результат.

Задачу по поиску факториала проще всего решить с помощью цикла for. В начале программы мы вводим число n. После этого присваиваем переменной f значение 1 (для того, чтобы правильно считать произведение). В цикле for считаем значение факториала и заносим его в переменную f.

Допустим, мы ввели число 3 ( n ) , тогда цикл работает так :

1 шаг : 1(f) * 1(i) = 1 ( f )
2 шаг : 1(f) * 2(i) = 2 ( f )
3 шаг : 2(f) * 3(i) = 6 ( f )

Стоит учитывать тот факт, что факториал 9 (девяти) равен 362880, что больше чем в 10 раз превышает максимальное значение для типа Integer (диапазон от -32 768 до +32 767), поэтому в данном примере лучше использовать тип LongInt, диапазон которого от -2147483648 до +2147483647. Если же и этого будет недостаточно, то можно воспользоваться вещественными типами, количество значащих цифр в которых достигает 20.

Вычислить факториал числа

Просмотров 4.5к. Обновлено 8 сентября 2021

Вычислить факториал введенного числа.

Факториалом числа называют произведение всех натуральных чисел до этого числа включительно. Например, факториал числа 4 равен 1*2*3*4 = 24. Записывается факториал так: 4! = 24.

Поскольку факториал резко увеличивается с каждым следующим числом не следует вводить больших чисел.

  1. Присвоим переменной, накапливающей произведение натуральных чисел, начальное значение 1.
  2. Присвоим переменной-счетчику значение 2.
  3. Пока переменная счетчик не достигнет числа, введенного пользователем,
    1. умножать значение переменной, в которой накапливается произведение, на значение переменной счетчика,
    2. увеличивать счетчик на 1.

Pascal

Язык Си

Python

КуМир

Basic-256

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти иголку в одеяле
  • Как можно найти код от почты
  • Как составить текст для рекламного ролика
  • Как исправить косоглазие у ребенка в домашних условиях 14 лет
  • Как найти артефакт the forest

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии