MODULE PowersOf2; FROM InOut IMPORT Write, WriteString, WriteLn, WriteInt; CONST M = 11; N = 32; (* M ~ N * log(2) *) VAR i, j, k, expo, c, r, t : INTEGER; d : ARRAY [0..M] OF INTEGER; f : ARRAY [0..N] OF INTEGER; BEGIN (* -- init *) d[0] := 1; k := 1; FOR expo := 1 TO N DO (* -- berechne d = 2^expo durch d := 2*d *) c := 0; (* Uebertrag *) FOR i := 0 TO k-1 DO t := 2 * d[i] + c; IF t >= 10 THEN d[i] := t - 10; c := 1 ELSE d[i] := t; c := 0 END END; IF c > 0 THEN d[k] := 1; k := k + 1 END; (* -- Ausgabe von d[k-1]..d[0] *) i := M; REPEAT i := i - 1; Write(" ") UNTIL i = k; REPEAT i := i - 1; Write(CHR(d[i] + INTEGER(ORD("0")))) UNTIL i = 0; WriteInt(expo, 4); (* Berechnung und Ausgabe von f = 2^(-expo) durch f := f DIV 2 *) WriteString(" 0."); r := 0; (* Rest *) FOR j := 1 TO expo - 1 DO r := 10 * r + f[j]; f[j] := r DIV 2; r := r MOD 2; Write(CHR(f[j] + INTEGER(ORD("0")))) END; f[expo] := 5; Write("5"); WriteLn END END PowersOf2.