Мельник В.М., Ковалець О.Я.,
Карачун В.В., Михайленко Н.М.
Національний технічний університет України «КПІ»
АВТОМАТИЗОВАНИЙ АНАЛІЗ ДИНАМІКИ СТРУНИ
Розрахунок і побудова
траєкторій руху окремих матеріальних
точок в дискретній
моделі струни доцільно оформити
у вигляді підпрограми Graphic, тобто:
Procedure Graphic;
Var S:integer;
Y:real;
J2:char;
Begin
PutA; F:=1; Ou(‘поновлюємо систему координат (Y/N)?)');
Repeat
J2:=UpCase(ReadKey)
Until J2 in [‘Y','N'];
if J2='Y' then
Begin ClearDevice; F:=1 End
Else F:=0;
Xu:=(GetMaxX-L) div 2;
CoefS; Ymin:=0;
Ymax:=0;
Rectangle(Xu, 1, Xu+L, 5);
Mo[0]:=0;
For S:=1 to L do
Begin
Line(Xu+S, 2, Xu+S, 4);
For S:=1 to Ks do Stept;
Y:=Yt[Nx]; Mo[S]:=Y;
If F=1 then
Begin
If Y<Ymin then Ymin:=Y;
If Y>Ymax then Ymax:=Y
End
End;
If F=1 then
Xmin:=0; Xmax:=D;
End;
MoveTo(Xu, Y0-round(Mo[0]/Dy));
For S:=1 to L do LineTo(Xu+S, Y0-round(Mo[S]/Dy))
End;
Щоб мати змогу
спостерігати зміни форми струни в часі, напишемо спочатку процедуру Profil,
яка формує профіль струни в деякий фіксований момент.
Procedure Profil(Y:Coef;С:integer);
Var S:integer;
Cp:word;
Begin
If С=1 then SetWriteMode(1)
else
Begin Cp:=GetColor; SetColorй
End;
MoveTo(Xu, Y0-round(Y[0]/Dy));
For S:=1 to L do
LineTo(Xu+round(S*Hx/Dx, Y0-round(Y[S]/Dy));)
If С=-1 then SetWriteMode(0)
Else SetColor(Cp)
End;
«Кінофільм» про зміну
форми струни з течією часу демонструє підпрограма Dynam.
Procedure Dynam;
Const Km=1.05;
Var Z, S, Zt:integer;
Ymaxp:real;
Yp:Coef;
J1, J2:char;
Tex:string[20];
Begin
PutA; Our(‘Ymax-максимальне значення Y на шкалі', Ymax);
Xmin:=0; Xmax:=lng;
Repeat {по J1}
ClearDevice;
Ou(‘1(спостереження), 2(фікс.останнього зобр.), ESC(вихід)');
Repeat
J1:=UpCase(ReadKey)
Until J1 in [‘1','2',#27];
If J1<>#27 then
Ymin:=- Ymax; X0Y0(false); Init;
SystCoor; CoefS; Profil(Yt-1);
PutA; J2:=' N';
Case J1 of
‘1': begin
Oui(‘Zt-число
кроків за t між кадрами', Zt);
PutA; Ou(Tex);
Repeat {по J2}
If KeyPressed then J2:=ReedKey;
If J2<>#27 then
Begin
YmaxP:=Ymax;
Case J2
‘<':
Ymax:=Ymax*Km;
‘=':;
‘>':
Ymax:=Ymax/Km;
‘0': begin
PutA;
Ou(‘натисніть Enter');
Repeat
J2:=ReedKey
Until J2=#13;
PutA; Ou(Tex)
End;
End;
Yp:=Yt;
For S:=1 to Zt do Stept;
Profil(Yp-1);
If Ymax<>YmaxP then
Begin
Ymin:=- Ymax; X0Y0(false)
End;
Profil
(Yt-1);Delay(200)
End;
Until J2=#27
End;
‘2': begin
Oui(‘Zt-число
кроків за t між кадрами', Zt);
Repeat
PutA;
Ou(‘1-наступна крива), Esc (вых)');
For S:=1 to Zt do Stept;
Profil(Yt, 1);
Repeat
J2:=ReadKey
Until J2 in [#27,'1']
Until J2=#27
end
end
until J1=#27
end;
.