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}.