Function 如何在Fortran中读取函数/子程序中输入参数的不确定值?
下面的fortran代码将根据用户的输入计算圆或矩形的面积。如果只有一个输入浮点,则它将计算圆的面积;如果有两个,则它将返回矩形的面积。目前,我首先通过用户键入1或2来实现这一点。但是,我想知道,在fortran中是否有直接读取输入参数的方法。请提供你的智慧。我很感激Function 如何在Fortran中读取函数/子程序中输入参数的不确定值?,function,input,fortran,subroutine,Function,Input,Fortran,Subroutine,下面的fortran代码将根据用户的输入计算圆或矩形的面积。如果只有一个输入浮点,则它将计算圆的面积;如果有两个,则它将返回矩形的面积。目前,我首先通过用户键入1或2来实现这一点。但是,我想知道,在fortran中是否有直接读取输入参数的方法。请提供你的智慧。我很感激 module MA implicit none interface area module procedure area_circ ! calculate the area of circles module pr
module MA
implicit none
interface area
module procedure area_circ ! calculate the area of circles
module procedure area_rec ! rectangles
end interface
contains
real function area_circ(a)
implicit none
real, intent(in) :: a
real, parameter :: pi=3.14159
area_circ = pi*a**2
write(*,"('Area of circle = ',F6.2)") area_circ
return
end function area_circ
real function area_rec(a,b)
implicit none
real, intent(in) :: a,b
area_rec=a*b
write(*,"('Area of rectangle = ',F6.2)") area_rec
return
end function area_rec
end module MA
program hw1101
use MA
implicit none
real :: a,b,S
integer :: i
write(*,*) 'Please type # of parameters: '
read(*,*) i
if(i==1) then
write(*,*) "Please type one parameter: "
read(*,*) a
S=area(a)
else if (i==2) then
write(*,*) "Please type two paramters: "
read(*,*) a,b
S=area(a,b)
else
write(*,*) "Other functions under construction..."
end if
stop
end program hw1101
最新的Fortran编译器提供了许多用于处理命令行参数的内部例程。您可以使用函数
COMMAND\u ARGUMENT\u COUNT
获取执行程序时提供的数字,然后逐个读取。也许是这样的:
CHARACTER(len=16) :: arg
REAL, DIMENSION(4) :: arguments
...
DO ix = 1, COMMAND_ARGUMENT_COUNT()
CALL GET_COMMAND_ARGUMENT(ix,arg)
READ(arg,*) arguments(ix)
END DO
注意,子例程GET\u COMMAND\u参数
通过第二个参数(我称之为arg
)返回一个字符变量。它还有其他可选参数,因此您可能需要检查一些文档
当前确定调用哪个area
函数的方法没有问题,但是如果您愿意,您还可以编写一个area函数,该函数采用可选参数。下面是一个例子:
REAL FUNCTION area(a,b)
REAL, INTENT(in) :: a
REAL, INTENT(in), OPTIONAL :: b
IF (.NOT.PRESENT(b)) THEN
area = 3.14159*a*a
ELSE
area = a*b
END IF
END FUNCTION area
这应该给你一个大概的想法。属性
OPTIONAL
和内在逻辑函数PRESENT
是具有可选参数的例程所需要的。我认为您已经采用的方法实际上更好。最新的Fortran编译器提供了许多用于处理命令行参数的内部例程。您可以使用函数COMMAND\u ARGUMENT\u COUNT
获取执行程序时提供的数字,然后逐个读取。也许是这样的:
CHARACTER(len=16) :: arg
REAL, DIMENSION(4) :: arguments
...
DO ix = 1, COMMAND_ARGUMENT_COUNT()
CALL GET_COMMAND_ARGUMENT(ix,arg)
READ(arg,*) arguments(ix)
END DO
注意,子例程GET\u COMMAND\u参数
通过第二个参数(我称之为arg
)返回一个字符变量。它还有其他可选参数,因此您可能需要检查一些文档
当前确定调用哪个area
函数的方法没有问题,但是如果您愿意,您还可以编写一个area函数,该函数采用可选参数。下面是一个例子:
REAL FUNCTION area(a,b)
REAL, INTENT(in) :: a
REAL, INTENT(in), OPTIONAL :: b
IF (.NOT.PRESENT(b)) THEN
area = 3.14159*a*a
ELSE
area = a*b
END IF
END FUNCTION area
这应该给你一个大概的想法。属性
OPTIONAL
和内在逻辑函数PRESENT
是具有可选参数的例程所需要的。我认为您已经采用的方法实际上更好。最新的Fortran编译器提供了许多用于处理命令行参数的内部例程。您可以使用函数COMMAND\u ARGUMENT\u COUNT
获取执行程序时提供的数字,然后逐个读取。也许是这样的:
CHARACTER(len=16) :: arg
REAL, DIMENSION(4) :: arguments
...
DO ix = 1, COMMAND_ARGUMENT_COUNT()
CALL GET_COMMAND_ARGUMENT(ix,arg)
READ(arg,*) arguments(ix)
END DO
注意,子例程GET\u COMMAND\u参数
通过第二个参数(我称之为arg
)返回一个字符变量。它还有其他可选参数,因此您可能需要检查一些文档
当前确定调用哪个area
函数的方法没有问题,但是如果您愿意,您还可以编写一个area函数,该函数采用可选参数。下面是一个例子:
REAL FUNCTION area(a,b)
REAL, INTENT(in) :: a
REAL, INTENT(in), OPTIONAL :: b
IF (.NOT.PRESENT(b)) THEN
area = 3.14159*a*a
ELSE
area = a*b
END IF
END FUNCTION area
这应该给你一个大概的想法。属性
OPTIONAL
和内在逻辑函数PRESENT
是具有可选参数的例程所需要的。我认为您已经采用的方法实际上更好。最新的Fortran编译器提供了许多用于处理命令行参数的内部例程。您可以使用函数COMMAND\u ARGUMENT\u COUNT
获取执行程序时提供的数字,然后逐个读取。也许是这样的:
CHARACTER(len=16) :: arg
REAL, DIMENSION(4) :: arguments
...
DO ix = 1, COMMAND_ARGUMENT_COUNT()
CALL GET_COMMAND_ARGUMENT(ix,arg)
READ(arg,*) arguments(ix)
END DO
注意,子例程GET\u COMMAND\u参数
通过第二个参数(我称之为arg
)返回一个字符变量。它还有其他可选参数,因此您可能需要检查一些文档
当前确定调用哪个area
函数的方法没有问题,但是如果您愿意,您还可以编写一个area函数,该函数采用可选参数。下面是一个例子:
REAL FUNCTION area(a,b)
REAL, INTENT(in) :: a
REAL, INTENT(in), OPTIONAL :: b
IF (.NOT.PRESENT(b)) THEN
area = 3.14159*a*a
ELSE
area = a*b
END IF
END FUNCTION area
这应该给你一个大概的想法。属性OPTIONAL
和内在逻辑函数PRESENT
是具有可选参数的例程所需要的。我认为你已经采取的方法实际上更好