Добрый день, товарищи!
Сегодня мы будем писать программу, которая найдет нам факториал. Пользователь будет вводить произвольное число ( в разумных пределах, ведь даже факториал 10 уже достигает огромных значений ), а программа – находить все факториалы до этого числа. Делается это очень просто и удобно, поэтому начинаем!
Код программы можно будет скачать с Я.Диска в конце статьи.
1) Переменные
Нам понадобятся всего 3:
- Число, которое будет вводить пользователь
- Счетчик цикла
- Число факториала
2) Приглашение к вводу числа
Необходимо задать начальное значение переменной факториала, так как иначе она будет равна 0 и все вычисления собьются.
3) Цикл, который найдет факториал
В этом цикле происходит следующие действия:
Цикл крутится заданное пользователем количество раз, а факториал, начиная с 1 умножается на переменную счетчика, после чего выводится результат. Сейчас вам будет продемонстрирована работа программы.
4) Тесты
Как мы можем видеть – тесты успешны, программа находит факториалы.
5) Код программы
На этом скриншоте вы можете видеть весь код программы, а по ссылке, размещенной ниже – скачать код с Яндекс.Диска:
Скачать код программы с Я.Диска
6) Заключение
Спасибо, что посмотрели эту статью, надеюсь, эта программа оказалась кому-нибудь полезна. Ставьте лайк, подписывайтесь на канал – там можно найти еще много чего на тему программирования.
Данный человек всегда открыт для обсуждения контента и общения с подписчиками, если найдутся какие либо вопросы то я обязательно постараюсь ответить на них.
По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!
Доброго вам всем здоровьица в эти трудные времена!
Факториал числа 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♦
79.9k9 золотых знаков76 серебряных знаков133 бронзовых знака
задан 23 фев 2012 в 15:18
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;
ответ дан 23 фев 2012 в 15:39
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 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