next up previous contents
Next: Binary Cut Up: Complex Arithmetic - Modules Previous: Complex Arithmetic - Modules

Solution

    MODULE Integer_Complex_Arithmetic

     IMPLICIT NONE

    CONTAINS

     FUNCTION Addition(ic1,ic2)

      INTEGER, INTENT(IN), DIMENSION(2) :: ic1, ic2
      INTEGER, DIMENSION(2) :: Addition

       Addition = ic1 + ic2

     END FUNCTION Addition

     FUNCTION Subtraction(ic1,ic2)

      INTEGER, INTENT(IN), DIMENSION(2) :: ic1, ic2
      INTEGER, DIMENSION(2) :: Subtraction

       Subtraction = ic1 - ic2

     END FUNCTION Subtraction

     FUNCTION Multiplication(ic1,ic2)

      INTEGER, INTENT(IN), DIMENSION(2) :: ic1, ic2
      INTEGER, DIMENSION(2) :: Multiplication

       Multiplication(1) = ic1(1)*ic2(1) - ic1(2)*ic2(2)
       Multiplication(2) = ic1(1)*ic2(2) + ic1(2)*ic2(1)

     END FUNCTION Multiplication

     FUNCTION Division(ic1,ic2)

      INTEGER, INTENT(IN), DIMENSION(2) :: ic1, ic2
      INTEGER, DIMENSION(2) :: Division

       Division = Multiplication(ic1,(/ic2(1),-ic2(2)/))/&
                      (ic2(1)*ic2(1)+ic2(2)*ic2(2))

     END FUNCTION Division

     FUNCTION Exponentiation(ic1,exp)

      INTEGER, INTENT(IN), DIMENSION(2) :: ic1
      INTEGER, INTENT(IN)               :: exp
      INTEGER, DIMENSION(2) :: Exponentiation
      INTEGER i

      Exponentiation = (/1,0/) ! for exp = 0

      DO i = 1, exp
       Exponentiation = Multiplication(Exponentiation,ic1)
      END DO

     END FUNCTION Exponentiation

    END MODULE Integer_Complex_Arithmetic

    PROGRAM Testo
     USE Integer_Complex_Arithmetic
     IMPLICIT NONE
     PRINT*, "Addition((/1,2/),(/3,4/))",   &
              Addition((/1,2/),(/3,4/))
     PRINT*, "Subtraction((/1,2/),(/3,4/))",&
              Subtraction((/1,2/),(/3,4/))
     PRINT*, "Division((/1,2/),(/3,4/))",   &
              Division((/1,2/),(/3,4/))
     PRINT*, "Division((/3,4/),(/3,4/))",   &
              Division((/3,4/),(/3,4/))
     PRINT*, "Division((/3,4/),(/1,2/))",   &
              Division((/3,4/),(/1,2/))
     PRINT*, "Multiplication((/1,2/),(/3,4/))",&
              Multiplication((/1,2/),(/3,4/))
     PRINT*, "Exponentiation((/1,2/),3)",   &
              Exponentiation((/1,2/),3)
    END PROGRAM Testo

This produces,

 Addition((/1,2/),(/3,4/))           4           6
 Subtraction((/1,2/),(/3,4/))       -2          -2
 Division((/1,2/),(/3,4/))           0           0
 Division((/3,4/),(/3,4/))           1           0
 Division((/3,4/),(/1,2/))           2           0
 Multiplication((/1,2/),(/3,4/))    -5          10
 Exponentiation((/1,2/),3)         -11          -2


next up previous contents
Next: Binary Cut Up: Complex Arithmetic - Modules Previous: Complex Arithmetic - Modules

©University of Liverpool, 1997
Thu May 29 10:11:26 BST 1997
Not for commercial use.