Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект_Кузнецова.doc
Скачиваний:
3
Добавлен:
16.08.2019
Размер:
536.58 Кб
Скачать

Приложение 2. Модули задачи моделирования.

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Spin, Grids;

type

TModelMainFm = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Button1: TButton;

Edit11: TEdit;

Edit12: TEdit;

Label10: TLabel;

SpinEdit1: TSpinEdit;

Label11: TLabel;

Label12: TLabel;

Button2: TButton;

Button3: TButton;

StringGrid1: TStringGrid;

SaveDialog1: TSaveDialog;

procedure FormCreate(Sender: TObject);

procedure EditKeyPress(Sender: TObject; var Key: Char);

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

procedure Edit3Exit(Sender: TObject);

procedure Edit4Exit(Sender: TObject);

procedure Edit5Exit(Sender: TObject);

procedure Edit6Exit(Sender: TObject);

procedure Edit7Exit(Sender: TObject);

procedure Edit8Exit(Sender: TObject);

procedure Edit9Exit(Sender: TObject);

procedure Edit11Exit(Sender: TObject);

procedure Edit12Exit(Sender: TObject);

procedure SpinEdit1Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

procedure CheckVal(Ed : TEdit; var V : Double; Pres: Integer = 3);

procedure SaveToFile(Fn:String);

end;

var

ModelMainFm: TModelMainFm;

implementation

{$R *.dfm}

var

n : Integer;

A1,A2,B,K1,K2,K3,Z0,Y0,YY0,E,dt: Double;

T,X,Y,F,Z : array of Double;

procedure TModelMainFm.CheckVal(Ed: TEdit; var V: Double; Pres: Integer = 3);

begin

try

V := StrToFloat(Ed.Text);

Ed.Text := FloatToStrF(V,ffFixed,8,Pres);

except

on E: EConvertError do begin

ShowMessage('Неверное число');

Ed.SetFocus;

end;

end;

end;

procedure TModelMainFm.FormCreate(Sender: TObject);

begin

CheckVal(Edit1,A1);

CheckVal(Edit2,A2);

CheckVal(Edit3,B,5);

CheckVal(Edit4,K1);

CheckVal(Edit5,K2);

CheckVal(Edit6,K3,5);

CheckVal(Edit7,Y0);

CheckVal(Edit8,YY0);

CheckVal(Edit9,Z0);

CheckVal(Edit11,dt);

CheckVal(Edit12,E,5);

N := 25;

SetLength(T,n+1);

SetLength(X,n+1);

SetLength(Y,n+1);

SetLength(F,n+1);

SetLength(Z,n+1);

SaveDialog1.InitialDir := Application.ExeName;

end;

procedure TModelMainFm.EditKeyPress(Sender: TObject; var Key: Char);

var

Kt : Char;

begin

Kt := Key;

Key := #0;

