Мельник В.М., Ковалець О.Я., Карачун В.В., Михайленко Н.М.

Національний технічний  університет України «КПІ»

АВТОМАТИЗОВАНИЙ АНАЛІЗ ДИНАМІКИ СТРУНИ

 

Розрахунок і побудова траєкторій руху окремих матеріальних точок в дискретній моделі струни доцільно оформити у вигляді підпрограми 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

Begin

Xmin:=0; Xmax:=D;

X0Y0(false);  SystCoor

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

Begin

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;

.