Glareone
15-07-2010, 15:28
простая задача на решение уравнения с заданной точностью.
Но корректно работает не всегда. Написал 2 разных кода на паскаль, решил на черновике-все должно сходиться,а понять где ошибка не могу.
Само уравнение:
Y = 1 – X / 2 + (1*3*X^2) / (2*4) – (1*3*5*X^3) / (2*4*6) + (1*3*5*7*X^4) / (2*4*6*8) – ...
program run1;
uses crt;
var q,up_k,k1,k2,znak :integer;
var x,y,x_st,eps,slag :real;
begin
writeln('write X and eps');
read(x,eps);
znak:=-1;
x_st:=x*x; {otvechaet za stepen x}
k1:=1; {mnojitel #1}
k2:=2; {mnojitel #2}
slag:=0; {slagaemoe}
up_k:=2; {uvelichenie mnojiteley}
y:=(1-x)/2;
repeat
znak:=znak*(-1); {otvechaet za znak slagaemogo}
slag:=(znak*k1*(up_k+1)*x_st)/(k2*(up_k+2)); {podschet ocherednogo slagaemogo}
y:=y+slag; {osnovnoe uravnenie}
x_st:=x_st*x; {//otvechaet za stepen X}
k1:=k1*(up_k+1); {otvechaet za mnojitel pri X, uvelichivaetsya}
k2:=k2*(up_k+2); {otvechaet za chastnoe, uvelichivaetsya }
up_k:=up_k+2;
until abs(slag)<eps; {uslovie cikla}
writeln('zaversheno!');
writeln('y= ',y); {vivod}
read(q);
end.
Но корректно работает не всегда. Написал 2 разных кода на паскаль, решил на черновике-все должно сходиться,а понять где ошибка не могу.
Само уравнение:
Y = 1 – X / 2 + (1*3*X^2) / (2*4) – (1*3*5*X^3) / (2*4*6) + (1*3*5*7*X^4) / (2*4*6*8) – ...
program run1;
uses crt;
var q,up_k,k1,k2,znak :integer;
var x,y,x_st,eps,slag :real;
begin
writeln('write X and eps');
read(x,eps);
znak:=-1;
x_st:=x*x; {otvechaet za stepen x}
k1:=1; {mnojitel #1}
k2:=2; {mnojitel #2}
slag:=0; {slagaemoe}
up_k:=2; {uvelichenie mnojiteley}
y:=(1-x)/2;
repeat
znak:=znak*(-1); {otvechaet za znak slagaemogo}
slag:=(znak*k1*(up_k+1)*x_st)/(k2*(up_k+2)); {podschet ocherednogo slagaemogo}
y:=y+slag; {osnovnoe uravnenie}
x_st:=x_st*x; {//otvechaet za stepen X}
k1:=k1*(up_k+1); {otvechaet za mnojitel pri X, uvelichivaetsya}
k2:=k2*(up_k+2); {otvechaet za chastnoe, uvelichivaetsya }
up_k:=up_k+2;
until abs(slag)<eps; {uslovie cikla}
writeln('zaversheno!');
writeln('y= ',y); {vivod}
read(q);
end.