home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
zahlen.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-05-18
|
3KB
|
79 lines
(*************************************************************************)
(* ZAHLEN.PAS *)
(* Programm zur Umwandlung von Dezimalzahlen in Binaer-,Hexadezimal- und *)
(* Oktalzahlen unter Verwendung des CASE-Tricks. *)
(*************************************************************************)
PROGRAM zahlen_wandler;
TYPE binaer_typ = PACKED ARRAY [0..15] OF BOOLEAN; (* Bin.-Aequivalent *)
hex_ziffer = 0..15; (* Hex.-Aequivalent *)
okt_ziffer = 0..7; (* Okt.-Aequivalent *)
zahlen_typ = PACKED RECORD (* um CASE-Trick anzuwenden *)
CASE INTEGER OF
1 : (int_zahl : INTEGER);
2 : (bin_zahl : binaer_typ);
3 : (h4,h3,h2,h1 : hex_ziffer);
4 : (o6,o5,o4,o3,o2,o1 : okt_ziffer)
END;
VAR zahl: zahlen_typ; (* fuer Umwandlung *)
i : INTEGER; (* fuer INTEGER-Eingabe *)
(*************************************************************************)
(* Routine zur Ausgabe von Binaerzahlen sowie der Hex.- und Okt.-Ziffern *)
PROCEDURE write_binaerzahl (b: binaer_typ); (* Binaerzahl ausgeben *)
VAR j: INTEGER;
BEGIN
FOR j := 15 DOWNTO 0 DO (* mit hoechswertigem Bit anfangen *)
BEGIN
IF b[j] THEN Write('1') ELSE Write('0');
IF j = 8 THEN Write(' ')
END
END;
PROCEDURE write_hexziffer (h: hex_ziffer); (* Hex.-Ziffer ausgeben *)
VAR hex_string: STRING[16];
BEGIN
hex_string := '0123456789ABCDEF'; (* alle moegl. Hex.-Ziffern geordnet *)
Write(hex_string[h+1])
END;
PROCEDURE write_oktziffer (o: okt_ziffer); (* Okt.-Ziffer ausgeben *)
BEGIN Write(Chr(Ord('0') + o)) END;
(*************************************************************************)
BEGIN
zahl.o6 := 0; (* das nie mehr gebrauchte Bit 33 mit 0 initialisieren *)
REPEAT
WriteLn('( Ende durch Eingabe der INTEGER-Zahl 0 )');
WriteLn; WriteLn; WriteLn;
Write('INTEGER-Zahl: '); ReadLn(i); WriteLn;
WITH zahl DO
BEGIN
int_zahl := i; (* freien Verbund mit INTEGER-Zahl belegen *)
Write('binaer : '); (* diese binaer interpretieren *)
write_binaerzahl(bin_zahl);
WriteLn;
Write('hexadezimal : '); (* desgleichen hexadezimal *)
write_hexziffer(h4); write_hexziffer(h3);
write_hexziffer(h2); write_hexziffer(h1);
WriteLn;
Write('oktal : '); (* und natuerlich auch oktal *)
write_oktziffer(o6); write_oktziffer(o5); write_oktziffer(o4);
write_oktziffer(o3); write_oktziffer(o2); write_oktziffer(o1);
END;
UNTIL i = 0
END.