Trigonometric functions (i.e., sin(x) and cos(x)) use radian for their argument. Using modules, you can design your own trigonometric functions that use degree. Write a module that contains functions for converting radian to degree and degree to radian and sin(x) and cos(x) with arguments in degree rather than in radian.
Click here to download this program.! -------------------------------------------------------------------- ! MODULE MyTrigonometricFunctions: ! This module provides the following functions and constants ! (1) RadianToDegree() - converts its argument in radian to ! degree ! (2) DegreeToRadian() - converts its argument in degree to ! radian ! (3) MySIN() - compute the sine of its argument in ! degree ! (4) MyCOS() - compute the cosine of its argument ! in degree ! -------------------------------------------------------------------- MODULE MyTrigonometricFunctions IMPLICIT NONE REAL, PARAMETER :: PI = 3.1415926 ! some constants REAL, PARAMETER :: Degree180 = 180.0 REAL, PARAMETER :: R_to_D = Degree180/PI REAL, PARAMETER :: D_to_R = PI/Degree180 CONTAINS ! -------------------------------------------------------------------- ! FUNCTION RadianToDegree(): ! This function takes a REAL argument in radian and converts it to ! the equivalent degree. ! -------------------------------------------------------------------- REAL FUNCTION RadianToDegree(Radian) IMPLICIT NONE REAL, INTENT(IN) :: Radian RadianToDegree = Radian * R_to_D END FUNCTION RadianToDegree ! -------------------------------------------------------------------- ! FUNCTION DegreeToRadian(): ! This function takes a REAL argument in degree and converts it to ! the equivalent radian. ! -------------------------------------------------------------------- REAL FUNCTION DegreeToRadian(Degree) IMPLICIT NONE REAL, INTENT(IN) :: Degree DegreeToRadian = Degree * D_to_R END FUNCTION DegreeToRadian ! -------------------------------------------------------------------- ! FUNCTION MySIN(): ! This function takes a REAL argument in degree and computes its ! sine value. It does the computation by converting its argument to ! radian and uses Fortran's sin(). ! -------------------------------------------------------------------- REAL FUNCTION MySIN(x) IMPLICIT NONE REAL, INTENT(IN) :: x MySIN = SIN(DegreeToRadian(x)) END FUNCTION MySIN ! -------------------------------------------------------------------- ! FUNCTION MySIN(): ! This function takes a REAL argument in degree and computes its ! cosine value. It does the computation by converting its argument to ! radian and uses Fortran's cos(). ! -------------------------------------------------------------------- REAL FUNCTION MyCOS(x) IMPLICIT NONE REAL, INTENT(IN) :: x MyCOS = COS(DegreeToRadian(x)) END FUNCTION MyCOS END MODULE MyTrigonometricFunctions
Here is the main program:
Click here to download this program.! ----------------------------------------------------------------------- ! PROGRAM TrigonFunctTest: ! This program tests the functions in module MyTrigonometricFunctions. ! Module MyTrigonometricFunctions is stored in file trigon.f90. ! Functions in that module use degree rather than radian. This program ! displays the sin(x) and cos(x) values for x=-180, -170, ..., 0, 10, 20, ! 30, ..., 160, 170 and 180. Note that the sin() and cos() function ! in module MyTrigonometricFunctions are named MySIN(x) and MyCOS(x). ! ----------------------------------------------------------------------- PROGRAM TrigonFunctTest USE MyTrigonometricFunctions ! use a module IMPLICIT NONE REAL :: Begin = -180.0 ! initial value REAL :: Final = 180.0 ! final value REAL :: Step = 10.0 ! step size REAL :: x WRITE(*,*) 'Value of PI = ', PI WRITE(*,*) x = Begin ! start with 180 degree DO IF (x > Final) EXIT ! if x > 180 degree, EXIT WRITE(*,*) 'x = ', x, 'deg sin(x) = ', MySIN(x), & ' cos(x) = ', MyCOS(x) x = x + Step ! advance x END DO END PROGRAM TrigonFunctTest
Value of PI = 3.1415925 x = -180.deg sin(x) = 8.742277657E-8 cos(x) = -1. x = -170.deg sin(x) = -0.173648298 cos(x) = -0.98480773 x = -160.deg sin(x) = -0.342020214 cos(x) = -0.939692616 x = -150.deg sin(x) = -0.50000006 cos(x) = -0.866025388 x = -140.deg sin(x) = -0.642787635 cos(x) = -0.766044438 x = -130.deg sin(x) = -0.766044438 cos(x) = -0.642787635 x = -120.deg sin(x) = -0.866025388 cos(x) = -0.50000006 x = -110.deg sin(x) = -0.939692616 cos(x) = -0.342020124 x = -100.deg sin(x) = -0.98480773 cos(x) = -0.173648193 x = -90.deg sin(x) = -1. cos(x) = -4.371138829E-8 x = -80.deg sin(x) = -0.98480773 cos(x) = 0.173648223 x = -70.deg sin(x) = -0.939692616 cos(x) = 0.342020154 x = -60.deg sin(x) = -0.866025448 cos(x) = 0.49999997 x = -50.deg sin(x) = -0.766044438 cos(x) = 0.642787635 x = -40.deg sin(x) = -0.642787576 cos(x) = 0.766044438 x = -30.deg sin(x) = -0.5 cos(x) = 0.866025388 x = -20.deg sin(x) = -0.342020124 cos(x) = 0.939692616 x = -10.deg sin(x) = -0.173648179 cos(x) = 0.98480773 x = 0.E+0deg sin(x) = 0.E+0 cos(x) = 1. x = 10.deg sin(x) = 0.173648179 cos(x) = 0.98480773 x = 20.deg sin(x) = 0.342020124 cos(x) = 0.939692616 x = 30.deg sin(x) = 0.5 cos(x) = 0.866025388 x = 40.deg sin(x) = 0.642787576 cos(x) = 0.766044438 x = 50.deg sin(x) = 0.766044438 cos(x) = 0.642787635 x = 60.deg sin(x) = 0.866025448 cos(x) = 0.49999997 x = 70.deg sin(x) = 0.939692616 cos(x) = 0.342020154 x = 80.deg sin(x) = 0.98480773 cos(x) = 0.173648223 x = 90.deg sin(x) = 1. cos(x) = -4.371138829E-8 x = 100.deg sin(x) = 0.98480773 cos(x) = -0.173648193 x = 110.deg sin(x) = 0.939692616 cos(x) = -0.342020124 x = 120.deg sin(x) = 0.866025388 cos(x) = -0.50000006 x = 130.deg sin(x) = 0.766044438 cos(x) = -0.642787635 x = 140.deg sin(x) = 0.642787635 cos(x) = -0.766044438 x = 150.deg sin(x) = 0.50000006 cos(x) = -0.866025388 x = 160.deg sin(x) = 0.342020214 cos(x) = -0.939692616 x = 170.deg sin(x) = 0.173648298 cos(x) = -0.98480773 x = 180.deg sin(x) = -8.742277657E-8 cos(x) = -1.
or with the following that generates an executable called tri-test:f90 trigon.f90 tri-test.90
f90 trigon.f90 tri-test.90 -o tri-test