home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: complex.icn
- #
- # Subject: Procedures to perform complex arithmetic
- #
- # Author: Ralph E. Griswold
- #
- # Date: June 10, 1988
- #
- ###########################################################################
- #
- # The following procedures perform operations on complex numbers.
- #
- # complex(r,i) create complex number with real part r and
- # imaginary part i
- #
- # cpxadd(x1,x2) add complex numbers x1 and x2
- #
- # cpxdiv(x1,x2) divide complex number x1 by complex number x2
- #
- # cpxmul(x1,x2) multiply complex number x1 by complex number
- # x2
- #
- # cpxsub(x1,x2) subtract complex number x2 from complex
- # number x1
- #
- # cpxstr(x) convert complex number x to string represen-
- # tation
- #
- # strcpx(s) convert string representation s of complex
- # number to complex number
- #
- ############################################################################
-
- record complex(rpart,ipart)
-
- procedure strcpx(s)
- local i
-
- i := upto('+-',s,2)
- return complex(+s[1:i],+s[i:-1])
- end
-
- procedure cpxstr(x)
- if x.ipart < 0 then return x.rpart || x.ipart || "i"
- else return x.rpart || "+" || x.ipart || "i"
- end
-
- procedure cpxadd(x1,x2)
- return complex(x1.rpart + x2.rpart,x1.ipart + x2.ipart)
- end
-
- procedure cpxsub(x1,x2)
- return complex(x1.rpart - x2.rpart,x1.ipart - x2.ipart)
- end
-
- procedure cpxmul(x1,x2)
- return complex(x1.rpart * x2.rpart - x1.ipart * x2.ipart,
- x1.rpart * x2.ipart + x1.ipart * x2.rpart)
- end
-
- procedure cpxdiv(x1,x2)
- local denom
-
- denom := x2.rpart ^ 2 + x2.ipart ^ 2
- return complex((x1.rpart * x2.rpart + x1.ipart * x2.ipart) /
- denom,(x1.ipart * x2.rpart - x1.rpart * x2.ipart) /
- denom)
- end
-