[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
{ 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}.
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]