MODULE bt; CONST MAXSIZE = 128; VAR s : ARRAY MAXSIZE OF INTEGER; i : INTEGER; PROCEDURE btParent*( n : INTEGER ): INTEGER; BEGIN IF n > MAXSIZE THEN RETURN ( -2 ); ELSE IF n = 1 THEN RETURN 1; ELSE RETURN ( n DIV 2 ); END; END; END btParent; PROCEDURE btLeftChild* ( n :INTEGER ): INTEGER; BEGIN IF n > MAXSIZE THEN RETURN (-2); ELSIF 2 * n > MAXSIZE THEN RETURN ( -1 ); ELSE RETURN (2 * n); END; END btLeftChild; PROCEDURE btRightChild* ( n :INTEGER ): INTEGER; BEGIN IF n > MAXSIZE THEN RETURN (-2); ELSIF (2 * n) + 1 > MAXSIZE THEN RETURN ( -1 ); ELSE RETURN ((2 * n) + 1); END; END btRightChild; PROCEDURE btGetVal* ( n : INTEGER ) :INTEGER; BEGIN IF n > MAXSIZE THEN RETURN ( -2 ); ELSE RETURN s[n - 1]; END; END btGetVal; PROCEDURE btSetVal* ( n, i: INTEGER ) : INTEGER; BEGIN IF n > MAXSIZE THEN RETURN ( -2 ); ELSE s[n - 1] := i; RETURN 0; END; END btSetVal; BEGIN i := 0; REPEAT s[i] := 0; i := i + 1; UNTIL i >= MAXSIZE; END bt. System.Free bt ~ bt.test