28.10.2009, 20:02
общий
это ответ
Здравствуйте, Иванов Д.И..
Ответы на 7 и 8 в приложении. Каждое задание на факториалы в отдельной программе, вычисление пи в одной программе. По Грегори у меня получилось точней:3,14159166 по Валлису 3,14159097 для n = 1 000 000.
Приложение:
program p173734a;
{
7) Не используя вложенные циклы, вычислить
y=1! – 2!+3! –...+ (-1)n-1n!
}
var
i: integer; { номер члена ряда }
n: integer; { число членов }
a: longint; { член ряда }
y: longint; { n-я частичная сумма ряда }
begin
write('n=');
readln(n);
a:= 1;
y:= 0;
for i:= 1 to n do
begin
y:= y+a;
a:= -a*(i+1); { следующий член }
end;
writeln('y(',n,')=',y);
end.
program p173734b;
{
Дано натуральное число n. Найти двойной факториал n:
n!!=n•(n – 2)•(n – 4)•...
}
var
n: integer; { число членов }
function fact2(n: integer): longint;
begin
if (n=0) or (n=1) then
fact2 := 1
else
fact2 := n*fact2(n-2)
end; { fact2 }
begin
write('n=');
readln(n);
writeln(n,'!!=', fact2(n));
end.
program p173734c;
{
8) Дано натуральное число n. Вычислить число pi, используя:
1) ряд Грегори pi/4=1-1/3+1/5-1/7+..... (n слагаемых);
2) произведение Валлиса pi/2=2/1*2/3*4/3*4/5*6/5*6/7*..... (n сомножителей).
}
var
n: longint; { число членов }
function Gregory(n: longint): real;
var
i: longint;
a: longint;
s: real;
sign: -1..1;
begin
a:= 1;
s:= 0;
sign := 1;
for i:= 1 to n do
begin
s:= s+sign/(a*1.0);
a:= a+2;
sign:=-sign;
end;
Gregory := s;
end; { Gregory }
function Wallis(n: longint): real;
var
w: real;
i: longint;
begin
w:= 1.0;
for i:= 1 to n do begin
if odd(i) then
w := (i+1)*w/i
else
w := i*w/(i+1);
end;
Wallis := w;
end; { Wallis }
begin
write('n=');
readln(n);
writeln('James Gregory pi=', 4*Gregory(n):10:8);
writeln('John Wallis pi=', 2*Wallis(n):10:8);
readln;
end.