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.