Fortran select case语句中的非常量变量
假设我的Fortran程序中有以下代码:Fortran select case语句中的非常量变量,fortran,Fortran,假设我的Fortran程序中有以下代码: recursive function T_GreCoDi( n, m ) result (GCD) implicit none integer, intent(in) :: n, m integer :: GCD select case(n) case(0) select case(m) case(0) print *, 'both of your numbers are zero
recursive function T_GreCoDi( n, m ) result (GCD)
implicit none
integer, intent(in) :: n, m
integer :: GCD
select case(n)
case(0)
select case(m)
case(0)
print *, 'both of your numbers are zeros. GCD = -1'
GCD = -1
case default
GCD = m
end select
case(1)
GCD = 1
case default
select case(m)
case(0)
GCD = n
case(:n)!<--THIS IS PROBLEM
GCD = T_GreCoDi(n-m, m)
case default
GCD = T_GreCoDi(m-n, n)
end select
end select
end function T_GreCoDi
递归函数T_GreCoDi(n,m)结果(GCD)
隐式无
整数,意图(in)::n,m
整数::GCD
选择案例(n)
案例(0)
选择案例(m)
案例(0)
打印*,'两个数字都是零。GCD=-1'
GCD=-1
案例违约
GCD=m
结束选择
案例(1)
GCD=1
案例违约
选择案例(m)
案例(0)
GCD=n
案例(:n) 如果我写这篇文章,我真的不会使用
selectcase
构造。不过,我会在这样的假设下回答,即就目前而言,这是必要的
一般的答案是使用案例选择器,无论哪种形式
(n)
(l:)
(l:u)
(:u)
n
,l
或u
)都必须是一个标量常量表达式。Fortran就是这么说的。这就是编译器抱怨的原因
要保留选择case
构造,必须重写某些内容。但是什么呢
让我们看看这里的具体案例,以及部分
select case(n)
case(0) ...
case(1) ...
case default ! n is an integer not 0 or 1
select case(m)
case(0) ...
case(****) ! Something here for m<n and m.ne.0
GCD = T_GreCoDi(n-m, m)
case default
GCD = T_GreCoDi(m-n, n)
end select
end select
你不想那样做。是
GCD = T_GreCoDi(ABS(n-m), MIN(m,n))
更好
select case(n)
case(0)
select case(m)
case(0)
print *, 'both of your numbers are zeros. GCD = -1'
GCD = -1
case default
GCD = m
end select
case(1)
GCD = 1
case default
select case(m)
case(0)
GCD = n
case default
GCD = T_GreCoDi(ABS(n-m), MIN(m,n))
end select
end select
老实说,我认为这证实了我的怀疑,
案例结构
不是解决问题的方法。我已经编辑了我的问题。真遗憾。我没有想到ABS的功能。谢谢你的主意。
select case(n)
case(0)
select case(m)
case(0)
print *, 'both of your numbers are zeros. GCD = -1'
GCD = -1
case default
GCD = m
end select
case(1)
GCD = 1
case default
select case(m)
case(0)
GCD = n
case default
GCD = T_GreCoDi(ABS(n-m), MIN(m,n))
end select
end select