remonae
remonae

Reputation: 11

How to call function from different file in fortran using microsoft visual studio

I created a program to calculate Fibonacci numbers, using a subprogram that contains functions. how to call the function in my main program in visual studio

ps: i use intel compiler

the function that i make is bellow

    program function_fibonacci

    implicit none
function fibonacci (n1,n2,n)
integer, intent(in)::n1,n2,n
integer::fibonacci(1:n),i
fibonacci(1)=n1
fibonacci(2)=n2
do i=3,n
    fibonacci(i)=fibonacci(i-1)+fibonacci(i-2)
end do

    end program function_fibonacci

than how can i call that function in my main code

program fibonacci
integer ::n1,n2,n
print *, 'input the first fibonacci number'
read *, n1
print *, 'input the second fibonacci number'
read *, n2
print *, 'how many Fibonacci numbers do you want to display?'
read *, n
print *, 'Result'
print *, fibonacci(n1,n2,n)
end program fibonacci

if we use linux we can just type

gfortran -g main_program.f90 -o program.exe

Upvotes: 1

Views: 215

Answers (2)

jalex
jalex

Reputation: 1524

Your program needs a contains section

program test_fibonacci
implicit none

print *, fibonacci(1,2, 8)

contains
function fibonacci (n1,n2,n)
integer, intent(in)::n1,n2,n
integer::fibonacci(1:n),i
fibonacci(1)=n1
fibonacci(2)=n2
do i=3,n
    fibonacci(i)=fibonacci(i-1)+fibonacci(i-2)
end do
end program 

Upvotes: 0

Your syntax is invalid. You cannot write

    program function_fibonacci

    implicit none
function fibonacci (n1,n2,n)
    ...

You can either make the function internal to the program (not recommended) or put it into a module (recommended). Creating the function separate as external is not possible here because the function returns an array and is not recommended in general. How to declare the type of a function that returns an array in Fortran?

module functions
  implicit none
contains

function fibonacci (n1,n2,n)
  integer, intent(in)::n1,n2,n
  integer::fibonacci(1:n),i
  fibonacci(1)=n1
  fibonacci(2)=n2
  do i=3,n
    fibonacci(i)=fibonacci(i-1)+fibonacci(i-2)
  end do
end function

end module

program fibonacci

use functions

implicit none
integer ::n1,n2,n
print *, 'input the first fibonacci number'
read *, n1
print *, 'input the second fibonacci number'
read *, n2
print *, 'how many Fibonacci numbers do you want to display?'
read *, n
print *, 'Result'
print *, fibonacci(n1,n2,n)

end program fibonacci

Upvotes: 2

Related Questions