unit UnitUML; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type Tcontroller = class; Tstorage = class; TBaseform = class (TForm) Edit1: TEdit; Label1: TLabel; Edit2: TEdit; Label2: TLabel; Edit3: TEdit; Label3: TLabel; Label4: TLabel; Button2: TButton; Chart1: TChart; Series1: TLineSeries; SaveDialog1: TSaveDialog; procedure Edit3Click(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ConnectController(var aController:TController); private ///True _controller: Tcontroller; public procedure But; var XX,YY:integer; end; TController=class public I,D,K,H,omega: real; ///True _storage: Tstorage; ///True _border: TBaseform; Procedure calc; procedure Connectborder(var aBaseForm:TBaseform); procedure ConnectStorage(var aStorage:Tstorage); function ReshUr (I,D,K,H,omega: real;time:integer):real; var xx,yy:integer; end; TStorage=class public beta: real; ///True _Controller: Tcontroller; procedure kord; procedure ConnectController(var aController:TController); var xx,yy:integer; end; var ///True Baseform: Tbaseform; Controller: Tcontroller; ///True storage: Tstorage; implementation procedure tstorage.kord; var s:string; begin s:='Координата Х '+inttostr(Controller.xx)+'Координата Y '+inttostr(Controller.yy)+'Угол бета '+floattostr(beta); showmessage(s); end; procedure tStorage.ConnectController(var aController:TController); begin Self._Controller:=aController; end; procedure tBaseform.ConnectController(var aController:TController); begin Self._Controller:=aController; end; procedure TBaseform.Edit1Click(Sender: TObject); begin BaseForm.Edit1.Clear; end; procedure TBaseform.Edit2Click(Sender: TObject); begin baseform.Edit2.Clear; end; procedure TBaseform.Edit3Click(Sender: TObject); begin baseform.Edit3.Clear; end; procedure tcontroller.Connectborder(var aBaseForm: TBaseform); begin Self._border :=aBaseForm; end; procedure tcontroller.ConnectStorage(var aStorage: TStorage); begin Self._storage:=aStorage; end; procedure tController.calc; begin Controller.xx:=Baseform.xx; controller.yy:=Baseform.yy; Storage.kord; end; procedure TBaseForm.But; begin Baseform.XX:=baseform.Left+baseform.Height; Baseform.YY:=baseform.Top+baseform.Width; controller.calc; end; {$R *.dfm} procedure TBaseform.Button2Click(Sender: TObject); var temp: real; time:integer;F : TextFile; begin Controller.I := StrtoFloat (BaseForm.Edit1.Text); //чтение данных из полей Controller.D := StrtoFloat (BaseForm.Edit2.Text); Controller.K := StrtoFloat (BaseForm.Edit3.Text); if (SaveDialog1.Execute) then begin //открытие файла под запись AssignFile (F, Savedialog1.FileName); Rewrite (F); Writeln (F,'Входные параметры: К1='+Baseform.Edit1.Text+', К2='+Baseform.Edit2.Text) ; Writeln (F,''); Writeln (F,'Выходные параметры: ') ; for time := 0 to 1000 do // вычисление угла и запись значений в файл begin temp:= Controller.ReshUr (Controller.I, Controller.D, Controller.K, Controller.H,Controller.omega,time); BaseForm.Chart1.Series[0].AddXY(time, temp); storage.beta:=temp; Writeln (F,inttostr(time) + ' '+ floattostr(storage.beta)); end; CloseFile (F); end; end; function tcontroller.ReshUr(I,D,K,H,omega: real;time:integer):real; var ksi,omega0:real; begin ksi:=D/(2*sqrt(I*K)); omega0:=sqrt(K/I); result:= 0.5*exp(-ksi*omega0*time)*sin(omega0*sqrt(1-ksi*ksi)*time)+0.3*exp(-ksi*omega0*time)*cos(omega0*sqrt(1-ksi*ksi)*time) end; end.