,,,
һ
-
5 1251
___________________
()
..
___________________
()
堠
. 頠 _____________2006.
- .-., 𠠠
..
__________________ ___________________
____________2006. ___________________
___________________
2006
TOC o "3-3" h z " 1;1; 2;2; 3;3" . PAGEREF _Toc106814102 h 3
1 . 4
1.1 . 4
1.2 . 4
2 . 6
2.1 . 6
2.1.1 . 6
2.1.2 . 6
2.2 . 8
2.2.1 . 9
2.2.2
. 10
2.2.3
. 11
3
16
3.1 . 16
3.2 . 20
. 2 PAGEREF _Toc106814102 h 3
. 24
. PAGEREF _Toc106814110 h 25
. 26
, , , - , , .
, , , , ..
: , ; ( , - , ); -, -, - ; , .
, , . 20 ..[1] , .
, .
[1],[3],[8].
, : , , , , .
, .. .. .[19]
, , . , , . . ( .) ( ). . , , .
. :
;
, ;
;
, .
1
1.1
, . , , , - . - , , . : , , , , . .
, , , .
, , .
, , -.
, , .
, .
, , , .
, , , .
, , .
, .
, .
, , .
A B , , A B.
A B , , A B.
, ; , .
, .
, , .
- D, D1, D2,... , Dm.
, . . , .
, .
, .
, .
1.2
G=(E,V,H) [6],[7], E , V , H H: VE*E. vÎV H (, , . i v, i = , j, j= i V, , i V. , .
iÎE .
vÎV .
, :
(1.2.1)
, , :
(1.2.2)
S
Q
l
k
i, ( ).
j, bj, () .
bj<0, bj>0, bj=0.
, :
(1.2.3)
:
" iÎE, " vÎV
(1.2.4)
(1.2.5)
(1.2.6)
2
2.1
2.1.1
- , . , .
. -, - : - , - , .. .
. , , , , .
, ( , ) .
2.1.2
, , , .
() .
, , , , .
-, ; , ; , .
() ( ).
, , , , , , (, ). .
, , . . , , , . , , .
: . , . ().
. , .
() , , - .
, .
. , . , . , , . , , . , ( ) . ( , ) . , , .
, , , . , . . , . , .
- , , . .
() () . .
():
1) (, , .), ;
2) ( , ), ;
3) ( ).
, -, , , . , , , , . , . () . , ..
: , , - ; () (), (); ( ) , .
, , , , .
30 , . , . , ( , , , .).
, ( ) , , , , . , .
. -, , . -, , , , .
( ) .
, . , , .
2.2 .
- . 150 , , , , , , .
, , ; , : 1,2,,n, , 2- :
, , .. . .
, - , , . , . , - CIC .
30- , , , . , .
, - , - - - , .
, , [19]:
) , , , ;
) .
, , . . , , , . , , , , , , . , .
, , .
2.2.1
, , , . , .., .., .. .
, , . , .
. , . , .
, ( ) . , . . .
. , .
2.2.2
: .
, , , .
- . .
, , . , :
1) ( ) , , , ( ) , .. ;
2) ;
3) , .
, , .
[7],[22],[24].
, , .
, .. [1]. , , .
2.2.3
- . (, , , ) , .
( ) .., .. , , , , . , .
() 1932 .., [4].
1934 .. , .
.. . , : , , .
, , 1936 . , , , . , ( ) .
, () .
:
1. - , , .
2. . .
3. .
4. , ( ).
, , (. 2 4) .. ( ) .
: ; , , , , . , :
1) ;
2) .
:
1) ;
2) , ;
3) , ( ), () ;
4) , , .
, .3 4 , .
. , ( ) . , , , .
, , .
- . , . , , , , , . .
, , . , .
, , , , [3].
. , , .
:
1. . - , , [3].
2. . , -, , [3]. , , , [15].
3. , , , , , . : , - .
4. .. [8] , . , .. [15], -.
, , , . . , , , .
, . ., .[22] , :
(2.2.3.1)
-
:
(2.2.3.2)
:
(2.2.3.3)
,
.. , , , . , , , .
.
, . . , , .
.
.[5] . , , , .
. ., [24]. .
.. .. [19] , , , .
, , .
.., .. .. [20], , , , () .
.. , , ,- [8].
. , .
, .
( ), , . .
, , . , , .
, , , , . , .
3
3.1
.
Delphi 7.0. Delphi
, , ,
- .
:
cHouse= class(TObject)
public
No:integer; //
XCoord:integer; // X
YCoord:integer; //
Pressure:real; //
IsSet:boolean; // true ()
Next:pointer; //
Prev:pointer; //
Name:AnsiString; //
kind:AnsiString; //
function IsInside(x:integer;y:integer):boolean; //
// , //. . : //true , false
procedure Draw(); // . , 蠠 ,
procedure
constructor cHouse(p:pointer); //
end;
:
cTube = class
public
StartHouse:pointer; // ,
FinishHouse:pointer; // ,
params: array[0..1] of real; //
Next:pointer; //
Prev:pointer; //
kind:integer; // : 0 , 1 , 2 , 3
AddPress:real; // ( - )
constructor cTube; //
end;
:
Base:pointer; //
BaseTube:pointer; //
E:real=0.1; //
P1:array[0..4] of real; //
BasePrice:real; //
maxD:real; //
minD:real; //
:
- ,
- , ,
AL-,
,
- ,
- ,
E- ,
EPS- , P
, E,EPS,AL , .
:
M,N,KX,KPP-, , , ,,, ,
P-, ( )
[i]- ,
[i]- ,
PP-, , P
, PP[i]=0- P , PP[i]=1- P.
KK-, .
:
SH-
P- ,
J,K,I,S- ,
PD-
PR, -
, :
function QR1(PH:real;PK:real; P1:array of real ; P2:array of real; kind:integer
;addit:real):real ;
var QQ:real;
begin
QQ:=sqrt(abs(PH+addit-PK)/(P1[0]*P1[1]*P1[2]*P1[3]*P1[4]*P2[1]));
if
(PH+addit then begin
QR1:=-QQ; exit; end else
begin QR1:=QQ; exit; end; end; : PH , ; PK , ; P1 ; P2 ; Kind ; Addit (
) ,
; ;
function
Q(Press:real; C:cHouse):real; var
temp:cTube; Q1,Q2:real; begin if
(BaseTube=nil) then
begin Q:=0; exit; end; temp:=cTube.Create; pointer(temp):=BaseTube; Q1:=0;
Q2:=0; while(1=1)
do begin if
(temp.kind<>3) then begin if
(temp.StartHouse=pointer(C)) then
Q1:=Q1+QR1(Press,(cHouse(temp.FinishHouse)).Pressure,P1,temp.params,temp.kind,temp.AddPress); if
(temp.FinishHouse=pointer(C)) then
Q2:=Q2+QR1( (cHouse(temp.StartHouse)).Pressure,Press,P1,temp.params,temp.kind,
temp.AddPress); end; if
(temp.Next=nil) then
break; pointer(temp):=temp.Next; end; Q:=Q2-Q1; end; : Press ,
; ,
, kind=3 ( ) , ..
,
( Q function
LOS (I:cHouse):real; var
Y, A, B, QA, QB, temp:cTube; begin A:=100000000.0; B:=0.0; if
(BaseTube=nil) then begin LOS:=0; end; temp:=cTube.Create; pointer(temp):=BaseTube; while(1=1)do
begin if
(temp.kind<>3) then begin if
(temp.StartHouse=pointer(I)) then begin if
(A>(cHouse(temp.FinishHouse).Pressure)) then
A:=cHouse(temp.FinishHouse).Pressure; if
(B<(cHouse(temp.FinishHouse).Pressure)) then
B:=cHouse(temp.FinishHouse).Pressure;end; if
(temp.FinishHouse=pointer(I)) then begin if
(A>((cHouse(temp.StartHouse).Pressure)+temp.AddPress)) then A:=cHouse(temp.StartHouse).Pressure+temp.AddPress; if(B<((cHouse(temp.StartHouse).Pressure)+temp.AddPress))
then B:=cHouse(temp.StartHouse).Pressure+temp.AddPress;end; end; if
(temp.Next=nil) then break; pointer(temp):=temp.Next; end; QA:=Q(A,I); QB:=Q(B,I); if
(QA=0.0) then PD:=A; if
(QB=0.0) then PD:=B; if
((QA>0)and(QB<0)) then
begin Y:=B; B:=A; A:=Y; Y:=QB; QB:=QA; QA:=Y; end; if
((QA<0)and(QB>0)) then while
((abs(QA)>=EPS)or(abs(QB)>=EPS)) do begin Y:=(A+B)/2.0; QY:=Q(Y,I); if
(abs(QY) begin PD:=Y; LOS:=PD; exit; end; if
(QY>0.0) then B:=Y else A:=Y; end; PD:=(A+B)/2; LOS:=PD; end; : I ,
I
procedure TForm1.Button1Click(Sender: TObject); // //
. var S,J:integer; temp:cHouse; begin if
(Base<>nil) then pointer(temp):=Base else exit; while(1=1)
do begin if
temp.IsSet=false then temp.Pressure:=0.0; if
(temp.Next=nil) then break; pointer(temp):=temp.Next; end; P1[0]:=StrToFloat(StringGrid1.Cells[1,1]); P1[1]:=StrToFloat(StringGrid1.Cells[2,1]); P1[2]:=StrToFloat(StringGrid1.Cells[3,1]); P1[3]:=StrToFloat(StringGrid1.Cells[4,1]); P1[4]:=StrToFloat(StringGrid1.Cells[5,1]); S:=1; while
(S<>0) do begin S:=0; if
(Base<>nil) then pointer(temp):=Base else exit; while(1=1)
do begin if
(temp.IsSet=false) then if
(abs(Q(temp.Pressure,temp))>=E) then
begin S:=S+1; temp.Pressure:=LOS(temp); end; if
(temp.Next=nil) then break; pointer(temp):=temp.Next; end; end; end;
,
,
. 3.2
1.
( , 1).
, (
, 2). : N=5 M=4 P (0) =100 P (4) =20 : P (1) =80 P (2) =60 P (3) =40 2.
( , 3).
. . : N=14 M=20
, ( , 4). :
3.2.1 3.
.
,
( , 1).
, (
, ,1 2). : N=134 M=148 : 3.2.2
.
. ,
- ,
. ,
,
,
.
, -,
-, . ,
, .. .
,
.
, .
, .
.
,
,
.
,
. .
.
,
, -, -, . .1 .2 .3 .4 .1 .2
Copyright (c) 2025 Stud-Baza.ru , , , .