И продолжение после Decorator
Процедура для нахождения точного значения факториала числа.
procedure TForm1.bbRunClick(Sender: TObject); //обработка события от мыши
var //это раздел указания переменных
result: string; //переменная result целого типа
M: array of integer;
//"M"- это матрица, или массив, причем динамический, то есть его размеры можно
F, i, j, k, n: integer;
//изменять, это увеличивает время выполнения программы, но интересно попробовать
begin
if med.text = '' then
med.text := '0'; //свойство text компонента med проверяется на наличие
n := StrToInt(Trim(MEd.Text));
//введенного числа, StrToInt-преобразование строки в число
if n < 4 then
exit; //trim-удаление пробелов из строки
PB.Max := (n + sqr(n)); //Это определение размеров PB
PB.Position := 0;
screen.Cursor := crHourGlass;
//появляется новый курсор, стандартный "виндовский"
setLength(M, 2); //определение границ массива
M[0] := 1; //присвоение 0-ому элементу массива М значения 1....
M[1] := 0;
k := 1;
for i := 1 to n do
begin
F := 0;
PB.StepBy(i * 2); //изменение показаний PB
for j := 0 to k do
begin
SetLength(M, k + 1);
M[j] := M[j] * i + F; //здесь основная идея программы
if (M[j] div 10) > 0 then
k := k + 1;
F := M[j] div 10;
M[j] := M[j] mod 10;
end;
end;
for i := k downto 0 do //перебор целых значений от k до 0
begin
if M > 0 then
break;
if M = 0 then
k := k - 1;
end;
SetLength(M, k); //изменение размеров массива М до кол-ва элементов-k
Result := '';
for j := k downto 0 do
Result := Result + IntToStr(M[j]);
mmOutput.Lines.Add(IntToStr(n) + '! = ' + result);
//добавление результата в редактор Memo(mmOutput)
if n6.Checked = true then
mmoutput.Lines.Add('В этом числе ' + IntToStr(length(result)) + ' цифр. ');
M := nil; //освобождение памяти IntToStr-преобразование числа в строку
screen.Cursor := crDefault; //смена курсора
Med.Text := '';
Med.SetFocus; //передача фокуса ввода компоненту med
end;
Другие языки программирования и технологии
Посчитань N!(фактариал)
int Factorial(int n)
{
if (n < 0)
return 0;
if (n < 2)
return 1;
int nRet = 1;
for (int i = 2; i <= n; i++)
{
nRet *= i;
}
return nRet;
}
{
if (n < 0)
return 0;
if (n < 2)
return 1;
int nRet = 1;
for (int i = 2; i <= n; i++)
{
nRet *= i;
}
return nRet;
}
DELPHI
{
The factorial of a positive integer is defined as:
n! = n*(n-1)*(n-2)*(n-3)*...*2*1
1! = 1
0! = 1
Example: 5! = 5*4*3*2*1
}
// Итерация:
function FacIterative(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to n do f := f * i;
Result := f;
end;
// рекурсия
function FacRecursive(n: Word): LongInt;
begin
if n > 1 then
Result := n * FacRecursive(n-1)
else
Result := 1;
end;
{
The factorial of a positive integer is defined as:
n! = n*(n-1)*(n-2)*(n-3)*...*2*1
1! = 1
0! = 1
Example: 5! = 5*4*3*2*1
}
// Итерация:
function FacIterative(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to n do f := f * i;
Result := f;
end;
// рекурсия
function FacRecursive(n: Word): LongInt;
begin
if n > 1 then
Result := n * FacRecursive(n-1)
else
Result := 1;
end;
Открываешь эксель, Вставка-Функция.. . Пишешь в найти "факториал" и печатаешь число, факториал которого тебе надо вычислить...
Похожие вопросы
- Алгоритм быстрого фактариала.
- Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
- выдает ошибку неверная вещественная операция при выполнении действия: s:=round(s/n);
- Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN
- Паскаль. Представить натуральное число n в виде суммы трёх квадратов натуральных чисел.
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- C++.Обычная задача : найти кол-во пар (x,y) , удовлетворяющих условию X^2+Y^2<N. Помогите оптимизировать.
- Найти все такие простые числа, не превосходящие заданного N, двоичная запись которых представляет собой симметричную
- C++ Как изменить программу, чтобы после каждого заданного символа вставлялся (не заменялся) символ "\n".
- Есть код который находит простые числа. Почему мы проверяем "d*d <= n" ?