(* Raise integer to a positive power. Repeat reading pairs
of integers, until you ecounter a 0. Indicate invariant of loop.*)
MODULE power;
FROM Terminal IMPORT WriteString, WriteLn;
FROM MathLib0 IMPORT sqrt;
FROM InOut IMPORT ReadInt,WriteInt;
VAR a,b:INTEGER;
PROCEDURE power(x,n:INTEGER): INTEGER;
VAR w,z,i: INTEGER;
BEGIN
w := x; i := n;
z := 1;
WHILE i # 0 DO
IF ODD(i) THEN z := z*w END;
w := w*w;
i := i DIV 2
END;
RETURN(z);
END power;
BEGIN
WriteString('Enter number> ');
ReadInt(a);
WHILE a # 0 DO
WriteString('Enter power> ');
ReadInt(b);
WriteInt(a,4); WriteInt(b,4);
WriteInt(power(a,b),4);
WriteLn;
WriteString('Enter number> ');
ReadInt(a);
END;
END power.