! SYNOPSIS: ! ! # gfortran -o gcd-f gcd.f03 ! # ./gcd-f 11 22 33 121 ! program GCD implicit none integer, allocatable :: ns(:) integer :: i, n character*20 :: tmpstr n = command_argument_count() allocate(ns(n)) ! allocate memory for numbers given in command line do i = 1, n call get_command_argument(i, tmpstr) ns(i) = str2int(tmpstr) end do print *, gcdn(ns) deallocate(ns) ! If we declare functions first, ! we have to specify its types within ! the `program' section. ! See http://en.wikibooks.org/wiki/Fortran/Fortran_procedures_and_functions contains pure integer function str2int (s) character*(*), intent(in) :: s read (s, *) str2int end function pure recursive integer function gcd2 (a, b) result(GCD) integer, intent(in) :: a, b if (b == 0) then GCD = a else GCD = gcd2(b, mod(a, b)) end if end function gcd2 pure integer function gcdn(n) integer, intent(in) :: n(:) ! n is an array integer :: i gcdn = n(1) do i = 2, size(n) gcdn = gcd2(gcdn, n(i)) end do end function end program