67 lines
1.9 KiB
Plaintext
67 lines
1.9 KiB
Plaintext
MODULE complex;
|
|
|
|
IMPORT InOut;
|
|
|
|
TYPE Complex = RECORD R, Im : REAL END;
|
|
|
|
VAR z : ARRAY [0..3] OF Complex;
|
|
|
|
PROCEDURE ShowComplex (str : ARRAY OF CHAR; p : Complex);
|
|
|
|
BEGIN
|
|
InOut.WriteString (str); InOut.WriteString (" = ");
|
|
InOut.WriteReal (p.R, 6, 2);
|
|
IF p.Im >= 0.0 THEN InOut.WriteString (" + ") ELSE InOut.WriteString (" - ") END;
|
|
InOut.WriteReal (ABS (p.Im), 6, 2); InOut.WriteString (" i ");
|
|
InOut.WriteLn; InOut.WriteBf
|
|
END ShowComplex;
|
|
|
|
PROCEDURE AddComplex (x1, x2 : Complex; VAR x3 : Complex);
|
|
|
|
BEGIN
|
|
x3.R := x1.R + x2.R;
|
|
x3.Im := x1.Im + x2.Im
|
|
END AddComplex;
|
|
|
|
PROCEDURE SubComplex (x1, x2 : Complex; VAR x3 : Complex);
|
|
|
|
BEGIN
|
|
x3.R := x1.R - x2.R;
|
|
x3.Im := x1.Im - x2.Im
|
|
END SubComplex;
|
|
|
|
PROCEDURE MulComplex (x1, x2 : Complex; VAR x3 : Complex);
|
|
|
|
BEGIN
|
|
x3.R := x1.R * x2.R - x1.Im * x2.Im;
|
|
x3.Im := x1.R * x2.Im + x1.Im * x2.R
|
|
END MulComplex;
|
|
|
|
PROCEDURE InvComplex (x1 : Complex; VAR x2 : Complex);
|
|
|
|
BEGIN
|
|
x2.R := x1.R / (x1.R * x1.R + x1.Im * x1.Im);
|
|
x2.Im := -1.0 * x1.Im / (x1.R * x1.R + x1.Im * x1.Im)
|
|
END InvComplex;
|
|
|
|
PROCEDURE NegComplex (x1 : Complex; VAR x2 : Complex);
|
|
|
|
BEGIN
|
|
x2.R := - x1.R; x2.Im := - x1.Im
|
|
END NegComplex;
|
|
|
|
BEGIN
|
|
InOut.WriteString ("Enter two complex numbers : ");
|
|
InOut.WriteBf;
|
|
InOut.ReadReal (z[0].R); InOut.ReadReal (z[0].Im);
|
|
InOut.ReadReal (z[1].R); InOut.ReadReal (z[1].Im);
|
|
ShowComplex ("z1", z[0]); ShowComplex ("z2", z[1]);
|
|
InOut.WriteLn;
|
|
AddComplex (z[0], z[1], z[2]); ShowComplex ("z1 + z2", z[2]);
|
|
SubComplex (z[0], z[1], z[2]); ShowComplex ("z1 - z2", z[2]);
|
|
MulComplex (z[0], z[1], z[2]); ShowComplex ("z1 * z2", z[2]);
|
|
InvComplex (z[0], z[2]); ShowComplex ("1 / z1", z[2]);
|
|
NegComplex (z[0], z[2]); ShowComplex (" - z1", z[2]);
|
|
InOut.WriteLn
|
|
END complex.
|