if Kt in ['0'..'9',#3,#8,'-'] then Key := Kt;

if Kt in ['.',','] then Key := DecimalSeparator;

if Kt = #13 then SelectNext(ActiveControl,True,True);

end;

procedure TModelMainFm.Edit1Exit(Sender: TObject);

begin

CheckVal(Edit1,A1);

end;

procedure TModelMainFm.Edit2Exit(Sender: TObject);

begin

CheckVal(Edit2,A2);

end;

procedure TModelMainFm.Edit3Exit(Sender: TObject);

begin

CheckVal(Edit3,B,5);

end;

procedure TModelMainFm.Edit4Exit(Sender: TObject);

begin

CheckVal(Edit4,K1);

end;

procedure TModelMainFm.Edit5Exit(Sender: TObject);

begin

CheckVal(Edit5,K2);

end;

procedure TModelMainFm.Edit6Exit(Sender: TObject);

begin

CheckVal(Edit6,K3,5);

end;

procedure TModelMainFm.Edit7Exit(Sender: TObject);

begin

CheckVal(Edit7,Y0);

end;

procedure TModelMainFm.Edit8Exit(Sender: TObject);

begin

CheckVal(Edit8,YY0);

end;

procedure TModelMainFm.Edit9Exit(Sender: TObject);

begin

CheckVal(Edit9,Z0);

end;

procedure TModelMainFm.Edit11Exit(Sender: TObject);

begin

CheckVal(Edit11,dt);

end;

procedure TModelMainFm.Edit12Exit(Sender: TObject);

begin

CheckVal(Edit12,E,5);

end;

procedure TModelMainFm.SpinEdit1Change(Sender: TObject);

begin

n := SpinEdit1.Value;

end;

procedure TModelMainFm.Button1Click(Sender: TObject);

var

i,G : Integer;

D1,D2,D3,D4,D5,D6,D7 : Double;

YY,FF,ZZ : Double;

begin

SetLength(T,n+1);

SetLength(X,n+1);

SetLength(Y,n+1);

SetLength(F,n+1);

SetLength(Z,n+1);

{ Calculattion of D1..D7 }

D1:=A1/(A1+dt*A2);

D2:=-dt/(A1+dt*A2);

D3:=dt*K1/(A1+dt*A2);

D4:=dt*K2/(A1+dt*A2);

D5:=dt;

D6:=B/(dt+B);

D7:=dt*K3/(B-dt);

{ Primary conditions }

i:=0;

T[i]:=0;

X[i]:=0.5+0.5*T[i]-0.01*sqr(T[i])*T[i];

Y[i]:=Y0;

F[i]:=YY0;

Z[i]:=Z0;

{ Prediction }

Y[i+1]:=Y0;

F[i+1]:=YY0;

Z[i+1]:=Z0;

{ Calculattion of X=f(t) }

for i:=1 to n do

begin

T[i]:=dt*i;

X[i]:=0.5+0.5*T[i]-0.01*sqr(T[i])*T[i];

{ Calculattion of F=f(t), Y=f(t), Z=f(t) }

Repeat

G:=0;

FF:=D1*F[i-1]+D2*Y[i]+D3*X[i]+D4*Z[i];

YY:=Y[i-1]+D5*F[i];

ZZ:=D6*Z[i-1]+D7*Y[i];

if abs(F[i]-FF)>E then G:=G+1;

if abs(Y[i]-YY)>E then G:=G+1;

if abs(Z[i]-ZZ)>E then G:=G+1;

F[i]:=FF;

Y[i]:=YY;

Z[i]:=ZZ;

Until G=0;

{ Prediction }

if i<n then begin

Y[i+1]:=Y[i];

F[i+1]:=F[i];

Z[i+1]:=Z[i];

end;

end;

{ Output results}

StringGrid1.RowCount := N + 2;

StringGrid1.Cells[0,0] := 'I';

StringGrid1.Cells[1,0] := 'T';

StringGrid1.Cells[2,0] := 'X';

StringGrid1.Cells[3,0] := 'Y';

StringGrid1.Cells[4,0] := 'F';

StringGrid1.Cells[5,0] := 'Z';

for I := 0 to n do begin

StringGrid1.Cells[0,I+1] := IntToStr(I);

StringGrid1.Cells[1,I+1] := FloatToStrF(T[I],ffFixed,8,3);

StringGrid1.Cells[2,I+1] := FloatToStrF(X[I],ffFixed,8,5);

StringGrid1.Cells[3,I+1] := FloatToStrF(Y[I],ffFixed,8,5);

StringGrid1.Cells[4,I+1] := FloatToStrF(F[I],ffFixed,8,5);

StringGrid1.Cells[5,I+1] := FloatToStrF(Z[I],ffFixed,8,5);

end;

end;

procedure TModelMainFm.SaveToFile(Fn: String);

var

f1 : TextFile;

I : integer;

begin

AssignFile(f1,Fn);

ReWrite(f1);

Writeln(f1,' i T X Y F Z');

for i:=0 to n do begin

Writeln(f1,i:2,' ',T[i]:9:5,' ',X[i]:9:5,' ',Y[i]:9:5,' ',

F[i]:9:5,' ',Z[i]:9:5);

end;

CloseFile(f1);

end;

procedure TModelMainFm.Button3Click(Sender: TObject);

begin

Close;

end;

procedure TModelMainFm.Button2Click(Sender: TObject);

begin

if SaveDialog1.Execute then SaveToFile(SaveDialog1.FileName);

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]