В задании Proc34 решаем задачу о нахождении факториала числа, Proc35 - двойного факториала, а в Proc36 описываем функцию для вычисления чисел Фибоначчи.
Proc34. Описать функцию Fact(N) вещественного типа, вычисляющую значение факториала N! = 1·2·…·N (N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти факториалы пяти данных целых чисел.
{ Функция возвращает значение факториала N! = 1·2·…·N }
function Fact(N: byte): real;
var
i: byte;
f: real;
begin
f := N; //начальное значение факториала
{ Для вычисления фактоиала N надо перемножить числа от N до 2: }
for i := N downto 3 do
f := f * (i - 1);
Fact := f;
end;
{ Основная программа }
var
N, count: byte;
begin
{ По условию задачи надо вычислить факториалы 5 чисел: }
for count := 1 to 5 do begin
write('N = ');
readln(N);
writeln(' ', N, '! = ', Fact(N)); //вызываем функцию
writeln;
end;
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 * * *
Другой способ написания процедуры для вычисления факториала числа N. В отличие от предыдущего метода, здесь в цикле for индексация идет по возрастанию (от 2 до N).
{ Функция возвращает значение факториала N! = 1·2·…·N }
function Fact(N: byte): real;
var
i: byte;
f: real;
begin
f := 1;
for i := 2 to N do f := f * i;
Fact := f
end;
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Сравните эту программу с задачей For19, где тоже рассматривается вычисление факториала числа, но только без процедур.
Proc35. Описать функцию Fact2(N) вещественного типа, вычисляющую двойной факториал:
|N!! = 1·3·5·…·N, если N – нечетное;
N!! = 2·4·6·…·N, если N – четное|
|--------------------------------------------------------------------------|
(N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти двойные факториалы пяти данных целых чисел.
{ Функция возвращает значение двойного факториала:
N!! = 1·3·5·…·N, если N — нечетное;
N!! = 2·4·6·…·N, если N — четное }
function Fact2(N: byte): real;
var
i: byte;
f2: real;
begin
f2 := N; //начальное значение двойного факториала
i := N; //начальный множитель в факториале
while i > 3 do begin
i := i - 2; //множитель уменьшаем на 2
f2 := f2 * i; //находим факториал
end;
Fact2 := f2
end;
{ Основная программа }
var
N, count: byte;
begin
for count := 1 to 5 do begin
write('N = ');
readln(N); //вводим число
writeln(' ', N, '!! = ', Fact2(N)); //вычисляем факториал
writeln;
end;
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните программу Proc35 с задачей While6.
Proc36. Описать функцию Fib(N) целого типа, вычисляющую N-й элемент последовательности чисел Фибоначчи FK, которая описывается следующими формулами:
F1 = 1, F2 = 1, FK = FK−2 + FK−1, K = 3, 4, … .
Используя функцию Fib, найти пять чисел Фибоначчи с данными номерами N1, N2, …, N5.
{ Функция возвращает N-й элемент последовательности чисел
Фибоначчи FK, которая описывается следующими формулами:
F1 = 1, F2 = 1, FK = FK−2 + FK−1, K = 3, 4, … }
function Fib(N: byte): integer;
var
F1, F2, FK, f: integer;
K: byte;
begin
if N in [12] then f := 1 //для N, равных 1 или 2, имеем 1
else begin
F1 := 1; //первый элемент
F2 := 1; //второй элемент
K := 2; //начальный номер элемента
repeat
inc(K); //увеличиваем номер на 1
f := F1 + F2; //находим K-й элемент Фибоначчи
F1 := F2; //(K-2)-й элемент заменяем на (K-1)-й
F2 := f; //а (K-1)-й элемент заменяем на K-й
until K = N //выходим, если номер элемента равен N
end;
Fib := f
end;
{ Основная программа }
const
Q = 5; //количество вводимых чисел
var
N, i: byte;
begin
for i := 1 to Q do begin
write('N', i, ' = '); //запрашиваем ввод N (с приставкой i)
readln(N); //вводим число
writeln(' ', N, '-й элемент: ', Fib(N)); //результат
writeln;
end
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните Proc36 со следующими задачами: While24, For33 и Array5.