Как написать на лазарусе программу, которая решает кубические уравнения?
Ответы
Q:=(a*a-3*b)/9;
R:=(2*a*a*a-9*a*b+27*c)/54;
S:=Q*Q*Q-R*R;
if S>0
then begin
n:= (arccos(R/sqrt(a*a*a)))/3;
x1:=-2*sqrt(Q)*cos(n) - a/3;
x2:=-2*sqrt(Q)*cos(n + (2*Pi)/3) - a/3;
x3:=-2*sqrt(Q)*cos(n - (2*Pi)/3) - a/3;
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(x2) + #13 + 'X3 = ' + FloatToStr(x3);
end;
if (S<0) and (Q>0)
then begin
n:=(arch((abs(R)/sqrt(Q*Q*Q))))/3;
x1:=-2*sgn(R)*sqrt(Q)*ch(n)-a/3;
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(sgn(R)*sqrt(Q)*ch(n)) + 'i' + FloatToStr(sqrt(3)*sqrt(Q)*sh(n)) +
#13 + 'X3 = ' + FloatToStr(sgn(R)*sqrt(Q)*ch(n)) + '-i' + FloatToStr(sqrt(3)*sqrt(Q)*sh(n));
end;
if (S<0) and (Q<0)
then begin
n:=(arch((abs(R)/sqrt(abs(Q*Q*Q)))))/3;
x1:=-2*sgn(R)*sqrt(abs(Q))*ch(n)-a/3;
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(sgn(R)*sqrt(abs(Q))*ch(n)) + 'i' + FloatToStr(sqrt(3)*sqrt(abs(Q))*sh(n)) +
#13 + 'X3 = ' + FloatToStr(sgn(R)*sqrt(abs(Q))*ch(n)) + '-i' + FloatToStr(sqrt(3)*sqrt(abs(Q))*sh(n));
end;
if (S<0) and (Q=0)
then begin
x1:=PowerFn(c-((a*a*a)/27),1/3);
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr((-a + x1)/2) + 'i/2' + FloatToStr(sqrt(abs((a-3*x1)*(a+x1)-4*b))) +
#13 + 'X3 = ' + FloatToStr((-a + x1)/2) + '-i/2' + FloatToStr(sqrt(abs((a-3*x1)*(a+x1)-4*b)));
end;
if S=0
then begin
x1:=-2*PowerFn(R,1/3) - a/3;
x2:=PowerFn(R,1/3) - a/3;
Memo1.Text:='X1 = ' + FloatToStr(x1) +
#13 + 'X2 = ' + FloatToStr(x2) +
#13 + 'X3 = ' + FloatToStr(x3);
end;