Contributor: GREG VIGNEAULT           


{ How about a procedure that will display any integer in any base
 notation from 2 to 16?  The following example displays the values
 0 through 15 in binary (base 2), octal (base 8), decimal (base 10)
 and hexadecimal (base 16) notations ... }

(********************************************************************)
PROGRAM BaseX;                      (* compiler: Turbo Pascal v4.0+ *)
                                    (* Nov.14.93 Greg Vigneault     *)
(*------------------------------------------------------------------*)
(* Display any INTEGER in any base notation from 2 to 16...         *)
(*                                                                  *)
(*    number base 2  = binary notation       (digits 0,1)           *)
(*    number base 8  = octal notation        (digits 0..7)          *)
(*    number base 10 = decimal notation      (digits 0..9)          *)
(*    number base 16 = hexadecimal notation  (digits 0..9,A..F)     *)

PROCEDURE DisplayInteger (AnyInteger :INTEGER; NumberBase :BYTE);
  CONST DataSize = 16;  (* bit-size of an INTEGER *)
  VAR   Index : INTEGER;
        Digit : ARRAY [1..DataSize] OF CHAR;
  BEGIN
    IF (NumberBase > 1) AND (NumberBase < 17) THEN BEGIN
      Index := 0;
      REPEAT
        INC (Index);
        Digit [Index] := CHR(AnyInteger MOD NumberBase + ORD('0'));
        IF (Digit [Index] > '9') THEN INC (Digit [Index],7);
        AnyInteger := AnyInteger DIV NumberBase;
      UNTIL (AnyInteger = 0) OR (Index = DataSize);
      WHILE (Index > 0) DO BEGIN
        Write (Digit [Index]);
        DEC (Index);
      END; {WHILE Index}
    END; {IF NumberBase}
  END {DisplayInteger};

(*------------------------------------------------------------------*)
(*  to test the DisplayInteger procedure...                         *)

VAR Base, Number : INTEGER;

BEGIN
      FOR Base := 2 TO 16 DO
        CASE Base OF
          2,8,10,16 : BEGIN
                        WriteLn;
                        CASE Base OF
                          2  : Write ('Binary : ');
                          8  : Write ('Octal  : ');
                          10 : Write ('Decimal: ');
                          16 : Write ('Hex    : ');
                        END; {CASE}
                        FOR Number := 0 TO 15 DO BEGIN
                          DisplayInteger (Number, Base);
                          Write (' ');
                        END; {FOR}
                      END;
        END; {CASE}
      WriteLn;

END {BaseX}.