В книге Алексеев Е. Р., Чеснокова О. В., Кучер Т. В. - Free Pascal и Lazarus(2010), есть пример такой программы:
- Код: Выделить всё
- var a, b, c, d, r, s, t, p, q, ro, fi, x1, x2, x3, u, v, h, g: real;
 begin
 //Ввод коэффициентов кубического уравнения.
 write(‘a=’); readln(a);
 write(‘b=’); readln(b);
 write(‘c=’); readln(c);
 write(‘d=’); readln(d);
 //Расчёт коэффициентов канонического уравнения по x*x*x+r*x*x+s*x+t=0.
 r:=b/a; s:=c/a; t:=d/a;
 //Вычисление коэффициентов приведённого уравнения y*y*y+p*y+q=0.
 p:=(3*s-r*r)/3;
 q:=2*r*r*r/27-r*s/3+t
 //Вычисление дискриминанта кубического уравнения.
 d:=(p/3)*sqr(p/3)+sqr(q/2);
 //Проверка знака дискриминанта,
 //ветка then реализует формулы 3.5,
 //ветка else – формулы 3.4
 if d<0 then
 begin
 ro:=sqrt(-p*p*p/27);
 //Следующие два оператора реализуют расчёт угла fi,
 //сначала вычисляется величина косинуса угла,
 //затем вычисляется его арккосинус через арктангенс.
 fi:=-q/(2*ro);
 fi:= pi/2-arctan(fi/sqrt(1-fi*fi));
 //Вычисление действительных корней уравнения x1, x2 и x3.
 x1:=2*exp(1/3*ln(ro))*cos(fi/3)-r/3;
 x2:=2*exp(1/3*ln(ro))*cos(fi//3+2*pi/3)-r/3;
 x3:=2*exp(1/3*ln(ro))*cos(fi//3+4*pi/3)-r/3;
 writeln(‘x1=’,x1:1:3,’_x2=’,x2:1:3, ’_x3=’,x3:1:3);
 end
 else
 begin
 //Вычисление u и v с проверкой знака
 //подкоренного выражения.
 if –q/2+sqrt(d)>0 then
 u:=exp(1/3*ln(-q/2+sqrt(d)))
 else
 if –q/2+sqrt(d)<0 then
 u:=-exp(1/3*ln(abs(-q/2+sqrt(d))))
 else
 u:=0;
 if –q/2-sqrt(d)>0 then
 v:=exp(1/3*ln(-q/2-sqrt(d)))
 else
 if –q/2-sqrt(d)<0 then
 v:=-exp(1/3*ln(abs(-q/2-sqrt(d))))
 else
 v:=0;
 // Вычисление действительного корня кубического уравнения.
 x1:=u+v-r/3;
 // Вычисление действительной и
 //мнимой части комплексных корней.
 h:=-(u+v)/2-r/3;
 g:=(u+v)/2*sqrt(3);
 writeln(‘x1=’,x1:1:3,’_x2=’,h:1:3,’+i*’,g:1:3,
 ‘_x3=’,h:1:3,’-i*’,g:1:3);
 end
 end.
Вместо цифр 3.4 и 3.5 нужно написать формулы.
А как это сделать я не знаю.
Кто знает ПОДСКАЖИТЕ!!!
P.S. Формулы представлены ниже.




