Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программный комплекс Анализ систем 3.1 / PROG / ASM86 / ASM_PAS / asm_exam
.pas {------------------------------------------------}
{ (c) …ўбвЁЈҐҐў „.‚. }
{ ЏаЁ¬Ґа ЁбЇ®«м§®ў Ёп ЎЁЎ«Ё®вҐЄЁ, }
{ ᮧ¤ ®© Ї ЄҐв®¬ "Ђ «Ё§ бЁб⥬" }
{ ¤«п п§лЄ ASSEMBLER ¤«п Ї бЄ «п }
{------------------------------------------------}
{ Їгбвм ᮧ¤ п ЎЁЎ«Ё®вҐЄ §лў Ґвбп CTRL.ASM }
{ Їгбвм ® бЄ®¬ЇЁ«Ёp®ў ў CTRL.OBJ }
{------------------------------------------------}
uses Graph, Crt;
Type
Float = Single;
{$L CTRL.OBJ} { Ї®¤Є«озЁвм ўҐиоо ЎЁЎ«Ё®вҐЄг }
{ ®Ўкпў«ҐЁҐ ўҐиЁе Їp®жҐ¤гp }
procedure _Initialization; far; external;
procedure _Controller; far; external;
Const
TimeStep = 0.003; { и Ј а бзҐв }
AmplitudeY = 10; { ¬Ї«Ёвг¤ ўл室 }
SecPerScr = 0.3; { ᥪ㤠нЄа }
Var
_Input0, _Input1, _Output0 : Float; { ўе®¤ 0, ўе®¤ 1, ўл室. }
{ ќвЁ ЇҐаҐ¬ҐлҐ ®Ўп§ вҐ«м® ¤®«¦л }
{ Ўлвм ®Ўпў«Ґл, в.Є. ®Ё ЁбЇ®«м§говбп ў }
{ ў OBJ-д ©«Ґ }
Task, v, U : Float; { § ¤ ЁҐ, бЄ®а®бвм, Їа殮ЁҐ }
Time : Float; { ⥪г饥 ўаҐ¬п }
Const
{ ¤«п ЁЁжЁ жЁЁ Јp дЁЄЁ }
Driver : Integer = Detect;
Mode : Integer = 0;
DrvPath = 'C:\BP\BGI'; { ў®§¬®¦® г ‚ б ¤pгЈ®© Їгвм Є BGI-¤p ©ўҐp ¬ }
{----------------------------------------------}
{ Њ®¤Ґ«м н«ҐЄвதўЁЈ ⥫п. }
{ U- Їа殮ЁҐ. }
{ ‚®§ўа й Ґв - бЄ®а®бвм }
{----------------------------------------------}
Function Engin( U : Float ) : Float;
Const
A1 : Float = 0;
A2 : Float = 0;
K = 1; { Є®нд. ЇҐаҐ¤ зЁ }
Te = 0.01; { н«ҐЄваЁзҐбЄ п Ї®бв®п п ўаҐ¬ҐЁ }
Tm = 0.03; { ¬Ґе ЁзҐбЄ п Ї®бв®п п ўаҐ¬ҐЁ }
begin
A1:=A1+(U-A1)*TimeStep/Te;
A2:=A2+(A1-A2)*TimeStep/Tm;
Engin:=A2*K;
end;
{---------------------------------------------}
{ ђЁбгҐв Ї®«Ґ Ја дЁЄ }
{---------------------------------------------}
Procedure DrawField;
var
x, y : Integer;
s : string[6];
T : float;
begin
{ Ї®«Ґ }
cleardevice;
SetFillStyle( SolidFill, DarkGray);
Bar(0,20,GetMaxX,GetMaxY-20);
{ бҐвЄ га®ўҐ© }
for x:=-4 to 4 do
begin
if x=0 then SetColor( White ) else SetColor( LightGray );
y:=(GetMaxY+1) div 2 - (GetMaxY-39)*x div 8;
Line(0,y,GetMaxX,y);
SetColor( White );
Str( x * AmplitudeY/4:0:1, s);
OutTextXY( 4, y-9, s);
end;
{ бҐвЄ ўаҐ¬ҐЁ }
T:=0;
repeat
x := round( T * GetMaxX / SecPerScr );
SetColor( LightGray );
Line( x, 20, x, GetMaxY-20);
SetColor( White );
Str( T:0:2, s);
OutTextXY( x-TextWidth(s) div 2, GetMaxY-10, s);
T:=T + SecPerScr / 10;
until x >= GetMaxX;
end;
{--------------------------------}
{ бв ўЁв ®зҐpҐ¤го в®зЄг Јp дЁЄ }
{--------------------------------}
Procedure PutPoint( v : Float );
Const
OldX : Integer = 0;
OldY : Integer = 0;
var
x, y : Integer;
begin
x:=round( Time * GetMaxX / SecPerScr );
y:=(GetMaxY+1) div 2 - round((GetMaxY-39)*v/AmplitudeY/2);
if x=0 then OldY:=GetMaxY div 2;
SetColor( LightRed );
SetLineStyle( SolidLn, 0, ThickWidth);
Line( OldX, OldY, x, y);
SetLineStyle( 0, 0, 0);
OldX := x;
OldY := y;
end;
{-------------------------------}
{ Ћб®ў п Їp®Јp ¬¬ }
{-------------------------------}
begin
InitGraph( Driver, Mode, DrvPath ); { гбв ®ўЁвм Јp д. pҐ¦Ё¬ }
DrawField; { pЁб®ў вм Ї®«Ґ Јp дЁЄ }
_Initialization; { **** €Ќ€–€€ђЋ‚Ђ’њ ђ…ѓ“‹џ’Ћђ }
{ ®б®ў®© жЁЄ« }
v:=0;
Task:=5;
Repeat
PutPoint(v); { pЁб®ў вм в®зЄг }
_Input0:=Task; { ЇаЁбў®Ёвм § 票Ґ ўе®¤л¬ ЇҐаҐ¬Ґл¬ }
_Input1:=v;
_Controller; { **** ‚›‡‚Ђ’њ ђ…ѓ“‹џ’Ћђ }
U:=_Output0; { Їа®зЁв вм § 票Ґ ўл室®© ЇҐаҐ¬Ґ®© }
v:=Engin(U); { ¤ўЁЈ ⥫м }
Time:=Time+TimeStep;
until Time >= SecPerScr;
readkey;
CloseGraph; { ‡ Єpлвм Јp дЁЄг }
end.
{ (c) …ўбвЁЈҐҐў „.‚. }
{ ЏаЁ¬Ґа ЁбЇ®«м§®ў Ёп ЎЁЎ«Ё®вҐЄЁ, }
{ ᮧ¤ ®© Ї ЄҐв®¬ "Ђ «Ё§ бЁб⥬" }
{ ¤«п п§лЄ ASSEMBLER ¤«п Ї бЄ «п }
{------------------------------------------------}
{ Їгбвм ᮧ¤ п ЎЁЎ«Ё®вҐЄ §лў Ґвбп CTRL.ASM }
{ Їгбвм ® бЄ®¬ЇЁ«Ёp®ў ў CTRL.OBJ }
{------------------------------------------------}
uses Graph, Crt;
Type
Float = Single;
{$L CTRL.OBJ} { Ї®¤Є«озЁвм ўҐиоо ЎЁЎ«Ё®вҐЄг }
{ ®Ўкпў«ҐЁҐ ўҐиЁе Їp®жҐ¤гp }
procedure _Initialization; far; external;
procedure _Controller; far; external;
Const
TimeStep = 0.003; { и Ј а бзҐв }
AmplitudeY = 10; { ¬Ї«Ёвг¤ ўл室 }
SecPerScr = 0.3; { ᥪ㤠нЄа }
Var
_Input0, _Input1, _Output0 : Float; { ўе®¤ 0, ўе®¤ 1, ўл室. }
{ ќвЁ ЇҐаҐ¬ҐлҐ ®Ўп§ вҐ«м® ¤®«¦л }
{ Ўлвм ®Ўпў«Ґл, в.Є. ®Ё ЁбЇ®«м§говбп ў }
{ ў OBJ-д ©«Ґ }
Task, v, U : Float; { § ¤ ЁҐ, бЄ®а®бвм, Їа殮ЁҐ }
Time : Float; { ⥪г饥 ўаҐ¬п }
Const
{ ¤«п ЁЁжЁ жЁЁ Јp дЁЄЁ }
Driver : Integer = Detect;
Mode : Integer = 0;
DrvPath = 'C:\BP\BGI'; { ў®§¬®¦® г ‚ б ¤pгЈ®© Їгвм Є BGI-¤p ©ўҐp ¬ }
{----------------------------------------------}
{ Њ®¤Ґ«м н«ҐЄвதўЁЈ ⥫п. }
{ U- Їа殮ЁҐ. }
{ ‚®§ўа й Ґв - бЄ®а®бвм }
{----------------------------------------------}
Function Engin( U : Float ) : Float;
Const
A1 : Float = 0;
A2 : Float = 0;
K = 1; { Є®нд. ЇҐаҐ¤ зЁ }
Te = 0.01; { н«ҐЄваЁзҐбЄ п Ї®бв®п п ўаҐ¬ҐЁ }
Tm = 0.03; { ¬Ґе ЁзҐбЄ п Ї®бв®п п ўаҐ¬ҐЁ }
begin
A1:=A1+(U-A1)*TimeStep/Te;
A2:=A2+(A1-A2)*TimeStep/Tm;
Engin:=A2*K;
end;
{---------------------------------------------}
{ ђЁбгҐв Ї®«Ґ Ја дЁЄ }
{---------------------------------------------}
Procedure DrawField;
var
x, y : Integer;
s : string[6];
T : float;
begin
{ Ї®«Ґ }
cleardevice;
SetFillStyle( SolidFill, DarkGray);
Bar(0,20,GetMaxX,GetMaxY-20);
{ бҐвЄ га®ўҐ© }
for x:=-4 to 4 do
begin
if x=0 then SetColor( White ) else SetColor( LightGray );
y:=(GetMaxY+1) div 2 - (GetMaxY-39)*x div 8;
Line(0,y,GetMaxX,y);
SetColor( White );
Str( x * AmplitudeY/4:0:1, s);
OutTextXY( 4, y-9, s);
end;
{ бҐвЄ ўаҐ¬ҐЁ }
T:=0;
repeat
x := round( T * GetMaxX / SecPerScr );
SetColor( LightGray );
Line( x, 20, x, GetMaxY-20);
SetColor( White );
Str( T:0:2, s);
OutTextXY( x-TextWidth(s) div 2, GetMaxY-10, s);
T:=T + SecPerScr / 10;
until x >= GetMaxX;
end;
{--------------------------------}
{ бв ўЁв ®зҐpҐ¤го в®зЄг Јp дЁЄ }
{--------------------------------}
Procedure PutPoint( v : Float );
Const
OldX : Integer = 0;
OldY : Integer = 0;
var
x, y : Integer;
begin
x:=round( Time * GetMaxX / SecPerScr );
y:=(GetMaxY+1) div 2 - round((GetMaxY-39)*v/AmplitudeY/2);
if x=0 then OldY:=GetMaxY div 2;
SetColor( LightRed );
SetLineStyle( SolidLn, 0, ThickWidth);
Line( OldX, OldY, x, y);
SetLineStyle( 0, 0, 0);
OldX := x;
OldY := y;
end;
{-------------------------------}
{ Ћб®ў п Їp®Јp ¬¬ }
{-------------------------------}
begin
InitGraph( Driver, Mode, DrvPath ); { гбв ®ўЁвм Јp д. pҐ¦Ё¬ }
DrawField; { pЁб®ў вм Ї®«Ґ Јp дЁЄ }
_Initialization; { **** €Ќ€–€€ђЋ‚Ђ’њ ђ…ѓ“‹џ’Ћђ }
{ ®б®ў®© жЁЄ« }
v:=0;
Task:=5;
Repeat
PutPoint(v); { pЁб®ў вм в®зЄг }
_Input0:=Task; { ЇаЁбў®Ёвм § 票Ґ ўе®¤л¬ ЇҐаҐ¬Ґл¬ }
_Input1:=v;
_Controller; { **** ‚›‡‚Ђ’њ ђ…ѓ“‹џ’Ћђ }
U:=_Output0; { Їа®зЁв вм § 票Ґ ўл室®© ЇҐаҐ¬Ґ®© }
v:=Engin(U); { ¤ўЁЈ ⥫м }
Time:=Time+TimeStep;
until Time >= SecPerScr;
readkey;
CloseGraph; { ‡ Єpлвм Јp дЁЄг }
end.