home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************)
- (* 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.
-