диссертация модальная логика
.pdf-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}
-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);