unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, ExtCtrls, TeeProcs, Chart, Series; type TController = class; TStorage = class; // TFormBase = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Chart1: TChart; SaveDialog1: TSaveDialog; CalcPlot: TButton; SaveExit: TButton; Series1: TLineSeries; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; procedure CalcPlotClick(Sender: TObject); procedure SaveExitClick(Sender: TObject); private _Controller: TController; c1, c2, c3, c4, c5: real; muv, nuv, iv, Tnu: real; FileName: string; public procedure ConnectController(var aController: TController); procedure TakeData; end; // TController = class private _Border: TFormBase; _Storage: TStorage; c1, c2, c3, c4, c5: real; muv, nuv, iv, Tnu: real; teta: array[1..1000] of real; FileName: string; public procedure ConnectBorder(var aBorder: TFormBase); procedure ConnectStorage(var aStorage: TStorage); procedure TransmitFromBorderToStorage; procedure TransmitParamAPToStorage; procedure PrepareData; procedure CalcParam; procedure Table; end; // TStorage = class private c1, c2, c3, c4, c5: real; muv, nuv, iv, Tnu: real; _Controller: TController; FileName: string; public procedure ConnectController(var aController: TController); procedure SaveData; end; // var FormBase: TFormBase; Controller: TController; Storage: TStorage; implementation {$R *.dfm} procedure TFormBase.ConnectController(var aController: TController); begin Self._Controller := aController; end; // procedure TController.ConnectBorder(var aBorder: TFormBase); begin Self._Border := aBorder; end; // procedure TController.ConnectStorage(var aStorage: TStorage); begin Self._Storage := aStorage; end; // procedure TStorage.ConnectController(var aController: TController); begin Self._Controller := aController; end; // // procedure TFormBase.TakeData; begin FormBase.c1 := StrToFloat(Edit1.Text); FormBase.c2 := StrToFloat(Edit2.Text); FormBase.c3 := StrToFloat(Edit3.Text); FormBase.c4 := StrToFloat(Edit4.Text); FormBase.c5 := StrToFloat(Edit5.Text); FormBase.FileName := SaveDialog1.FileName; end; // procedure TController.TransmitFromBorderToStorage; begin Controller._Storage.c1 := Controller._Border.c1; Controller._Storage.c2 := Controller._Border.c2; Controller._Storage.c3 := Controller._Border.c3; Controller._Storage.c4 := Controller._Border.c4; Controller._Storage.c5 := Controller._Border.c5; Controller._Storage.FileName := Controller._Border.FileName; end; // procedure TController.TransmitParamAPToStorage; begin Controller._Storage.muv := Controller.muv; Controller._Storage.iv := Controller.iv; Controller._Storage.nuv := Controller.nuv; Controller._Storage.Tnu := Controller.Tnu; end; // procedure TStorage.SaveData; var File1: TextFile; str: string; begin AssignFile(File1, Storage.FileName); ReWrite(File1); str := 'c1 = ' + FloatToStr(Storage.c1); Writeln(File1, str); str := 'c2 = ' + FloatToStr(Storage.c2); Writeln(File1, str); str := 'c3 = ' + FloatToStr(Storage.c3); Writeln(File1, str); str := 'c4 = ' + FloatToStr(Storage.c4); Writeln(File1, str); str := 'c5 = ' + FloatToStr(Storage.c5); Writeln(File1, str); str := 'muv = ' + FloatToStr(Storage.muv); Writeln(File1, str); str := 'iv = ' + FloatToStr(Storage.iv); Writeln(File1, str); str := 'nuv = ' + FloatToStr(Storage.nuv); Writeln(File1, str); str := 'Tnu = ' + FloatToStr(Storage.Tnu); Writeln(File1, str); Close(File1); end; // procedure TController.PrepareData; begin Controller.c1 := Controller._Border.c1; Controller.c2 := Controller._Border.c2; Controller.c3 := Controller._Border.c3; Controller.c4 := Controller._Border.c4; Controller.c5 := Controller._Border.c5; end; // procedure TController.CalcParam; var cp1, cp2, cp3, cp4, cp5: real; OmegaA, TA, Tv, Kc, ash, bsh, Kcsh, TAsh: real; begin cp1 := Controller.c1; cp2 := Controller.c2; cp3 := Controller.c3; cp4 := Controller.c4; cp5 := Controller.c5; OmegaA := sqrt(cp1*cp4+cp2); TA := 1/OmegaA; Tv := 1/cp4; Kc := cp3*cp4/(cp1*cp4+cp2); ash := 2*(cp1+cp5-cp4)/cp3; bsh := ((cp1+cp4+cp5)*(cp1+cp4+cp5)-4*(cp1*cp4+cp2))/(cp3*cp3); Controller.muv := abs(-ash/2+sqrt(ash*ash/4-bsh)); Kcsh := Kc/(1+Controller.muv*Kc); TAsh := TA/sqrt(1+Controller.muv*Kc); Controller.iv := 1/(Kcsh*Tv); Controller.nuv := 0.09/(Kcsh*Tv*Tv); Controller.Tnu := Controller.iv/Controller.nuv; end; // procedure TController.Table; var i: integer; CC1, CC2, CC3, CC4, CC5, mu, nu, ivC: real; t1, t2, n, h: real; al, alpr, wz, wzpr, x1, x1pr, x2, x2pr, tetazad: real; begin CC1 := Controller.c1; CC2 := Controller.c2; CC3 := Controller.c3; CC4 := Controller.c4; CC5 := Controller.c5; mu := Controller.muv; nu := Controller.nuv; ivC := Controller.iv; tetazad := 1; t2 := 10; t1 := 0; n := 1000; h := (t2-t1)/n; al := pi/180; Controller.teta[1] := pi/180; wz := 0; x1 := 0; x2 := -1; for i := 2 to 1000 do begin wzpr := wz; alpr := al; x1pr := x1; x2pr := x2; wz := wzpr+h*(-wzpr*(CC1+CC5+CC3*mu)-alpr*(CC2-CC4*CC5)-CC3*nu*x1pr-CC3*ivC*x2pr); x1 := x1pr+h*x2pr; al := alpr+h*(wzpr-alpr*CC4); x2 := x2pr+h*wzpr; Controller.teta[i] := x2 + tetazad; end; end; // procedure TFormBase.CalcPlotClick(Sender: TObject); var j: integer; begin Controller._Border.TakeData; Controller.PrepareData; Controller.CalcParam; Controller.Table; for j := 1 to 1000 do Series1.AddXY(0.01*(j-1),FormBase._Controller.teta[j],'',clRed); end; // procedure TFormBase.SaveExitClick(Sender: TObject); begin if SaveDialog1.Execute then begin FormBase.TakeData; Controller.TransmitFromBorderToStorage; Controller.TransmitParamAPToStorage; Controller._Storage.SaveData; Close; end; end; // end.