Приложение. Исходный код системы (по модулям).
kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-srbl1)*srbl1));
Series3.AddXY(kn[1],kp[1]);
end;
if MCon='3' then
begin
for i:=1 to Query1.RecordCount do
begin
block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];
block2:=Query1.FieldValues['MARK3']+Query1.FieldValues['MARK4'];
block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];
sbl1:=sbl1+block1;
sbl2:=sbl2+block2;
sbl3:=sbl3+block3;
Query1.Next;
end;
srbl1:=sbl1/Query1.RecordCount;
srbl2:=sbl2/Query1.RecordCount;
srbl3:=sbl3/Query1.RecordCount;
Query1.First;
for i:=1 to Query1.RecordCount do
begin
block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];
block2:=Query1.FieldValues['MARK3']+Query1.FieldValues['MARK4'];
block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];
dx1:=dx1+sqr(block1-srbl1);
dx2:=dx2+sqr(block2-srbl2);
dx3:=dx3+sqr(block3-srbl3);
Query1.Next;
end;
sdxq1:=dx1/Query1.RecordCount;
sdxq2:=dx2/Query1.RecordCount;
sdxq3:=dx3/Query1.RecordCount;
sigm1:=sqrt(sdxq1);
sigm2:=sqrt(sdxq2);
sigm3:=sqrt(sdxq3);
m:=StrToFloat(maxb);
kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-srbl1)*srbl1))-1;
kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-srbl1)*srbl1));
kn[2]:=((m-srbl2)*((m-srbl2)*srbl2-sqr(sigm2))/(m*sqr(sigm2)-(m-srbl2)*srbl2))-1;
kp[2]:=1-((srbl2*((m-srbl2)*srbl2-sqr(sigm2)))/(m*sqr(sigm2)-(m-srbl2)*srbl2));
kn[3]:=((m-srbl3)*((m-srbl3)*srbl3-sqr(sigm3))/(m*sqr(sigm3)-(m-srbl3)*srbl3))-1;
kp[3]:=1-((srbl3*((m-srbl3)*srbl3-sqr(sigm3)))/(m*sqr(sigm3)-(m-srbl3)*srbl3));
Series3.Clear;
for i:=1 to 3 do
Series3.AddXY(kn[i],kp[i]);
end;
m:=0;
Series6.Clear;
for i:=0 to 20 do
begin
Series6.AddXY(m,-1*m);
m:=m+2;
end;
end;
end.
Модуль 7.
Этот модуль носит вспомогательный характер. Он необходим для правильного округления десятичных чисел с указанной степенью точности.
unit foxsoft;
interface
uses SysUtils;
function Okrugl(cs:double;numb:integer):double;
implementation
function Okrugl(cs:Double;numb:integer):double;
var
db,db1,db2:double;
i:int64;
ii,ink,i1:integer;
st:string;
begin
db:=db-int(cs);
ink:=1;
for ii:=1 to numb do ink:=ink*10;
db1:=db*ink;
db2:=cs*ink*100;
i:=trunc(int(db2)/100);
i1:=Trunc(db2-i*100);
if i1>49 then inc(i);
Result:=i/ink;
end;
end.