Вычисление факториала на Pascal

Программирование Программирование на Pascal Вычисление факториала на Pascal

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 год, 2 мес. назад.

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #3757

    Программа вычисляет факториал положительного числа 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.

Просмотр 1 сообщения - с 1 по 1 (всего 1)

Для ответа в этой теме необходимо авторизоваться.