Proc35. Описать функцию Fact2($$N$$) вещественного типа, вычисляющую двойной факториал: $$N!! = 1*3*5*…*N$$, если $$N$$ — нечетное; $$N!! = 2*4*6*…*N$$, если $$N$$ — четное ($$N > 0$$ — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях $$N$$). С помощью этой функции найти двойные факториалы пяти данных целых чисел.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
program Proc35; Function Fact2(N:Integer):Real; var i:integer; begin result:=1; while (N>0) do begin Result:=Result*n; dec(n,2); end; end; var N,i:Integer; begin for i:=1 to 5 do begin Write('N :'); Readln(N); Writeln( Fact2(N) ); end; end. |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
program Proc35; Function Fact2(N:Integer):Real; var i:integer; tempRez:Real; begin if odd(N) then i:=1 Else i:=2; tempRez:=i; while (i<N) do begin i:=I+2; tempRez:=tempRez*i; end; Fact2:=tempRez; end; var N,i:Integer; begin for i:=1 to 5 do begin Write('N :'); Readln(N); Writeln( Fact2(N) ); end; end. |
Решение olegst1975:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
program Proc35; function Fact2(n:integer):real; var n1:integer; begin result:=1; for n1:=1 to (n+(n mod 2))div 2 do result:=result*(2*n1-(n mod 2)); end; var i,n:integer; begin for i:=1 to 5 do begin read(n); write(Fact2(n)); end; end. |
Другие задачи из раздела Proc можно посмотреть здесь.
Попытался сделать без сравнения
[/crayon]
result:=result*…
Не думал, что так можно…
В борладн можно использовать только названия функций для передаче значений, а Fact2:=Fact2*… точно нельзя писать…
Понятно, спасибо. Объясняет смысл непонятных переменных здесь и в других задачах. А какой-то расширенный синтаксис типа {$x+} не спасает?
Нет. Это не переменная, в Delphi например при попытке так сделать выдаёт ошибку :
[Error] Project2.dpr(13): Not enough actual parameters
Добавил в шапку.