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.