(* 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.