unit LCoInvoluta; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Memo1: TMemo; Button1: TButton; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Button2: TButton; Button3: TButton; Memo2: TMemo; Memo3: TMemo; CheckBox1: TCheckBox; CheckBox2: TCheckBox; 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 Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation procedure PCoInvoluta; const DX=1E-30;{погрешность вычисления} var h:real;{Значение h} L:real;{Значение L} M:real; K:integer; I,P: integer; X1,X2 :real; W: real; N: integer; F: TextFile; function Y(Z:real):real; begin Y:=h*Cos(Z*L)/Sin(Z*L)-Z; end; begin h:= StrToFloat(Form1.Edit1.Text); L:= StrToFloat(Form1.Edit2.Text); N:= StrToInt(Form1.Edit3.Text); if Form1.CheckBox1.State = cbChecked then Form1.Memo1.Visible:=true else Form1.Memo1.Visible:=false; Form1.Memo2.Visible:=false; Form1.Memo3.Visible:=false; Form1.Memo1.Lines.Add('Корни уравнения W=h*ctg(W*L)'); Form1.Memo1.Lines.Add('h='+FloatToStr(h)+' L='+FloatToStr(L)); Form1.Memo2.Lines.Add('Абсолютные погрешности:'); Form1.Memo3.Lines.Add('Относитенльные погрешности:'); if Form1.CheckBox2.State = cbChecked then Form1.Label5.Caption:='h'+Form1.Edit1.Text+'L'+Form1.Edit2.Text+'.txt'; for K:=1 to N do begin M:=Pi/4/L; if Y(Pi*(K-1)/L+M)<=0 then repeat M:=M/2; until Y(Pi*(K-1)/L+M)>0; X1:=Pi*(K-1)/L+M; X2:=Pi*(K-1)/L+2*M; W:=X2; P:=Round(Ln(M/DX)/Ln(2)); for I:=1 to P do begin if Y(X1)*Y(W)<=0 then X2:=W else X1:=W; W:=(X1+X2)/2; end; Form1.Memo1.Lines.Add('W('+IntToStr(K)+')='+FloatToStr(W)); Form1.Memo2.Lines.Add('d('+IntToStr(K)+')='+FloatToStr(Y(W))); Form1.Memo3.Lines.Add('f('+IntToStr(K)+')='+FloatToStr(abs(Y(W)/W))); end; Form1.Memo1.Visible:=true; if Form1.CheckBox2.State = cbChecked then begin AssignFile(F,Form1.Label5.Caption); Rewrite(F); WriteLn(F,Form1.Memo1.Text); WriteLn(F,Form1.Memo2.Text); WriteLn(F,Form1.Memo3.Text); Close(F); end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin PCoInvoluta; 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; else Key:=Chr(0);//остальные символы запрещены end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ; //цифры и клавиша #13: PCoInvoluta; '.',',': begin if Key <> DecimalSeparator then Key:=DecimalSeparator;//заменим разделитель на допустимый if Pos(DecimalSeparator, Edit2.Text)<>0 then Key := Chr(0); //запрет на ввод второго разделителя end; else Key:=Chr(0);//остальные символы запрещены end; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin case Key of #8, '0'..'9': ;//цифры и клавиша #13: PCoInvoluta; else Key:=Chr(0);//остальные символы запрещены end; end; procedure TForm1.Button2Click(Sender: TObject); begin Memo2.Visible:=true; Memo3.Visible:=false; end; procedure TForm1.Button3Click(Sender: TObject); begin Memo3.Visible:=true; Memo2.Visible:=false; end; procedure TForm1.Edit1Change(Sender: TObject); begin Memo1.Lines.Clear; Memo2.Lines.Clear; Memo3.Lines.Clear; Label5.Caption:=''; end; procedure TForm1.Edit2Change(Sender: TObject); begin Memo1.Lines.Clear; Memo2.Lines.Clear; Memo3.Lines.Clear; Label5.Caption:=''; end; procedure TForm1.Edit3Change(Sender: TObject); begin Memo1.Lines.Clear; Memo2.Lines.Clear; Memo3.Lines.Clear; Label5.Caption:=''; end; end.