jagomart
digital resources
picture1_Samplesf


 134x       Filetype PDF       File size 0.38 MB       Source: personalpages.manchester.ac.uk


File: Samplesf
example programs f revision 29 05 2019 recursion examples highest common factor hcf aka greatest common divisor gcd recursive integer function hcf a b result answer implicit none integer intent ...

icon picture PDF Filetype PDF | Posted on 03 Feb 2023 | 2 years ago
Partial capture of text on file.
     EXAMPLE PROGRAMS F                              Revision 29/05/2019 
      
     Recursion Examples 
      
      
     Highest Common Factor, HCF (aka Greatest Common Divisor, GCD) 
      
     recursive integer function hcf( a, b ) result( answer ) 
       implicit none 
       integer, intent(in) :: a, b 
      
       if ( b == 0 ) then 
          answer = a                             ! Base case 
       else 
          answer = hcf( b, modulo( a, b ) )      ! Recursion 
       end if 
      
     end function hcf 
      
      
     program test 
        implicit none 
        integer a, b 
        integer, external :: hcf 
      
        print *, "Input a, b:" 
        read *, a, b  
        print *, "HCF is ", hcf( a, b )          ! Main call 
      
     end program test 
      
      
      
      
      
     Convert To Binary 
      
     module BinaryModule 
        implicit none 
      
     contains 
      
        recursive function binary( n ) result( answer ) 
           character(len=:), allocatable :: answer                   ! Note: variable length 
           integer, intent(in) :: n 
           character :: digit(0:1) = [ '0', '1' ]                    ! Note: lower bound 0 
         
           if ( n <= 1 ) then 
              answer = digit( n )                                    ! Base case 
           else 
              answer = binary ( n / 2 ) // digit( modulo( n, 2 ) )   ! Recursion 
           end if                                                    !   note: automatic reallocation 
      
        end function binary 
      
     end module BinaryModule 
      
      
     program main 
        use BinaryModule 
        implicit none 
        integer n 
      
        write( *, "( i2, 1x, a )" ) ( n, binary( n ), n = 0, 32 )    ! Main call 
      
     end program main           
      
     Fortran                  Examples Part F            David Apsley 
     Binary Search 
      
     module BinarySearchModule 
        implicit none 
      
     contains 
      
        recursive integer function binarySearch( A, value, low, high ) result( answer ) 
           integer, intent(in) :: A(:)                 
           integer, intent(in) :: value 
           integer, intent(in) :: low, high 
           integer middle 
         
           if ( low > high ) then 
              answer = -1                                             ! Base case (not found) 
           else 
              middle = ( low + high ) / 2 
              if ( A(middle) == value ) then 
                 answer = middle                                      ! Base case (found) 
              else if ( A(middle) < value ) then 
                 answer = binarySearch( A, value, middle + 1, high )  ! Recursion (upper) 
              else 
                 answer = binarySearch( A, value, low, middle - 1 )   ! Recursion (lower) 
              end if 
           end if 
         
        end function binarySearch 
      
     end module BinarySearchModule 
      
      
     program main 
        use BinarySearchModule 
        implicit none 
        integer pos 
        integer value 
        integer, allocatable :: A(:) 
      
        A = [ 1, 2, 6, 7, 8, 20, 32, 33 ] 
        write( *, "( 'Array is ', *( i0, 1x ) )" ) A 
      
        write( *, "( a )", advance = "no" ) "Enter a value: " 
        read( *, * ) value 
      
        pos = binarySearch( A, value, 1, size( A ) )                  ! Search full range 
        if ( pos > 0 ) then 
           write( *, "( a, i0, a, i0 )" ) "Found ", value, " at position ", pos 
        else 
           write( *, * ) "Couldn't find value" 
        end if 
      
     end program main 
      
                      
      
     Fortran                  Examples Part F            David Apsley 
    Sum of Digits 
     
    recursive integer function sumDigits( n ) result( answer ) 
       implicit none 
       integer, intent(in) :: n 
     
       if ( n < 10 ) then 
          answer = n                                      ! Base case (single digit) 
       else 
          answer = sumDigits( n / 10 ) + modulo( n, 10 )  ! Recursion 
       end if 
     
    end function sumDigits 
     
     
    program test 
       implicit none 
       integer, external :: sumDigits 
       integer n 
     
       print *, "Input a number:" 
       read *, n 
       print *, "Sum of digits is ", sumDigits( n ) 
     
    end program test 
     
     
     
     
    Reverse a Word 
     
    recursive subroutine reverse( text, L, R ) 
       implicit none 
       character(len=*), intent(inout) :: text 
       integer, intent(in) :: L, R 
       character c 
     
       if ( L < R ) then 
          c = text(L:L);   text(L:L) = text(R:R);   text(R:R) = c   ! Swap ends 
          call reverse( text, L + 1, R - 1 )                        ! Recursive call 
       end if 
     
    end subroutine reverse 
     
     
    program main 
       implicit none 
       character(len=100) text 
       character(len=*), parameter :: fmt = "( a )" 
     
       write( *, fmt, advance="no" ) "Enter some text: " 
       read( *, fmt ) text 
     
       call reverse( text, 1, len_trim( text ) ) 
     
       write( *, fmt ) "Reversed text:   " // text 
     
    end program main 
     
     
                    
     
    Fortran                Examples Part F         David Apsley 
       Sieve of Eratosthenes to find primes 
        
       program main 
          implicit none 
          logical, allocatable :: isPrime(:) 
          integer N 
          integer i, imax 
        
          write( *, * ) "Input N: " 
          read( *, * ) N 
          allocate( isPrime(2:N) );   isPrime = .true. 
          imax = sqrt( N + 1.0 ) 
        
          do i = 2, imax 
             if ( isPrime(i) ) isPrime(i+i:N:i) = .false. 
          end do 
        
          write( *, * ) "Prime numbers are: " 
          do i = 2, N 
             if ( isPrime(i) ) write( *, "( 1x, i0 )", advance = "no" ) i 
          end do 
        
       end program main 
        
        
       Input N: 100 
        Prime numbers are:  
        2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97                         
        
       Fortran                               Examples Part F                         David Apsley 
The words contained in this file might help you see if this file matches what you are looking for:

...Example programs f revision recursion examples highest common factor hcf aka greatest divisor gcd recursive integer function a b result answer implicit none intent in if then base case else modulo end program test external print input read is main call convert to binary module binarymodule contains n character len allocatable note variable length digit lower bound high not found middle low value binarysearch upper binarysearchmodule use pos write array i x advance no enter size search full range at position couldn t find fortran part david apsley sum of digits sumdigits single number reverse word subroutine text l r inout c swap ends parameter fmt some trim reversed sieve eratosthenes primes logical isprime imax allocate true sqrt do false prime numbers are...

no reviews yet
Please Login to review.