File GLK434.PS

Directory of image this file is from
This file as a plain text file

PROGRAM GLEITKOMMA (IN,OUT);
CONST
  C=50;
TYPE
  ZAHL=RECORD 
            MANTISSE:INTEGER;
            EXPONENT:INTEGER;
           END;
VAR
  ZAHL1,ZAHL2:ZAHL;

FUNCTION ZEHNHOCH (X:INTEGER):INTEGER;
BEGIN
  ZEHNHOCH:=TRUNC(EXP(X*LN(10)));
END;

PROCEDUR TAUSCHE (VAR ZAHL1,ZAHL2:ZAHL);
VAR
  HILF:INTEGER;
BEGIN
  HILF:=ZAHL1.MANTISSE;ZAHL1.MANTISSE:=ZAHL2.MANTISSE;ZAHL2.MANTISSE:=HILF;
  HILF:=ZAHL1.EXPONENT;ZAHL1.EXPONENT:=ZAHL2.EXPONENT;ZAHL2.EXPONENT:=HILF;
END;

PROCEDUR ADDIERE (VAR Z1,Z2:ZAHL);
VAR
  EDIFF:INTEGER;
  SUMME:ZAHL;
BEGIN
  IF Z2.EXPONENT>Z1.EXPONENT THEN TAUSCHE (Z1,Z2);
  EDIFF:=Z1.EXPONENT-Z2.EXPONENT;
  Z2.MANTISSE:=ROUND(Z2.MANTISSE/ZEHNHOCH(EDIFF));
  Z2.EXPONENT:=Z1.EXPONENT;
  SUMME.MANTISSE:=Z1.MANTISSE+Z2.MANTISSE;
  SUMME.EXPONENT:=Z1.EXPONENT;
  IF SUMME.MANTISSE>ZEHNHOCH(6) THEN BEGIN
     SUMME.MANTISSE:=ROUND(SUMME.MANTISSE/10);
     SUMME.EXPONENT:=SUMME.EXPONENT+1;
     END;
  IF SUMME.EXPONENT>99 THEN WRITELN("ZAHLENBEREICH UEBERSCHRITTEN !")
     ELSE WRITELN("SUMME=",SUMME.MANTISSE:6,"E",SUMME.EXPONENT-C:2);
END;

PROCEDUR MULTIPLIZIERE (VAR Z1,Z2:ZAHL);
VAR
  A:INTEGER;
  PRODUKT:ZAHL;
BEGIN
WRITELN("ZAHL1=",ZAHL1.MANTISSE,"E",ZAHL1.EXPONENT);
WRITELN("ZAHL2=",ZAHL2.MANTISSE,"E",ZAHL2.EXPONENT);
  IF Z1.EXPONENT<Z2.EXPONENT THEN TAUSCHE(Z1,Z2);
  PRODUKT.EXPONENT:=Z1.EXPONENT+Z2.EXPONENT-C;
  Z1.MANTISSE:=Z1.MANTISSE DIV ZEHNHOCH(Z1.EXPONENT-Z2.EXPONENT);
  PRODUKT.MANTISSE:=Z1.MANTISSE*Z2.MANTISSE;

  IF PRODUKT.MANTISSE>=ZEHNHOCH(6) THEN BEGIN
     A:=TRUNC(LN(PRODUKT.MANTISSE)/LN(10));
     PRODUKT.MANTISSE:=ROUND(PRODUKT.MANTISSE/A);
     PRODUKT.EXPONENT:=PRODUKT.EXPONENT+A;
   END;
  IF PRODUKT.EXPONENT>99 THEN WRITELN("ZAHLBEREICH UEBERSCHRITTEN!")
     ELSE WRITELN("PRODUKT=",PRODUKT.MANTISSE:6,"E",PRODUKT.EXPONENT-C:2);
END;

(*========== Hauptprogramm ==========*)
BEGIN
  REPEAT
    WRITE("ZAHL1");READLN;READ(ZAHL1.MANTISSE,ZAHL1.EXPONENT);
    WRITE("ZAHL2");READLN;READ(ZAHL2.MANTISSE,ZAHL2.EXPONENT);
    ZAHL1.EXPONENT:=ZAHL1.EXPONENT+C;
    ZAHL2.EXPONENT:=ZAHL2.EXPONENT+C;
    ADDIERE(ZAHL1,ZAHL2);
    MULTIPLIZIERE(ZAHL1,ZAHL2);
  UNTIL ZAHL1.MANTISSE=0;
END.



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search