Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!

return required on function?

larson__michael
Beginner
121 Views

NEVERMIND.... I figured it out...

 

 

 

Hi I am working on re-learning modern Fortran by working through the Project Euler examples.

In writing a fibonacci function a "return" is required to actually get the result pushed back, I seem to remember that was required in F77..

I would suspect that

     f = fibonacci(x)                                                                                                                                                                                         

Would be enough but through trial and error I found that issuing a "return" at the end of the fibonacci function makes it all work correctly. But this is contrary to just about any fortran example I have seen posted on the web

Thanks ahead of time

 

 

! PROBLEM 2                                                                                                                                                                                                   

integer function fibonacci(x)                                                                                                                                                                                 

  implicit none                                                                                                                                                                                               

  integer :: x                                                                                                                                                                                                

  integer :: i                                                                                                                                                                                                

  integer :: x_m_1, x_m_2                                                                                                                                                                                     

                                                                                                                                                                                                              

  if (x == 0) then                                                                                                                                                                                            

     fibonacci = 1                                                                                                                                                                                            

  elseif (x == 1) then                                                                                                                                                                                        

     fibonacci = 2                                                                                                                                                                                            

  else                                                                                                                                                                                                        

     x_m_1 = 2                                                                                                                                                                                                

     x_m_2 = 1                                                                                                                                                                                                

     fibonacci = 0                                                                                                                                                                                            

     do i = 2,x                                                                                                                                                                                               

        fibonacci = x_m_1 + x_m_2                                                                                                                                                                             

        x_m_2 = x_m_1                                                                                                                                                                                         

        x_m_1 = fibonacci                                                                                                                                                                                     

        if (fibonacci < 0) then                                                                                                                                                                               

           stop                                                                                                                                                                                               

        end if                                                                                                                                                                                                

     end do                                                                                                                                                                                                   

  end if                                                                                                                                                                                                                                                                                                                                                                                                                    

  return                                                                                                                                                                                                      

end function fibonacci                                                                                                                                                                                        

                                                                                                                                                                                                              

subroutine problem_2                                                                                                                                                                                          

  implicit none                                                                                                                                                                                               

  integer :: sum = 0                                                                                                                                                                                          

  integer :: even_sum = 0                                                                                                                                                                                     

  integer :: x = 0                                                                                                                                                                                            

  integer :: f                                                                                                                                                                                                

  integer :: fibonacci                                                                                                                                                                                        

                                                                                                                                                                                                              

  do while (f <= 4000000)                                                                                                                                                                                     

     f = fibonacci(x)                                                                                                                                                                                         

     !print *, "Fibonacci ", x, " = ", f                                                                                                                                                                      

                                                                                                                                                                                                              

     sum = sum + f                                                                                                                                                                                            

     !print *, "sum = ", sum                                                                                                                                                                                  

                                                                                                                                                                                                              

     if (mod(f, 2) == 0) then                                                                                                                                                                                 

        even_sum = even_sum + f                                                                                                                                                                               

     end if                                                                                                                                                                                                   

     !print *, "even_sum = ", even_sum                                                                                                                                                                        

                                                                                                                                                                                                              

     x = x + 1                                                                                                                                                                                                

  end do                                                                                                                                                                                                      

                                                                                                                                                                                                              

  print *, "Sum is ", sum                                                                                                                                                                                     

  print *, "Even Sum is ", even_sum                                                                                                                                                                           

end subroutine problem_2                                                                                                                                                                                      

                                            

0 Kudos
2 Replies
GVautier
New Contributor II
121 Views

F is not initialized before the do while loop so it may never enter

larson__michael
Beginner
121 Views

good point... woops.

Reply