Регистрация
11 Авг 2013
Сообщения
72
Репутация
-3
Спасибо
0
Монет
0
Написать алгоритм вычисления факториала числа n при помощи циклов for, repeat, while ПОМОГИТЕ ПОЖАЛУЙСТА
 
Можно в одной программе безо всяких дополнительных функций посчитать три значения факториала n! в трёх различных циклах. Если все три значения одинаковые, тогда это совпадающее значение и выводится: uses crt;
var i, n: integer;
ffor, frepeat, fwhile: int64;
begin
clrscr();
while true do
begin
write('n = ');
readln(n);
if n = 0 then writeln(1)
else
begin
ffor := 1;
for i := 1 to n do ffor := ffor * i;
i := n; frepeat := 1;
repeat
frepeat := frepeat * i;
i := i - 1
until i = 0;
i := 0; fwhile := 1;
while i < n do
begin
i := i + 1;
fwhile := fwhile * i
end;
if (ffor = frepeat) and (frepeat = fwhile)
then writeln(n, '! = ', ffor)
end
end
end. Это FreePascal, в нём при помощи использования стандартного целочисленного типа int64 можно получить точное значение n! для n из диапазона 0 ≤ n ≤ 20 (или приближённое вещественное значение для чуть большего диапазона аргументов факториала). В PascalABC.NET, в котором есть специальный тип больших целых чисел, таких ограничений нет, но я на этом псевдо-паскале не пишу...
 
Держи через аппроксимацию Ланшольца гамма функции #include
#include
#include
#define EPSILON 1e-07

double g = 7;
double n = 9;
double p[] = {
0.99999999999980993,
676.5203681218851,
-1259.1392167224028,
771.32342877765313,
-176.61502916214059,
12.507343278686905,
-0.13857109526572012,
9.9843695780195716e-6,
1.5056327351493116e-7};

std::complex drop_imag(std::complex z) {
if (abs(z.imag())
 
это в гугле есть
 
Вот несколько вариантов решения этой задачи с использованием различных циклов:

Цикл for:
179483826_3ad754a39ebdf049a58785ccefc47691_800.jpg


Цикл repeat:
179483826_534de4be595a51d96e8d155782e7c587_800.jpg


Цикл while:
179483826_46b55e118251d9ca1c108d9b8ed729da_800.jpg

 
Назад
Сверху