Как найти факториал в программе паскаль

Вычисляем факториал числа с помощью Pascal

Добрый день, товарищи!

Сегодня мы будем писать программу, которая найдет нам факториал. Пользователь будет вводить произвольное число ( в разумных пределах, ведь даже факториал 10 уже достигает огромных значений ), а программа – находить все факториалы до этого числа. Делается это очень просто и удобно, поэтому начинаем!

Код программы можно будет скачать с Я.Диска в конце статьи.

1) Переменные

В начале программы находим переменные
В начале программы находим переменные

Нам понадобятся всего 3:

  • Число, которое будет вводить пользователь
  • Счетчик цикла
  • Число факториала

2) Приглашение к вводу числа

В этих строках кода пользователь будет вводить число
В этих строках кода пользователь будет вводить число

Необходимо задать начальное значение переменной факториала, так как иначе она будет равна 0 и все вычисления собьются.

3) Цикл, который найдет факториал

Данный цикл - самый главный в программе
Данный цикл – самый главный в программе

В этом цикле происходит следующие действия:

Цикл крутится заданное пользователем количество раз, а факториал, начиная с 1 умножается на переменную счетчика, после чего выводится результат. Сейчас вам будет продемонстрирована работа программы.

4) Тесты

Как мы можем видеть – тесты успешны, программа находит факториалы.

5) Код программы

Весь код
Весь код

На этом скриншоте вы можете видеть весь код программы, а по ссылке, размещенной ниже – скачать код с Яндекс.Диска:

Скачать код программы с Я.Диска

6) Заключение

Спасибо, что посмотрели эту статью, надеюсь, эта программа оказалась кому-нибудь полезна. Ставьте лайк, подписывайтесь на канал – там можно найти еще много чего на тему программирования.

Вычисляем факториал числа с помощью Pascal

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

По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!

Доброго вам всем здоровьица в эти трудные времена!

Факториал числа 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 серебряный знак498 бронзовых знаков

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.

Факториал числа 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.

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).

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

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! c использованием функции

Program func_2;

Uses crt;

Var
  n, x: integer;

function fact(a: integer): integer;
var
  i, p: integer;
begin
  p := 1;
  for i := 1 to a do
    p := p * i;
  fact := p;
end;

begin
  write('введите  n:');
  readln(n);
  x := fact(n);
  writeln(n, '!=', x);
  readln;
end

Добавить комментарий