# Структура екземплярів об’єктного типу і таблиць віртуальних методів, страница 2

Line(x-round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2),x+round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2));

Line(x+round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2),x,round(y+(r div 2)));

Circle(X,Y, r div 4);

end;

procedure TCirTrSq.Hide;

begin

SetColor(0);

Line(x,y-r,x+round(r*(sqrt(3)/2)),round(y+r/2));

Line(x+round(r*(sqrt(3)/2)),round(y+r/2),x-round(r*(sqrt(3)/2)),round(y+r/2));

Line(x-round(r*(sqrt(3)/2)),round(y+r/2),x,round(y-r));

Line(x,y+(r div 2),x-round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2));

Line(x-round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2),x+round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2));

Line(x+round((r div 2)*(sqrt(3)/2)),round(y-(r div 2)/2),x,round(y+(r div 2)));

Circle(X,Y,r div 4);

end;

{ Global peremennue    }

var

Points:  array [1..5] of TPoint;

T_treyg: array [1..5] of Ttreyg;

TtrInCirs: array [1..5] of   TtrInCir;

CirTrSqs: array [1..5] of TCirTrSq;

i, Gd, Gm: Integer;

{  service procedure implementations:                    }

{--------------------------------------------------------}

procedure writehexword(w: Word);

const

hexChars: array [0..\$F] of Char =

'0123456789ABCDEF';

begin

Graph.OutText (hexChars[Hi(w) shr 4]+

hexChars[Hi(w) and \$F]+

hexChars[Lo(w) shr 4]+

hexChars[Lo(w) and \$F]);

end;

procedure writestructtype(siz: word; ppp: pointer);

var

i,j: word;

St: string;

begin

for i:=0 to (siz - 1) div 2 do

begin

Graph.MoveTo(16,220+i*12);

writehexword(seg(ppp^));

Graph.OutTextXY(56,220+i*12,':');

Graph.MoveTo(64,220+i*12);

writehexword(ofs(ppp^)+i*2);

Graph.OutTextXY(96,220+i*12,'-');

Graph.MoveTo(104,220+i*12);

writehexword(memw[seg(ppp^):ofs(ppp^)+i*2]);

Str(memw[seg(ppp^):ofs(ppp^)+i*2],St);

Graph.OutTextXY(160,220+i*12,St);

end;

end;

procedure writestructvar(siz: word; ppp: pointer);

var

i: word;

St: string;

begin

for i:=0 to (siz - 1) div 2 do

begin

Graph.MoveTo(296,220+i*12);

writehexword(seg(ppp^));

Graph.OutTextXY(336,220+i*12,':');

Graph.MoveTo(344,220+i*12);

writehexword(ofs(ppp^)+i*2);

Graph.OutTextXY(376,220+i*12,'-');

Graph.MoveTo(384,220+i*12);

writehexword(memw[seg(ppp^):ofs(ppp^)+i*2]);

Str(memw[seg(ppp^):ofs(ppp^)+i*2],St);

Graph.OutTextXY(440,220+i*12,St);

end;

end;

procedure WriteStructMain;

var

siz: word;

ppp: pointer;

St: string;

c: char;

begin

{--------   Структура типа  TCirTwoSq -----------------------------}

Graph.Bar(0,200,639,479);

siz:=16;

ppp:=typeof(TCirTrSq);

Graph.OutTextXY(8,208,'TCirTrSq: ');

Str(siz,St);

Graph.OutTextXY(66,208,'size of VMT "TCirTrSq" = '+ St);

writestructtype(siz,ppp);

siz:=sizeof(CirTrSqs[1]);

ppp:=@CirTrSqs[1];

Graph.OutTextXY(268,208,'CirTrSqs[1]: ');

Str(siz,St);

Graph.OutTextXY(330,208,'size of variable "CirTrSqs[1]" = '+ St);

writestructvar(siz,ppp);

end;

{ Main  }

begin

Gd := Detect;

InitGraph(Gd, Gm, ' ');

if GraphResult <> grOk then  Halt(1);

ClearDevice;

for i:=1 to 5 do

begin

Points[i].Init(random(100),100+random(50),0);

Points[i].Show;

T_treyg[i].Init(random(200),100+random(100),30);

T_treyg[i].Show;

TtrInCirs[i].Init(random(200),100+random(150),50);

TtrInCirs[i].Show;

CirTrSqs[i].Init(random(200),100+random(200),40);

CirTrSqs[i].Show;

end;

WriteStructMain;

repeat

for i:=1 to 5 do

begin

Points[i].Move(i+1,0,0);

T_treyg[i].Move(i-1,i+1,2-integer(random(5)));

TtrInCirs[i].Move(i+1,i-1,2-integer(random(5)));

CirTrSqs[i].Move(0,i+1,2-integer(random(5)));

end;

WriteStructMain;

delay(3000);

until keypressed;

CloseGraph;

end.

Висновок: Використовуючи програму лабораторної роботи №1, отримали вивід структур екземпляра об’ктного типа і таблиці віртуальних методів відповідно до індивідуального завдання.