home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* AUSGABE.PAS *)
- (* Unit zur Ausgabe von REAL-Zahlen im *)
- (* Floating-Point-Format *)
- (* (c) 1988 by Manfred Grote & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Ausgabe;
-
- INTERFACE
-
- USES Crt, Printer;
-
- TYPE TGeraet = (Drucker, Monitor);
-
- PROCEDURE WriteReal(Geraet : TGeraet;
- r : REAL;
- Feld, Dezimalen: INTEGER);
- IMPLEMENTATION
-
- PROCEDURE WriteReal(Geraet : TGeraet;
- r : REAL;
- Feld, Dezimalen: INTEGER);
-
-
- TYPE Lage = (links, zentriert, rechts);
-
- VAR s : STRING[30];
- Punktpos,
- Vorkommastellen,
- Stellen,
- Leerzeichen, i : INTEGER;
- Schreibposition : Lage;
-
- BEGIN
- IF (Abs(r) < 1E6) AND (Abs(r) > 1E-5)
- OR (Abs(r) < 1E-37) THEN BEGIN
- IF (Feld = Dezimalen + 1) THEN
- Schreibposition := links;
- IF (Feld = Dezimalen + 2) THEN
- Schreibposition := zentriert;
- IF (Feld > Dezimalen + 2) THEN
- Schreibposition := rechts;
- Str(r: 30: Dezimalen, s);
- Punktpos := Pos('.', s);
- i := Punktpos; { Ermittlung der }
- REPEAT { signifikanten }
- i := Pred(i); { Vorkommastellen }
- UNTIL (s[i] = ' ');
- Vorkommastellen := Punktpos - (i + 1);
- Stellen := Vorkommastellen + Dezimalen + 1;
- IF Stellen >Feld THEN BEGIN
- Dezimalen := Dezimalen - (Stellen - Feld);
- Str(r : 30: Dezimalen, s);
- Punktpos := Pos('.', s);
- END;
- i := Punktpos + Dezimalen;
- WHILE (i > Punktpos) AND (s[i] = '0') DO BEGIN { Nachkommastellen }
- Dezimalen := Pred(Dezimalen); { Ermittlung der }
- i := Pred(i); { signifikanten }
- END; { Nachkommastellen }
-
- Stellen := Vorkommastellen + Dezimalen + 1;
- IF Schreibposition = links THEN { Korrektur von }
- Feld := Dezimalen + 1; { Feld bzw. }
- IF Schreibposition = zentriert THEN { Dezimalen nach }
- Feld := (Feld + Stellen) DIV 2; { den Vorgaben }
- END;
- IF Geraet = Monitor THEN
- IF (Abs(r) >= 1E6) OR (Abs(r) <= 1E-5) THEN BEGIN
- IF Abs(r) > 1E-37 THEN Write(r: Feld)
- ELSE Write(0: Feld);
- END ELSE Write(r: Feld: Dezimalen);
- IF Geraet = Drucker THEN
- IF (Abs(r) >= 1E6) OR (Abs(r) <= 1E-5) THEN BEGIN
- IF Abs(r) > 1E-37 THEN Write(Lst, r: Feld)
- ELSE Write(Lst, 0: Feld);
- END ELSE Write(Lst, r: Feld: Dezimalen);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von RAUSGABE.PAS *)