home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / fst / modula3 / adtkompl.mod < prev    next >
Text File  |  1993-07-28  |  2KB  |  95 lines

  1. IMPLEMENTATION MODULE adtkomplex;
  2.  
  3. (* adtkomplex stellt Datenstruktur und Operat. fuer kompl. Zahlen
  4.    Achtung, das Problem des Zahlen-Ueber- und Unterlaufs bei
  5.    REAL-Operationen ist nicht abgfangen *)
  6.  
  7. FROM Storage  IMPORT ALLOCATE, DEALLOCATE;
  8. FROM MathLib0 IMPORT sqrt;
  9.  
  10. TYPE KomplexInt = RECORD
  11.                     Re,Im:REAL
  12.                   END;
  13.      Komplex    = POINTER TO KomplexInt;
  14.  
  15.  
  16. PROCEDURE Kreieren(VAR X:Komplex);
  17.   BEGIN
  18.     ALLOCATE(X,SIZE(KomplexInt))
  19.   END Kreieren;
  20.  
  21. PROCEDURE Loeschen(VAR X:Komplex);
  22.   BEGIN
  23.     DEALLOCATE(X,SIZE(KomplexInt));
  24.     X:=NIL;
  25.   END Loeschen;
  26.  
  27. PROCEDURE Setzen(VAR X:Komplex;RT,IT:REAL);
  28.   BEGIN
  29.     X^.Re:=RT;
  30.     X^.Im:=IT;
  31.   END Setzen;
  32.  
  33. PROCEDURE RT(X:Komplex):REAL;
  34.   BEGIN
  35.     RETURN X^.Re
  36.   END RT;
  37.  
  38. PROCEDURE IT(X:Komplex):REAL;
  39.   BEGIN
  40.     RETURN X^.Im
  41.   END IT;
  42.  
  43. PROCEDURE Summe(X,Y:Komplex; VAR Z:Komplex);
  44.   BEGIN
  45.     Z^.Re:=X^.Re + Y^.Re;
  46.     Z^.Im:= X^.Im + Y^.Im;
  47.   END Summe;
  48.  
  49. PROCEDURE Differenz(X,Y:Komplex; VAR Z:Komplex);
  50.   BEGIN
  51.     Z^.Re:=X^.Re - Y^.Re;
  52.     Z^.Im:= X^.Im - Y^.Im;
  53.   END Differenz;
  54.  
  55. PROCEDURE Produkt(X,Y:Komplex; VAR Z:Komplex);
  56.   VAR ZInt:KomplexInt;   (* für den Fall X = Z oder Y = Z *)
  57.   BEGIN
  58.     ZInt.Re:=X^.Re * Y^.Re - X^.Im * Y^.Im;
  59.     ZInt.Im:=X^.Re * Y^.Im + X^.Im * Y^.Re;
  60.     Z^:= ZInt;
  61.   END Produkt;
  62.  
  63. PROCEDURE Quotient(X,Y:Komplex; VAR Z:Komplex);
  64.   VAR ZInt:KomplexInt;   (* für den Fall X = Z oder Y = Z *)
  65.       Nenner:REAL;
  66.   BEGIN
  67.     IF Betrag(Y)=0.0 THEN     (* Division durch Null *)
  68.       Setzen(Z,0.0,0.0);
  69.     ELSE
  70.       WITH Y^ DO
  71.         Nenner:= Re* Re + Im*Im;
  72.       END;  (* WITH *)
  73.       ZInt.Re:=(X^.Re*Y^.Re + X^.Im*Y^.Im)/Nenner;
  74.       ZInt.Im:=(X^.Im*Y^.Re - X^.Re*Y^.Im)/Nenner;
  75.       Z^:=ZInt;
  76.     END;  (* IF *)
  77.   END Quotient;
  78.  
  79. PROCEDURE Betrag(X:Komplex):REAL;
  80.   BEGIN
  81.     WITH X^ DO
  82.       RETURN sqrt(Re*Re+Im*Im)
  83.     END
  84.   END Betrag;
  85.  
  86. PROCEDURE Gleich(X,Y:Komplex):BOOLEAN;
  87.   BEGIN
  88.     RETURN(X^.Re=Y^.Re) AND (X^.Im=Y^.Im)
  89.   END Gleich;
  90.  
  91. END adtkomplex.
  92.  
  93.  
  94.  
  95.