home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OL.LZH / PROCS.LZH / COMPLEX.ICN < prev    next >
Text File  |  1991-07-13  |  2KB  |  71 lines

  1. ############################################################################
  2. #
  3. #    Name:    complex.icn
  4. #
  5. #    Title:    Perform complex arithmetic
  6. #
  7. #    Author:    Ralph E. Griswold
  8. #
  9. #    Date:    June 10, 1988
  10. #
  11. ############################################################################
  12. #  
  13. #  The following procedures perform operations on complex numbers.
  14. #  
  15. #       complex(r,i)   create complex number with real part r and
  16. #                      imaginary part i
  17. #  
  18. #       cpxadd(x1,x2)  add complex numbers x1 and x2
  19. #  
  20. #       cpxdiv(x1,x2)  divide complex number x1 by complex number x2
  21. #  
  22. #       cpxmul(x1,x2)  multiply complex number x1 by complex number
  23. #                      x2
  24. #  
  25. #       cpxsub(x1,x2)  subtract complex number x2 from complex
  26. #                      number x1
  27. #  
  28. #       cpxstr(x)      convert complex number x to string represen-
  29. #                      tation
  30. #  
  31. #       strcpx(s)      convert string representation s of complex
  32. #                      number to complex number
  33. #  
  34. ############################################################################
  35.  
  36. record complex(rpart,ipart)
  37.  
  38. procedure strcpx(s)
  39.    local i
  40.  
  41.    i := upto('+-',s,2)
  42.    return complex(+s[1:i],+s[i:-1])
  43. end
  44.  
  45. procedure cpxstr(x)
  46.    if x.ipart < 0 then return x.rpart || x.ipart || "i"
  47.    else return x.rpart || "+" || x.ipart || "i"
  48. end
  49.  
  50. procedure cpxadd(x1,x2)
  51.    return complex(x1.rpart + x2.rpart,x1.ipart + x2.ipart)
  52. end
  53.  
  54. procedure cpxsub(x1,x2)
  55.    return complex(x1.rpart - x2.rpart,x1.ipart - x2.ipart)
  56. end
  57.  
  58. procedure cpxmul(x1,x2)
  59.    return complex(x1.rpart * x2.rpart - x1.ipart * x2.ipart,
  60.       x1.rpart * x2.ipart + x1.ipart * x2.rpart)
  61. end
  62.  
  63. procedure cpxdiv(x1,x2)
  64.    local denom
  65.  
  66.    denom := x2.rpart ^ 2 + x2.ipart ^ 2
  67.    return complex((x1.rpart * x2.rpart + x1.ipart * x2.ipart) /
  68.       denom,(x1.ipart * x2.rpart - x1.rpart * x2.ipart) /
  69.       denom)
  70. end
  71.