73 lines
1.2 KiB
Plaintext
73 lines
1.2 KiB
Plaintext
MODULE Vector;
|
|
|
|
IMPORT Out;
|
|
|
|
TYPE
|
|
Vector = POINTER TO VectorDesc;
|
|
VectorDesc = RECORD
|
|
x,y:REAL;
|
|
END;
|
|
|
|
VAR
|
|
a,b:Vector;
|
|
|
|
PROCEDURE Add*(a,b:Vector):Vector;
|
|
VAR res:Vector;
|
|
BEGIN
|
|
NEW(res);
|
|
res.x := a.x+b.x;
|
|
res.y := a.y+b.y;
|
|
RETURN res;
|
|
END Add;
|
|
|
|
PROCEDURE Sub*(a,b:Vector):Vector;
|
|
VAR res:Vector;
|
|
BEGIN
|
|
NEW(res);
|
|
res.x := a.x-b.x;
|
|
res.y := a.y-b.y;
|
|
RETURN res;
|
|
END Sub;
|
|
|
|
PROCEDURE Mul*(v:Vector;r:REAL):Vector;
|
|
VAR res:Vector;
|
|
BEGIN
|
|
NEW(res);
|
|
res.x := v.x*r;
|
|
res.y := v.y*r;
|
|
RETURN res;
|
|
END Mul;
|
|
|
|
PROCEDURE Div*(v:Vector;r:REAL):Vector;
|
|
VAR res:Vector;
|
|
BEGIN
|
|
NEW(res);
|
|
res.x := v.x/r;
|
|
res.y := v.y/r;
|
|
RETURN res;
|
|
END Div;
|
|
|
|
PROCEDURE Print*(op:ARRAY OF CHAR;v:Vector);
|
|
BEGIN
|
|
Out.String(op);
|
|
Out.String("(");
|
|
Out.Real(v.x,0);
|
|
Out.String(", ");
|
|
Out.Real(v.y,0);
|
|
Out.String(")");
|
|
END Print;
|
|
|
|
BEGIN
|
|
NEW(a); NEW(b);
|
|
a.x := 5.0; a.y := 7.0;
|
|
b.x := 2.0; b.y := 3.0;
|
|
Print("Add: ",Add(a,b));
|
|
Out.Ln;
|
|
Print("Sub: ",Sub(a,b));
|
|
Out.Ln;
|
|
Print("Mul: ",Mul(a,11.0));
|
|
Out.Ln;
|
|
Print("Div: ",Div(a,2.0));
|
|
Out.Ln
|
|
END Vector.
|