unit Lsolution4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Button1: TButton; Label17: TLabel; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure Edit4KeyPress(Sender: TObject; var Key: Char); procedure Edit5KeyPress(Sender: TObject; var Key: Char); procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit4Change(Sender: TObject); procedure Edit5Change(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation procedure Sqr2(a, b, c: real; var Re1,Im1,Re2,Im2: real); begin if (b*b-4*a*c>0) or (b*b-4*a*c=0) then begin Re1:= (-b+Sqrt(b*b-4*a*c))/(2*a); Im1:= 0; Re2:= (-b-Sqrt(b*b-4*a*c))/(2*a); Im2:= 0; end else begin Re1:= -b/2/a; Im1:= Sqrt(4*a*c-b*b)/(2*a); Re2:= -b/2/a; Im2:= -Sqrt(4*a*c-b*b)/(2*a); end; end; procedure Kardano3(A, B, C, D: real; var S, Re1, Im1, Re2, Im2, Re3, Im3:real); var p, q: real; {коэффициенты кубического уравнения y^3+p*y+q=0, x=y-B/(3*A)} F: real; y1: real; {y1=(-q/2+Sqrt(q*q/4+p*p*p/27))^(1/3)} y2: real; {y1=(-q/2-Sqrt(q*q/4+p*p*p/27))^(1/3)} begin p := (3*A*C-B*B)/(3*A*A); q := (2*B*B*B-9*A*B*C+27*A*A*D)/(27*A*A*A); S := (4*(3*A*C-B*B)*(3*A*C-B*B)*(3*A*C-B*B) +(2*B*B*B-9*A*B*C+27*A*A*D)*(2*B*B*B-9*A*B*C+27*A*A*D)) /(2916*A*A*A*A*A*A); y1:= 0; y2:= 0; F:= 0; if S<0 then begin if q<0 then F:= Arctan(-2*Sqrt(-S)/q); if q>0 then F:= Arctan(-2*Sqrt(-S)/q)+Pi; if q=0 then F:= Pi/2; Re1:= 2*Sqrt(-p/3)*Cos(F/3)-B/(3*A); Im1:= 0; Re2:= 2*Sqrt(-p/3)*Cos((F+2*Pi)/3)-B/(3*A); Im2:= 0; Re3:= 2*Sqrt(-p/3)*Cos((F+4*Pi)/3)-B/(3*A); Im3:= 0; if q=0 then Re3:= -B/(3*A); end; if S>0 then begin if -q/2+Sqrt(S)>0 then y1:= exp(ln(abs(-q/2+Sqrt(S)))/3); if -q/2+Sqrt(S)<0 then y1:= -exp(ln(abs(-q/2+Sqrt(S)))/3); if -q/2+Sqrt(S)=0 then y1:= 0; if -q/2-Sqrt(S)>0 then y2:= exp(ln(abs(-q/2-Sqrt(S)))/3); if -q/2-Sqrt(S)<0 then y2:= -exp(ln(abs(-q/2-Sqrt(S)))/3); if -q/2-Sqrt(S)=0 then y2:= 0; Re1:= y1+y2-B/A/3; Im1:= 0; Re2:= -(y1+y2)/2-B/A/3; Im2:= (y1-y2)*Sqrt(3)/2; Re3:= -(y1+y2)/2-B/A/3; Im3:= -(y1-y2)*Sqrt(3)/2; end; if S=0 then begin if q<0 then y1:= exp(ln(abs(-q/2))/3); if q>0 then y1:= -exp(ln(abs(-q/2))/3); if q=0 then y1:= 0; Re1:= 2*y1-B/A/3; Im1:= 0; Re2:= -y1-B/A/3; Im2:= 0; Re3:= -y1-B/A/3; Im3:= 0; end; end; Procedure BiSQR4(A,B,C,D,E: real; var Re1,Im1,Re2,Im2,Re3,Im3,Re4,Im4:real); var p, r: real; F: real; begin F:=0; p:= (8*A*C-3*B*B)/(8*A*A); r:= (16*A*B*B*C-64*A*A*B*D-3*B*B*B*B+256*A*A*A*E)/(256*A*A*A*A); if ((p*p-4*r)>0) or ((p*p-4*r)=0) then begin if ((-p+Sqrt(p*p-4*r))>0) or ((-p+Sqrt(p*p-4*r))=0) then begin Re1:= Sqrt((-p+Sqrt(p*p-4*r))/2)-B/(4*A); Im1:= 0; Re2:= -Sqrt((-p+Sqrt(p*p-4*r))/2)-B/(4*A); Im2:= 0; end else begin Re1:= -B/(4*A); Im1:= Sqrt((p-Sqrt(p*p-4*r))/2); Re2:= -B/(4*A); Im2:= -Sqrt((p-Sqrt(p*p-4*r))/2); end; if ((-p-Sqrt(p*p-4*r))>0) or ((-p-Sqrt(p*p-4*r))=0) then begin Re3:= Sqrt((-p-Sqrt(p*p-4*r))/2)-B/(4*A); Im3:= 0; Re4:= -Sqrt((-p-Sqrt(p*p-4*r))/2)-B/(4*A); Im4:= 0; end else begin Re3:= -B/(4*A); Im3:= Sqrt((p+Sqrt(p*p-4*r))/2); Re4:= -B/(4*A); Im4:= -Sqrt((p+Sqrt(p*p-4*r))/2); end; end; if p*p-4*r<0 then begin if p<0 then F:= Arctan(-Sqrt(4*r-p*p)/p); if p>0 then F:= Arctan(-Sqrt(4*r-p*p)/p)+Pi; if p=0 then F:= Pi/2; Re1:= Sqrt(Sqrt(r))*Cos(F/2)-B/(4*A); Im1:= Sqrt(Sqrt(r))*Sin(F/2); Re2:= Sqrt(Sqrt(r))*Cos(F/2)-B/(4*A); Im2:= -Sqrt(Sqrt(r))*Sin(F/2); Re3:= -Sqrt(Sqrt(r))*Cos(F/2)-B/(4*A); Im3:= Sqrt(Sqrt(r))*Sin(F/2); Re4:= -Sqrt(Sqrt(r))*Cos(F/2)-B/(4*A); Im4:= -Sqrt(Sqrt(r))*Sin(F/2); end; end; Procedure Ferrary4(A,B,C,D,E: real; var Re1,Im1,Re2,Im2,Re3,Im3,Re4,Im4:real; var Ex: boolean); var p, q, r: real; A0, B0, C0, D0, S0: real; z1, z2, z3, h1, h2, h3: real; D1, D2: real; begin Ex:= false; p:= (8*A*C-3*B*B)/(8*A*A); q:= (8*A*A*D+B*B*B-4*A*B*C)/(8*A*A*A); r:= (16*A*B*B*C-64*A*A*B*D-3*B*B*B*B+256*A*A*A*E)/(256*A*A*A*A); A0:= 1; B0:= p; C0:= (p*p-4*r)/4; D0:= -q*q/8; Kardano3(A0, B0, C0, D0, S0, z1, h1, z2, h2, z3, h3); {предполагается, что z1 всегда больше нуля, если q не равно нулю} if (z1=0) or (z1<0) then begin Ex:=True; Exit; end; D1:= 2*z1-4*(p/2+z1+q/2/Sqrt(2*z1)); D2:= 2*z1-4*(p/2+z1-q/2/Sqrt(2*z1)); if (D1>0) or (D1=0) then begin Re1:= (Sqrt(2*z1)+Sqrt(D1))/2-B/(4*A); Im1:= 0; Re2:= (Sqrt(2*z1)-Sqrt(D1))/2-B/(4*A); Im2:= 0; end else begin Re1:= Sqrt(2*z1)/2-B/(4*A); Im1:= Sqrt(-D1)/2; Re2:= Sqrt(2*z1)/2-B/(4*A); Im2:= -Sqrt(-D1)/2; end; if (D2>0) or (D2=0) then begin Re3:= (-Sqrt(2*z1)+Sqrt(D2))/2-B/(4*A); Im3:= 0; Re4:= (-Sqrt(2*z1)-Sqrt(D2))/2-B/(4*A); Im4:= 0; end else begin Re3:= -Sqrt(2*z1)/2-B/(4*A); Im3:= Sqrt(-D2)/2; Re4:= -Sqrt(2*z1)/2-B/(4*A); Im4:= -Sqrt(-D2)/2; end; end; procedure Dekart4(A,B,C,D,E: real; var Re1,Im1,Re2,Im2,Re3,Im3,Re4,Im4: real; var Ex:boolean); const w=1E-15; var p, q, r: real; A0, B0, C0, D0, S0: real; z1, z2, z3, h1, h2, h3: real; R1, R2, R3, I1, I2, I3, F0: real; begin Ex:= False; R1:=0; R2:=0; R3:=0; I1:=0; I2:=0; I3:=0; F0:=0; p:= (8*A*C-3*B*B)/(8*A*A); q:= (8*A*A*D+B*B*B-4*A*B*C)/(8*A*A*A); r:= (16*A*B*B*C-64*A*A*B*D-3*B*B*B*B+256*A*A*A*E)/(256*A*A*A*A); A0:= 1; B0:= p/2; C0:= (p*p-4*r)/16; D0:= -q*q/64; Kardano3(A0, B0, C0, D0, S0, z1, h1, z2, h2, z3, h3); if ((S0<0) or (S0=0)) and ((abs(z1)0) and ((z1<0) or (abs(z1)0) and (z2>0) and (z3>0) then begin if q<0 then begin R1:=Sqrt(z1); R2:=Sqrt(z2); R3:=Sqrt(z3); I1:=0; I2:=0; I3:=0; end else begin R1:=-Sqrt(z1); R2:=Sqrt(z2); R3:=Sqrt(z3); I1:=0; I2:=0; I3:=0; end; end; if (z1>0) and (z2<0) and (z3<0) then begin if q<0 then begin R1:=-Sqrt(z1); R2:=0; R3:=0; I1:=0; I2:=Sqrt(-z2); I3:=Sqrt(-z3); end else begin R1:=Sqrt(z1); R2:=0; R3:=0; I1:=0; I2:=Sqrt(-z2); I3:=Sqrt(-z3); end; end; if (z2>0) and (z1<0) and (z3<0) then begin if q<0 then begin R2:=-Sqrt(z2); R1:=0; R3:=0; I2:=0; I1:=Sqrt(-z1); I3:=Sqrt(-z3); end else begin R2:=Sqrt(z2); R1:=0; R3:=0; I2:=0; I1:=Sqrt(-z1); I3:=Sqrt(-z3); end; end; if (z3>0) and (z1<0) and (z2<0) then begin if q<0 then begin R3:=-Sqrt(z3); R1:=0; R2:=0; I3:=0; I1:=Sqrt(-z2); I2:=Sqrt(-z3); end else begin R3:=Sqrt(z3); R1:=0; R2:=0; I3:=0; I1:=Sqrt(-z1); I2:=Sqrt(-z3); end; end; Re1:= R1+R2+R3-B/(4*A); Im1:= I1+I2+I3; Re2:= R1-R2-R3-B/(4*A); Im2:= I1-I2-I3; Re3:= R2-R1-R3-B/(4*A); Im3:= I2-I1-I3; Re4:= R3-R1-R2-B/(4*A); Im4:= I3-I1-I2; end; if S0>0 then begin if z2>0 then F0:= Arctan(h2/z2); if z2<0 then F0:= Arctan(h2/z2)+Pi; if (z2=0) and (h2>0) then F0:= Pi/2; if (z2=0) and (h2<0) then F0:= -Pi/2; if q<0 then R1:= Sqrt(z1); if q>0 then R1:= -Sqrt(z1); Re1:= R1+2*Sqrt(Sqrt(z2*z2+h2*h2))*Cos(F0/2)-B/(4*A); Im1:= 0; Re2:= R1-2*Sqrt(Sqrt(z2*z2+h2*h2))*Cos(F0/2)-B/(4*A); Im2:= 0; Re3:= -R1-B/(4*A); Im3:= 2*Sqrt(Sqrt(z2*z2+h2*h2))*Sin(F0/2); Re4:= -R1-B/(4*A); Im4:= -2*Sqrt(Sqrt(z2*z2+h2*h2))*Sin(F0/2); end; end; Procedure Def; var A, B, C, D, E: real; S0 : real; Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4: real; u1, u2, u3, u4, v1, v2, v3, v4: real; Ex1, Ex2: boolean; begin if (Form1.Edit1.Text='') or (Form1.Edit1.Text='-') then begin ShowMessage('Введите коэффициент A'); Form1.Edit1.SetFocus; Exit; end; if (Form1.Edit2.Text='') or (Form1.Edit2.Text='-') then begin ShowMessage('Введите коэффициент B'); Form1.Edit2.SetFocus; Exit; end; if (Form1.Edit3.Text='') or (Form1.Edit3.Text='-') then begin ShowMessage('Введите коэффициент С'); Form1.Edit3.SetFocus; Exit; end; if (Form1.Edit4.Text='') or (Form1.Edit4.Text='-') then begin ShowMessage('Введите коэффициент D'); Form1.Edit4.SetFocus; Exit; end; if (Form1.Edit5.Text='') or (Form1.Edit5.Text='-') then begin ShowMessage('Введите коэффициент E'); Form1.Edit5.SetFocus; Exit; end; A:=StrToFloat(Form1.Edit1.Text); B:=StrToFloat(Form1.Edit2.Text); C:=StrToFloat(Form1.Edit3.Text); D:=StrToFloat(Form1.Edit4.Text); E:=StrToFloat(Form1.Edit5.Text); if (A=0) and (B=0) and (C=0) and (D=0) then begin if E=0 then Form1.Edit6.Text:='Любое число является решением уравнения' else Form1.Edit6.Text:='Данное уравнение не имеет решений'; Form1.Label7.Caption:=''; Form1.Label8.Caption:=''; Form1.Label9.Caption:=''; Form1.Label10.Caption:=''; Form1.Label11.Caption:=''; Form1.Label12.Caption:=''; Form1.Label13.Caption:=''; Form1.Label14.Caption:=''; Form1.Label15.Caption:=''; Form1.Label16.Caption:=''; Exit; end; if (A=0) and (B=0) and (C=0) then begin Re1:=-E/D; Form1.Edit6.Text:=FloatToStr(Re1); Form1.Label7.Caption:='Решение линейного уравнения:'; Form1.Label8.Caption:=' x = '; Form1.Label9.Caption:=''; Form1.Label10.Caption:=''; Form1.Label11.Caption:=''; Form1.Label12.Caption:=''; Form1.Label13.Caption:=''; Form1.Label14.Caption:=''; Form1.Label15.Caption:=''; Form1.Label16.Caption:=''; Exit; end; if (A=0) and (B=0) then begin Sqr2(C, D, E, Re1, Im1, Re2, Im2); if (Im1=0) then Form1.Edit6.Text:=FloatToStr(Re1) else Form1.Edit6.Text:=FloatToStr(Re1)+' +i* '+FloatToStr(Im1); if (Im2=0) then Form1.Edit7.Text:=FloatToStr(Re1) else Form1.Edit7.Text:=FloatToStr(Re1)+' +i* '+FloatToStr(Im1); Form1.Label7.Caption:='Решение квадратного уравнения С*x^2+D*x+E=0'; Form1.Label8.Caption:='x1 = '; Form1.Label9.Caption:='x2 = '; Form1.Label10.Caption:=''; Form1.Label11.Caption:=''; Form1.Label12.Caption:=''; Form1.Label13.Caption:=''; Form1.Label14.Caption:=''; Form1.Label15.Caption:=''; Form1.Label16.Caption:=''; u1:=C*(Re1*Re1-Im1*Im1)+D*Re1+E; v1:=2*C*Re1*Im1+D*Im1; u2:=C*(Re2*Re2-Im2*Im2)+D*Re2+E; v2:=2*C*Re2*Im2+D*Im2; Form1.Label17.Caption:='Погрешность решения квадратного уравнения'+#13+ FloatToStr(u1)+' +i* ' +FloatToStr(v1)+#13+ FloatToStr(u2)+' +i* ' +FloatToStr(v2); Exit; end; if A=0 then begin Kardano3(B, C, D, E, S0, Re1, Im1, Re2, Im2, Re3, Im3); Form1.Edit6.Text:=FloatToStr(Re1); if Im2=0 then Form1.Edit7.Text:=FloatToStr(Re2) else Form1.Edit7.Text:=FloatToStr(Re2)+' +i* '+FloatToStr(Im2); if Im3=0 then Form1.Edit8.Text:=FloatToStr(Re3) else Form1.Edit8.Text:=FloatToStr(Re3)+' +i* '+FloatToStr(Im3); Form1.Label7.Caption:='Решение кубического уравнения B*x^3+C*x^2+D*x+E=0'; Form1.Label8.Caption:='x1 = '; Form1.Label9.Caption:='x2 = '; Form1.Label10.Caption:='x3 = '; Form1.Label11.Caption:=''; Form1.Label12.Caption:=''; Form1.Label13.Caption:=''; Form1.Label14.Caption:=''; Form1.Label15.Caption:=''; Form1.Label16.Caption:=''; u1:=B*(Re1*Re1*Re1-3*Re1*Im1*Im1)+C*(Re1*Re1-Im1*Im1)+D*Re1+E; v1:=B*(3*Re1*Re1*Im1-Im1*Im1*Im1)+2*C*Re1*Im1+D*Im1; u2:=B*(Re2*Re2*Re2-3*Re2*Im2*Im2)+C*(Re2*Re2-Im2*Im2)+D*Re2+E; v2:=B*(3*Re2*Re2*Im2-Im2*Im2*Im2)+2*C*Re2*Im2+D*Im2; u3:=B*(Re3*Re3*Re3-3*Re3*Im3*Im3)+C*(Re3*Re3-Im3*Im3)+D*Re3+E; v3:=B*(3*Re3*Re3*Im3-Im3*Im3*Im3)+2*C*Re3*Im3+D*Im3; Form1.Label17.Caption:='Погрешность решения кубического уравнения'+#13+ FloatToStr(u1)+' +i* ' +FloatToStr(v1)+#13+ FloatToStr(u2)+' +i* ' +FloatToStr(v2)+#13+ FloatToStr(u3)+' +i* ' +FloatToStr(v3); Exit; end; if (8*A*A*D+B*B*B-4*A*B*C)/(8*A*A*A)=0 then begin BiSqr4(A, B, C, D, E, Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4); if Im1=0 then Form1.Edit6.Text:=FloatToStr(Re1) else Form1.Edit6.Text:=FloatToStr(Re1)+' +i* '+FloatToStr(Im1); if Im2=0 then Form1.Edit7.Text:=FloatToStr(Re2) else Form1.Edit7.Text:=FloatToStr(Re2)+' +i* '+FloatToStr(Im2); if Im3=0 then Form1.Edit8.Text:=FloatToStr(Re3) else Form1.Edit8.Text:=FloatToStr(Re3)+' +i* '+FloatToStr(Im3); if Im4=0 then Form1.Edit9.Text:=FloatToStr(Re4) else Form1.Edit9.Text:=FloatToStr(Re4)+' +i* '+FloatToStr(Im4); Form1.Label7.Caption:='Решение биквадратного уравнения'; Form1.Label8.Caption:='x1 = '; Form1.Label9.Caption:='x2 = '; Form1.Label10.Caption:='x3 = '; Form1.Label11.Caption:='x4 = '; Form1.Label12.Caption:=''; Form1.Label13.Caption:=''; Form1.Label14.Caption:=''; Form1.Label15.Caption:=''; Form1.Label16.Caption:=''; u1:=A*(Re1*Re1*Re1*Re1-6*Re1*Re1*Im1*Im1+Im1*Im1*Im1*Im1)+ B*(Re1*Re1*Re1-3*Re1*Im1*Im1)+C*(Re1*Re1-Im1*Im1)+D*Re1+E; v1:=4*A*(Re1*Re1*Re1*Im1-Re1*Im1*Im1*Im1)+B*(3*Re1*Re1*Im1-Im1*Im1*Im1)+ 2*C*Re1*Im1+D*Im1; u2:=A*(Re2*Re2*Re2*Re2-6*Re2*Re2*Im2*Im2+Im2*Im2*Im2*Im2)+ B*(Re2*Re2*Re2-3*Re2*Im2*Im2)+C*(Re2*Re2-Im2*Im2)+D*Re2+E; v2:=4*A*(Re2*Re2*Re2*Im2-Re2*Im2*Im2*Im2)+B*(3*Re2*Re2*Im2-Im2*Im2*Im2)+ 2*C*Re2*Im2+D*Im2; u3:=A*(Re3*Re3*Re3*Re3-6*Re3*Re3*Im3*Im3+Im3*Im3*Im3*Im3)+ B*(Re3*Re3*Re3-3*Re3*Im3*Im3)+C*(Re3*Re3-Im3*Im3)+D*Re3+E; v3:=4*A*(Re3*Re3*Re3*Im3-Re3*Im3*Im3*Im3)+B*(3*Re3*Re3*Im3-Im3*Im3*Im3)+ 2*C*Re3*Im3+D*Im3; u4:=A*(Re4*Re4*Re4*Re4-6*Re4*Re4*Im4*Im4+Im4*Im4*Im4*Im4)+ B*(Re4*Re4*Re4-3*Re4*Im4*Im4)+C*(Re4*Re4-Im4*Im4)+D*Re4+E; v4:=4*A*(Re4*Re4*Re4*Im4-Re4*Im4*Im4*Im4)+B*(3*Re4*Re4*Im4-Im4*Im4*Im4)+ 2*C*Re4*Im4+D*Im4; Form1.Label17.Caption:='Погрешность решения биквадратного уравнения'+#13+ FloatToStr(u1)+' +i* ' +FloatToStr(v1)+#13+ FloatToStr(u2)+' +i* ' +FloatToStr(v2)+#13+ FloatToStr(u3)+' +i* ' +FloatToStr(v3)+#13+ FloatToStr(u4)+' +i* ' +FloatToStr(v4); Exit; end; Ferrary4(A, B, C, D, E, Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4, Ex1); if Ex1 then BiSqr4(A, B, C, D, E, Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4); if Ex1 then Form1.Label7.Caption:='Решение биквадратного уравнения' else Form1.Label7.Caption:='Cпособом разложения на 2 квадратных уравнения'; if Im1=0 then Form1.Edit6.Text:=FloatToStr(Re1) else Form1.Edit6.Text:=FloatToStr(Re1)+' +i* '+FloatToStr(Im1); if Im2=0 then Form1.Edit7.Text:=FloatToStr(Re2) else Form1.Edit7.Text:=FloatToStr(Re2)+' +i* '+FloatToStr(Im2); if Im3=0 then Form1.Edit8.Text:=FloatToStr(Re3) else Form1.Edit8.Text:=FloatToStr(Re3)+' +i* '+FloatToStr(Im3); if Im4=0 then Form1.Edit9.Text:=FloatToStr(Re4) else Form1.Edit9.Text:=FloatToStr(Re4)+' +i* '+FloatToStr(Im4); Form1.Label8.Caption:='x1 = '; Form1.Label9.Caption:='x2 = '; Form1.Label10.Caption:='x3 = '; Form1.Label11.Caption:='x4 = '; u1:=A*(Re1*Re1*Re1*Re1-6*Re1*Re1*Im1*Im1+Im1*Im1*Im1*Im1)+ B*(Re1*Re1*Re1-3*Re1*Im1*Im1)+C*(Re1*Re1-Im1*Im1)+D*Re1+E; v1:=4*A*(Re1*Re1*Re1*Im1-Re1*Im1*Im1*Im1)+B*(3*Re1*Re1*Im1-Im1*Im1*Im1)+ 2*C*Re1*Im1+D*Im1; u2:=A*(Re2*Re2*Re2*Re2-6*Re2*Re2*Im2*Im2+Im2*Im2*Im2*Im2)+ B*(Re2*Re2*Re2-3*Re2*Im2*Im2)+C*(Re2*Re2-Im2*Im2)+D*Re2+E; v2:=4*A*(Re2*Re2*Re2*Im2-Re2*Im2*Im2*Im2)+B*(3*Re2*Re2*Im2-Im2*Im2*Im2)+ 2*C*Re2*Im2+D*Im2; u3:=A*(Re3*Re3*Re3*Re3-6*Re3*Re3*Im3*Im3+Im3*Im3*Im3*Im3)+ B*(Re3*Re3*Re3-3*Re3*Im3*Im3)+C*(Re3*Re3-Im3*Im3)+D*Re3+E; v3:=4*A*(Re3*Re3*Re3*Im3-Re3*Im3*Im3*Im3)+B*(3*Re3*Re3*Im3-Im3*Im3*Im3)+ 2*C*Re3*Im3+D*Im3; u4:=A*(Re4*Re4*Re4*Re4-6*Re4*Re4*Im4*Im4+Im4*Im4*Im4*Im4)+ B*(Re4*Re4*Re4-3*Re4*Im4*Im4)+C*(Re4*Re4-Im4*Im4)+D*Re4+E; v4:=4*A*(Re4*Re4*Re4*Im4-Re4*Im4*Im4*Im4)+B*(3*Re4*Re4*Im4-Im4*Im4*Im4)+ 2*C*Re4*Im4+D*Im4; if Ex1 then Form1.Label17.Caption:='Погрешность решения биквадратного уравнения' else Form1.Label17.Caption:='Погрешность способа разложения'; Form1.Label17.Caption:=Form1.Label17.Caption+#13+ FloatToStr(u1)+' +i* ' +FloatToStr(v1)+#13+ FloatToStr(u2)+' +i* ' +FloatToStr(v2)+#13+ FloatToStr(u3)+' +i* ' +FloatToStr(v3)+#13+ FloatToStr(u4)+' +i* ' +FloatToStr(v4); Dekart4(A, B, C, D, E, Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4, Ex2); if Ex2 then BiSqr4(A, B, C, D, E, Re1, Im1, Re2, Im2, Re3, Im3, Re4, Im4); if Ex2 then Form1.Label12.Caption:='Решение биквадратного уравнения' else Form1.Label12.Caption:='Решение способом Декарта-Эйлера'; if Im1=0 then Form1.Edit10.Text:=FloatToStr(Re1) else Form1.Edit10.Text:=FloatToStr(Re1)+' +i* '+FloatToStr(Im1); if Im2=0 then Form1.Edit11.Text:=FloatToStr(Re2) else Form1.Edit11.Text:=FloatToStr(Re2)+' +i* '+FloatToStr(Im2); if Im3=0 then Form1.Edit12.Text:=FloatToStr(Re3) else Form1.Edit12.Text:=FloatToStr(Re3)+' +i* '+FloatToStr(Im3); if Im4=0 then Form1.Edit13.Text:=FloatToStr(Re4) else Form1.Edit13.Text:=FloatToStr(Re4)+' +i* '+FloatToStr(Im4); Form1.Label13.Caption:='x1 = '; Form1.Label14.Caption:='x2 = '; Form1.Label15.Caption:='x3 = '; Form1.Label16.Caption:='x4 = '; u1:=A*(Re1*Re1*Re1*Re1-6*Re1*Re1*Im1*Im1+Im1*Im1*Im1*Im1)+ B*(Re1*Re1*Re1-3*Re1*Im1*Im1)+C*(Re1*Re1-Im1*Im1)+D*Re1+E; v1:=4*A*(Re1*Re1*Re1*Im1-Re1*Im1*Im1*Im1)+B*(3*Re1*Re1*Im1-Im1*Im1*Im1)+ 2*C*Re1*Im1+D*Im1; u2:=A*(Re2*Re2*Re2*Re2-6*Re2*Re2*Im2*Im2+Im2*Im2*Im2*Im2)+ B*(Re2*Re2*Re2-3*Re2*Im2*Im2)+C*(Re2*Re2-Im2*Im2)+D*Re2+E; v2:=4*A*(Re2*Re2*Re2*Im2-Re2*Im2*Im2*Im2)+B*(3*Re2*Re2*Im2-Im2*Im2*Im2)+ 2*C*Re2*Im2+D*Im2; u3:=A*(Re3*Re3*Re3*Re3-6*Re3*Re3*Im3*Im3+Im3*Im3*Im3*Im3)+ B*(Re3*Re3*Re3-3*Re3*Im3*Im3)+C*(Re3*Re3-Im3*Im3)+D*Re3+E; v3:=4*A*(Re3*Re3*Re3*Im3-Re3*Im3*Im3*Im3)+B*(3*Re3*Re3*Im3-Im3*Im3*Im3)+ 2*C*Re3*Im3+D*Im3; u4:=A*(Re4*Re4*Re4*Re4-6*Re4*Re4*Im4*Im4+Im4*Im4*Im4*Im4)+ B*(Re4*Re4*Re4-3*Re4*Im4*Im4)+C*(Re4*Re4-Im4*Im4)+D*Re4+E; v4:=4*A*(Re4*Re4*Re4*Im4-Re4*Im4*Im4*Im4)+B*(3*Re4*Re4*Im4-Im4*Im4*Im4)+ 2*C*Re4*Im4+D*Im4; if Ex2 then Form1.Label17.Caption:=Form1.Label17.Caption+#13+ 'Погрешность решения биквадратного уравнения' else Form1.Label17.Caption:=Form1.Label17.Caption+#13+ 'Погрешность способа Декарта-Эйлера'; Form1.Label17.Caption:=Form1.Label17.Caption+#13+ FloatToStr(u1)+' +i* ' +FloatToStr(v1)+#13+ FloatToStr(u2)+' +i* ' +FloatToStr(v2)+#13+ FloatToStr(u3)+' +i* ' +FloatToStr(v3)+#13+ FloatToStr(u4)+' +i* ' +FloatToStr(v4); end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Def; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; #13: Edit2.SetFocus; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit1.Text)<>0 then Key := Chr(0); end; '-': if Length(Edit1.Text) <> 0 then Key := Chr(0); else Key:=Chr(0); end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; #13: Edit3.SetFocus; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit2.Text)<>0 then Key := Chr(0); end; '-': if Length(Edit2.Text) <> 0 then Key := Chr(0); else Key:=Chr(0); end; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; #13: Edit4.SetFocus; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit3.Text)<>0 then Key := Chr(0); end; '-': if Length(Edit3.Text) <> 0 then Key := Chr(0); else Key:=Chr(0); end; end; procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; #13: Edit5.SetFocus; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit4.Text)<>0 then Key := Chr(0); end; '-': if Length(Edit4.Text) <> 0 then Key := Chr(0); else Key:=Chr(0); end; end; procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; #13: Def; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator; if Pos(DecimalSeparator, Edit5.Text)<>0 then Key := Chr(0); end; '-': if Length(Edit5.Text) <> 0 then Key := Chr(0); else Key:=Chr(0); end; end; procedure TForm1.Edit1Change(Sender: TObject); begin Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; Edit12.Text:=''; Edit13.Text:=''; Label17.Caption:=''; Label17.Visible:=False; end; procedure TForm1.Edit2Change(Sender: TObject); begin Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; Edit12.Text:=''; Edit13.Text:=''; Label17.Caption:=''; Label17.Visible:=False; end; procedure TForm1.Edit3Change(Sender: TObject); begin Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; Edit12.Text:=''; Edit13.Text:=''; Label17.Caption:=''; Label17.Visible:=False; end; procedure TForm1.Edit4Change(Sender: TObject); begin Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; Edit12.Text:=''; Edit13.Text:=''; Label17.Caption:=''; Label17.Visible:=False; end; procedure TForm1.Edit5Change(Sender: TObject); begin Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; Edit12.Text:=''; Edit13.Text:=''; Label17.Caption:=''; Label17.Visible:=False; end; procedure TForm1.FormActivate(Sender: TObject); begin Edit1.Text:='1'; Edit2.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); begin Label17.Visible:=true; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit1.SetFocus; end; procedure TForm1.Button4Click(Sender: TObject); begin Edit1.Text:='0'; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit2.SetFocus; end; procedure TForm1.Button5Click(Sender: TObject); begin Edit1.Text:='0'; Edit2.Text:='0'; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit3.SetFocus; end; end.