将数据值从模块传输到程序

时间:2018-04-17 18:39:03

标签: variables fortran

我的代码非常简单。我创建这个程序的想法是更好地理解Fortran中的模块。有人可以解释一下如何将变量值输入我的主程序。

我的模块代码如下:

module  circlescalculation

double precision:: pi = 3.14159265359
contains

subroutine circumference(radius)
implicit none
double precision :: radius,c
c = 2.0d0 * pi * radius
return
end subroutine circumference

subroutine area(radius)
implicit none
double precision :: radius,a
a = pi * radius**2
return
end subroutine area

end module circlescalculations

现在我将在我的其他程序中调用此代码:

include 'circlescalculations.f90'

program circles

use circlescalculations

implicit none
double precision radius,c,a
print *, "This program calculates the circumference and area of any given 
circle"
print *, "Please specify the radius:"
read *, radius
call circumference(radius)
call area(radius)
print *, "Area" , a
print *, "Circumference" , c
end program circles

我是Fortran的新手。我正在使用CYGWIN终端来调用编译器,因为我在Windows中运行。在我的终端中,我使用以下bash:

gfortran circlescalculations.f90 -c
gfortran circles.f90 -o test
./test

这是显然不正确的输出。

Output

我做错了什么?

1 个答案:

答案 0 :(得分:3)

程序c中声明的变量acircles与子程序c中定义的acircumference不同, area。从概念上讲,您需要某种方法将答案返回主程序,正如您所说。

许多方法可以做到这一点。根据最终目的和个人风格,“正确”方式会有所不同。我只想用这个答案指出你正确的方向。

返回数据的一个好的,直接的方法是传递子程序将答案的变量。你可以这样做:

subroutine area(radius,a)
   double precision, intent(IN) :: radius
   double precision, intent(OUT) :: a
   a = pi * radius**2
end subroutine area

现在,radiusa都是子程序区域的参数,但一个是输入,另一个是输出 。要调用它,请使用:

call area(radius,a)

或者,您可以将area声明为函数。祝你好运!