Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

диссертация модальная логика

.pdf
Скачиваний:
17
Добавлен:
25.03.2016
Размер:
8.07 Mб
Скачать

-401 -

Приложение 1

DvigExist, MassaExist, IndicExist, TeplExist: boolean;

procedure GetLabel; public

{Public declarations } BeChange: boolean; end;

var

SelectDVS: TSelectDVS;

implementation

{$R *.DFM}

procedure TSelectDVS.btDvigInClick(Sender: TObject); begin

BeChange:=true;

lbDvig.Font.Color:=clBlack; lbDvig.Caption:='- определены !'; WinExec('dvs\dina.exe 1 r,sw_show); end;

procedure TSelectDVS.btMassalnCiick(Sender: TObject); begin

BeChange:=true;

lbMassa.Font.Color:=clBlack; lbMassa.Caption:='- определены !'; WinExec('dvs\dina.exe 1 3',sw_show); end;

procedure TSelectDVS.btIndicInClick(Sender: TObject); begin

BeChange:=true;

lbIndic.Font.Color:=clBlack; lblndic.Caption:='- определены !'; WinExec('dvs\dina.exe 1 2',sw_show); end;

procedure TSelectDVS.btTeplInClick(Sender: TObject);

-402-

Приложение 1

begin BeCliange:=true;

lbTepi.Font.Color:=clBlack; lbTepl.Caption:='- определены !'; WinExec('dvs\dina.exe 1 2',sw_show); end;

procedure TSelectDVS.btDvigOutClick(Sender: TObject); begin

WinExec('dvs\dina.exe 2 r,sw_sliow); end;

procedure TSeIectDVS.btMassaOutClick(Sender: TObject); begin

WinExec('dvs\dina.exe 2 2',sw_siiow); end;

procedure TSelectDVS.btTeplOutClick(Sender: TObject); begin

WinExec('dvs\dina.exe 2 3',sw_show); end;

procedure TSelectDVS.btIndicOutClick(Sender: TObject); begin

WinExec('dvs\dina.exe 2 4',sw_siiow); end;

procedure TSelectDVS.GetLabel;

procedure SetLabel(difinite; boolean; Sender: TLabel); begin

if difinite=true then begin

Sender.Font.Color:=clBlack; Sender.Caption:='- определены !'; end

else begin Sender.Font.Color:=clRed;

Sender.Caption:='- не определены !'; end;

end; {procedure}

-403 -

Приложение 1

begin {procedure GetLabel} SetLabel(FileExists('dvs\dvig.dat'),IbDvig); SetLabeI(FiIeExists('dvs\massa.dat'),lbMassa); SetLabel(FileExists('dvs\indic.dat'),IbIndic); SetLabel(FileExists('dvs\tepl.dat'),lbTepl); end; {procedure GetLabel}

procedure TSelectDVS.FormActivate(Sender: TObject); begin

GetLabel;

DvigExist:=FileExists('dvs\dvig.dat');

MassaExist:=FileExists('dvs\massa.dat');

IndicExist:=FileExists('dvs\indic.dat');

TeplExist:=FileExists('dvs\tepl.dat');

BeChange:=false;

end;

procedure TSelectDVS.btOkClick(Sender; TObject); begin

if (FileExists('dvs\dvig.daf)=false) or (FileExists('dvs\massa.dat')=false) or (FileExists('dvs\indic.dat')=false) or

(FileExists('dvs\tepl.dat')=false) then begin GetLabel;

Beep;

ShowMessage('Oпpeдeлитe все данные !'); ModalResult:=mrNone;

end;

end;

procedure TSelectDVS.btCancelClick(Sender; TObject); begin

if DvigExist=false then deletefile('dvs\dvig.dat');

if MassaExist=false then deletefile('dvs\massa.dat'); if IndicExist=false then deletefile('dvs\indic.dat'); if TeplExist=false then deletefile('dvs\tepldat'); end;

end.

- 404 -

Приложение 1

unit Tools;

interface

uses DForce, Forms;

type

TSaveStruct=record IsForce: boolean; Tkt: byte;

BegZ, EndZ, StepZ: integer; chP,chI,chF: boolean; CurOb: integer;

Z:integer;

D:real; Pres.- byte; CS: integer;

RA: TAngel3D; AngSD: TAngelSD; W,H,L,T: integer; WS: TWindowState;

StrData; array[0..19] of char;

end;

function StrToAnsi(StrOem:string):string;

procedure Rotate2D(var X,Y : real; RotAng: TAngel; RDir: boolean);

function GradToSiCo(Ang:integer): TAngel;

function SiCoToGrad(Ang: TAngel): integer;

function GetAngel2D(X01d,Y01d, XNew,YNew: real): TAngel;

function GetAngel3D(VX,VY,VZ:TVector): TAngel3D;

function GetNewNumber(NewName: string): byte;

function GetBankName(Vl: mteger; V2: real): string;

-405 -

Приложение 1

function GetNumbPrtp(NanieP: string): word;

procedure ReadDVS;

implementation

uses Windows, SysUtils, Math, MainUnit, Raschet;

flinction StrToAnsi(StrOem:string):string; var

PCharOem,PCharAnsi: array [0..256] of char; begin {flinction} strpcopy(PCharOem,StrOem); OemToChar(PCharOem,PCharAnsi); StrToAnsi:=PCharAnsi;

end; {function}

// процедура поворота 2D точки на заданный угол sin и cos в зад. направ. procedure Rotate2D(var X,Y : real; RotAng: TAngel; RDir: boolean);

var ValOld: real;

begin // procedure Rotate2D

// если RDir=true, то против часовой стрелки, иначе по час. стрелке if RDir=false then RotAng.SinAng:=-RotAng.SinAng;

Val01d:=X; X:=Val01d*RotAng.CosAng-Y*RotAng.SinAng; Y:=Val01d*RotAng.SinAng+Y*RotAng.CosAng; end; // procedure Rotate2D

function GradToSiCo(Ang:integer): TAngel; begin {function GradToSiCo} GradToSiCo.SmAng:=sin(degtorad(Ang)); GradToSiCo.CosAng:=cos(degtorad(Ang)); end; {function GradToSiCo}

function SiCoToGrad(Ang: TAngel): integer; var

AngRad: extended;

begin {function SiCoToGrad}

if Ang.SinAng>0 then AngRad:=arccos(Ang.CosAng) else AngRad:=2*Pi-arccos(Ang.CosAng);

-406-

Приложение 1

SiCoToGrad:=round(radtodeg(AngRad)); end; {function SiCoToGrad}

flinction GetAngei2D(X0]d,Y01d, XNew,YNew: real): TAngel; var

qweAng: TAngel;

// вспомогательная функция определения косинуса угла между векторами flinction GetCos(Xl,Yl,X2,Y2: real): real;

var modl,mod2: real; begin // function GetCos

modl:=sqrt(Xl*Xl+Yl*Yl); mod2:=sqrt(X2*X2+Y2 *Y2);

if (modl=0) or (mod2=0) then GetCos:=0

else GetCos:=(Xl *X2+Y] *Y2)/(modl *mod2); end; // function GetCos

begin //function GetAngel2D

//округляем координаты старого вектора до приемлимого знака X01d:=(trunc(X01d* 1Е8))/1Е8;

Y01d:=(trunc(Y01d*lE8))/lE8;

//определяем синус и косинус угла между старым вектором и ОХ with qweAng do begin

CosAng:=GetCos(X01d, YOld, 1,0); ifY01d>Othen //угол поворота больше 180 SinAng:=-sqrt(l-(CosAng*CosAng))

else // угол поворота меньше или равно 180 SinAng:=sqrt(l-(CosAng*CosAng));

end; {with}

//совмешаем старый вектор с осью ОХ путем поворота

//поворачиваем старый вектор на вычисленный угол Rotate2D(X01d,Y01d,qweAng,true);

//поворачиваем новый вектор на вычисленный угол Rotate2D(XNew,YNew,qweAng,true);

//округляем координаты нового вектора до приемлемого знака XNew:=(trunc(XNew* 1 Е8))/1 Е8;

YNew:=(trunc(YNew* 1 Е8))/1Е8;

//вычисляем искомые синус и косинус угла между новым и старым век. with qweAng do begm

CosAng:=GetCos(X01d,Y01d,XNew,YNew); if YNew>0 then // угол поворота больше 180 SinAng:=-sqrt(l-(CosAng*CosAng))

-407-

Приложение 1

else // угол поворота меньше или равно 180 SinAng:=sqrt( 1 -(CosAng*CosAng));

end; {with}

// определяем значение функции GetAngel2D :=qweAng;

end; //function GetAngel2D

function GetAngel3D(VX,VY,VZ:TVector): TAngelSD; const

VXB: TVector = (A:l; B:0; C:0);

VYB: TVector = (A:0; B : l ; C:0);

VZB: TVector = (A:0; B:0; C:l); var

qweAngSD: TAngelSD; begin {function GetAngelSD} with qweAngSD do begin

//определяем угол поворота вокруг оси OZ 0ZAng:=GetAngel2D(VYB.A, VYB.B, VY.A, VY.B);

//поворачиваем оси VX, VY и VZ вокруг OZ Rotate2D(VX.A,VX.B,OZAng,true); Rotate2D(VY.A,VY.B,OZAng,true); Rotate2D(VZ.A,VZ.B,OZAng,true);

//определяем угол поворота вокруг оси ОХ OXAng:=GetAngel2D(VYB.B, VYB.С, VY.B, VY.C);

//поворачиваем оси VX, VY и VZ вокруг OX Rotate2D(VX.B,VX.C,OXAng,true); Rotate2D(VY.B,VY.C,OXAng,true); Rotate2D(VZ.B,VZ.C,OXAng,true);

//определяем угол поворота вокруг оси 0Y 0YAng:=GetAngel2D(VXB.A, VXB.C, VX.A, VX.C);

end; {with} GetAngel3D:=qweAngSD; end; {function GetAngelSD}

fijnction GetNewNumber(NewName: string): byte;

var

 

i: byte;

 

NameVersion: byte;

// счетчик форм с одним заголовком

OldName: string;

 

NumberName: byte;

//индекс без скобок

 

-408 -

 

Приложёние 1

NewNumber: byte;

// индекс присваиваемый новой форме

SetOfNumber:set of byte;

// множество индексов форм с одним именем

begin

 

//инициализация

NameVersion:=l;

NewNumber:=l;

SetOfNumber:=[];

//перебираем все имеющиеся паттерны

for i:=0 to (MainForm.MDICliiIdCount-1) do begin 01dName:=MainForm.MDIChildren[i].Caption;

///получаем номер в скобках [] ifpos('[',01dName)oO

then NumberNanie:=strtoint(copy(01dName,pos('[',01dName)+1, pos(']',01dName)-pos('[',01dName)-l))

else NumberName—1;

///получаем название силы диаграммы

delete(01dName, 1 ,pos(' ',01dName));

delete(01dName,pos(' ',01dName),length(01dName)-pos(' ',01dName)+l);

/// сравниваем заголовки старой и новой форм if NewName=01dName then begin inc(NameVersion); // учет если совпали

SetOfNumber:=SetOfNumber+[NumberName]; // запоминаем номер end; {if}

end; {for i:=0 to ...}

// находим свободный номер в множестве номеров for i:=l to NameVersion do

if not(i in SetOfNumber) then begin NewNumber:=i;

break;

end;

// возвращаем значение функции GetNewNumber:=NewNumber; end;

fiinction GetBankName(Vl: integer; V2: real): string; var

faReestr: file of TReestr; TempReestr: TReestr; MaxNOfBFile: word; NOfBankFile: word;

-409-

Приложение 1

ij: byte;

begin {GetBanlcName}

//открываем файл-реестр assignfile(faReestr,'ban]<\Reestr');

if fileexists('ban]<:\Reestr')=faIse then begin rewrite(faReestr);

closefile(faReestr);

end;

reset(faReestr);

//ищем запись в реестре с искомыми значениями опр-щих перем-ых MaxNOfBFi]e:=0;

NOfBanlcFile:=0;

while not eof(faReestr) do begin read(faReestr, TempReestr);

if (TempReestr.Var 1 =V 1 )and(TempReestr. Var2=V2) then NOfBankFile:=TempReestr.NumbOfFile;

if MaxNOflBFile<TempReestr.NumbOflFile thenMaxNOfBFile-TempReestr.NmnbOfFile;

end; {while}

//если искомая запись не найдена, то создаем соотв. файлы

if NOfBankFile=0 then begin

///получаем базовое имя новых файлов inc(MaxNOfBFile); Result:=inttostr(MaxNOfBFile); j:=length(Result);

for i:=j to 6 do insert('0',Result,l);

///создаем новые файлы

CreateFiles(Vl ,V2,Result);

/// дописываем в файл-реестр новую запись with TempReestr do begin

Varl:=Vl;

Var2:=V2;

NumbOfFile:=MaxNOfBFile; end; {with} write(faReestr,TempReestr); end {if}

else begin

// получаем базовое имя имеющихся банковских файлов Result:=inttostr(NOfBankFile);

j:=length(Result);

-410-

Приложение 1

for i—j to 6 do insert('0',Result,l); end; {else}

// закрываем файл-реестр closefile(faReestr);

end; {GetBankName}

function GetNumbPrtp(NameP: string): word; var

i: word;

begin {function GetNumbPrtp} Result:=0;

for i:=0 to (MainForm.MDIChildCount-1) do

if MainForm.]VIDICliildren[i].Caption=NameP then begin Resuh:=i;

break;

end;

end; {function GetNumbPrtp}

procedure ReadDVS; var

i,qwel: integer; faDat: file of real; DatReal: real;

begin {procedure ReadDVS} assignfile(faDat,'dvs\dvig.dat'); reset(faDat);

seek(faDat,l);

read(faDat,DatReal); TAU:=round(DatReal); seek(faDat,4);

read(faDat,DatReal); NumbCyI:=round(DatReal); read(faDat,DatReal); KKR:=round(DatReai); read(faDat,DiamCyl);

read(faDat,HodPorsh);

read(faDat,Lambda);

seek(faDat,M);

read(faDat,DatReal); NumbRad:=round(DatReal); seek(faDat,19);

read(faDat,DatReal); qweI:=round(DatReal); if qwel=-2 then seek(faDat,20+KKR+NumbCyl)

else seek(faDat,20+NumbCyl);