A subroutine is structured much like a function, except that
it does not have a return value. Calling custom-written
subroutines also differs slightly from calling intrinsic subroutines
like write, print, and read, in that the arguments are
enclosed in parentheses and we use the keyword
call
before the subroutine name.
!----------------------------------------------------------------------- ! Program description: ! Swap two integer values !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Modification history: ! Date Name Modification ! 2011-03-23 Jason Bacon Begin !----------------------------------------------------------------------- module subprograms interface subroutine swap(num1, num2) integer, intent(inout) :: num1, num2 end subroutine end interface end module ! Main program body program subroutine_example use subprograms ! Disable implicit declarations (i-n rule) implicit none ! Variable defintions integer :: x, y ! Statements print *, 'Enter x and y on one line:' read *, x, y call swap(x, y) print *, 'x = ', x, 'y = ', y end program !----------------------------------------------------------------------- ! Description: ! Swap the contents of two integer variables ! ! Arguments: ! num1, num2: References to the variables to swap !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Modification history: ! Date Name Modification ! 2011-03-23 Jason Bacon Begin !----------------------------------------------------------------------- subroutine swap(num1, num2) ! Disable implicit declarations (i-n rule) implicit none ! Dummy variables integer, intent(inout) :: num1, num2 ! Local variables integer :: temp temp = num1 num1 = num2 num2 = temp end subroutine