program Pr;
var
i, n : Integer;
y : real;
begin
Write('Введите число n : ');
ReadLn(n);
y := 1.0;
i := 2;
while i <= n do begin
y := y + 1.0/i;
i := i + 2;
end;
WriteLn('y равна ', y);
end.
Вычесление последовательности(Pascal)
Напишите решение пожалуста.
Напишите решение пожалуста.[/QUOTE]Такой простой код, будущий кул хакер должен уметь сам написать
Код:
а сам-то. ну, а где y=1-1/2+1/4-1/6 и т.д. у тебя ведь получилось следующее y=1+1/2+1/4+1/6+1/8, так что код надо подправить.
Код:
program Pr;
var
i, n: Integer;
y : real;
fl: Boolean;
begin
Write('Введите число n : ');
ReadLn(n);
y := 1.0;
i := 2;
fl := true;
while i <= n do begin
if fl = true then
y := y - 1.0/i
else
y := y + 1.0/i;
i := i + 2;
fl := not fl;
end;
WriteLn('y равна ', y);
end.
var
i, n: Integer;
y : real;
fl: Boolean;
begin
Write('Введите число n : ');
ReadLn(n);
y := 1.0;
i := 2;
fl := true;
while i <= n do begin
if fl = true then
y := y - 1.0/i
else
y := y + 1.0/i;
i := i + 2;
fl := not fl;
end;
WriteLn('y равна ', y);
end.
fl := -1;
.......
y := y + 1.0/i*fl;
fl := fl * (-1);
Код:
fuction pow(a,b:integer):real;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
y := 1.0;
for i:=1 to n do
y:=y+pow(i,-1)/2*i;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
y := 1.0;
for i:=1 to n do
y:=y+pow(i,-1)/2*i;
одну задачу можно много как решить.
fl := -1;
.......
y := y + 1.0/i*fl;
fl := fl * (-1);[/QUOTE]Можно конечно. Ну если если уж оптимизировать, то почему
fl := fl * (-1);
вместо
fl := -fl; ???
Код:
fuction pow(a,b:integer):real;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
y := 1.0;
for i:=1 to n do
y:=y+pow(i,-1)/2*i;
begin
pow:=exp(a*ln(b));
end;
//теперь считаем y
y := 1.0;
for i:=1 to n do
y:=y+pow(i,-1)/2*i;
одну задачу можно много как решить.[/QUOTE]Если я правильно понял, pow(i, -1) == exp(i*ln(-1));
ln(-1) - сработает?
Кроме этого, если уж так организовать цикл, то нужно
for i:=1 to n/2 do
fl := fl * (-1);
вместо
fl := -fl; ???[/QUOTE]
да я просто не очень знаю паскаль
ln(-1) - сработает?
[/quote]
нет конечно, но очень бы хотелось - забыл про математику.
[quote=Merlin ]
Кроме этого, если уж так организовать цикл, то нужно
for i:=1 to n/2 do[/QUOTE]
а да точно - склероз - страшная штука.
признаю лопухнулся
[quote= Merlin ]почему
fl := fl * (-1);
вместо
fl := -fl; ???[/quote]
может конечно снова ошибаюсь, но по-моему fl:=-fl все равно преобразуется в fl:=fl*(-1), так что разницы не вижу.
[QUOTE=kosfiz]может конечно снова ошибаюсь, но по-моему fl:=-fl все равно преобразуется в fl:=fl*(-1), так что разницы не вижу.[/QUOTE]Не преобразуется. Если все нормально, то будет переведена в ассемблерную команду NEG.
1/n - н-й член последовательности(а не просто число до которого надо по 2 прибавлять в каждом проходе), который определяется так 1/(2*i), где i-номер элемента. т.е. в условии предполагается, что пользователь вводит количество этих элементов и соответственно считается сумма. к тому же если учесть, что прибавляемое к 1 имеет общий вид (-1)^n/(2*i) и преобразовать это к cos(i*pi)/(2*i), то получаем следующий код:
Код:
y:=1;
for i:=1 to n do
y:=y+cos(i*pi)/(2*i);
writeln(y);
for i:=1 to n do
y:=y+cos(i*pi)/(2*i);
writeln(y);
все работает.
[quote=Merlin ]Не преобразуется. Если все нормально, то будет переведена в ассемблерную команду NEG.[/quote]
в асме я не очень силен.