从函数中返回一个数组,并将其存储在主程序中 [英] Return an array from a function and store it in the main program
问题描述
程序集成
EXTERNAL函数
DOUBLE PRECISION函数,a ,b,sum,h
INTEGER n,i
REAL s
参数(a = 0,b = 10,n = 200)
h =(ba)/ n
sum = 0.0
DO i = 1,n
sum = sum + funct(i * h + a)
END DO
sum = h *(sum-0.5 *(funct(a)+ funct(b)))
PRINT *,sum
CONTAINS
END
以下是函数funct(x)
pre $
双精度函数funct(x)
IMPLICIT NONE
双精度x
INTEGER K
Do k = 1,10
funct = x ** 2 * k
End Do
PRINT *,'函数的值是', funct
RETURN
END
我想'Sum'
在Main中程序在函数 funct(x)
中打印超过10个不同k值的10个不同的和。
我试过上面的程序,但它只是编译了最后一个值 Funct()
而不是10个不同的值总和。
数组结果需要一个明确的接口。您还需要将 funct
和 sum
调整为使用维
语句。使用显式接口需要Fortran 90+(感谢@francescalus和@VladimirF的提示),并且非常单调:
程序整合
INTERFACE功能
功能功能(x)结果(r)
隐式无
双精度r
尺寸r(10)
双精度x
END FUNCTION
END INTERFACE
双精度a,b,sum,h
DIMENSION sum(10)
INTEGER n,i
PARAMETER (a = 0,b = 10,n = 200)
h =(ba)/ n
sum = 0.0
DO i = 1,n
sum = sum + funct(i * h + a)
END DO
sum = h *(sum-0.5 *(funct(a)+ funct(b)))
打印*,总和
完成
功能功能(x)
隐式无
双精度功能
DIMENSION功能(10)
DOUBLE PRECISION x
INTEGER K
Do k = 1,10
funct(k)= x ** 2 * k
End Do
PRINT *,'功能值是',功能
RETURN
END
如果可以,您应该切换到更新的标准,例如Fortran 90+,并使用 或者,您可以将 请注意,我将 这个版本只返回一个标量并填充main程序。 除此之外,我不确定使用名为 Here is the Main Program: And below is the Function funct(x) I would like the I have tried the above program but it just compiles the last value of Array results require an explicit interface. You would also need to adjust If you can, you should switch to a more modern Standard such as Fortran 90+, and use Alternatively, you could take the loop over Notice that I pass This version just returns a scalar and fills the array in the main program. Apart from that I'm not sure it is wise to use a variable called 这篇关于从函数中返回一个数组,并将其存储在主程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! modules 。这些自动提供接口,这使代码更简单。
k
的循环从函数中取出,并按元素执行求和。这将是有效的FORTRAN 77:
程序集成
c ...
DIMENSION sum(10)
c ...
INTEGER K
c ...
DO i = 1,n
Do k = 1,10
sum(k)= sum( k)+ funct(i * h + a,k)
End Do
END DO
c ...
k
传递给该函数。它需要作相应的调整:
pre $ DOUBLE PRECISION FUNCTION funct(x,k)
IMPLICIT NONE
DOUBLE PRECISION x
INTEGER K
funct = x ** 2 * k
PRINT *,'功能值为',功能
RETURN
END
sum
。 内部函数具有相同的名称。这可能会导致一些混乱...... PROGRAM integration
EXTERNAL funct
DOUBLE PRECISION funct, a , b, sum, h
INTEGER n, i
REAL s
PARAMETER (a = 0, b = 10, n = 200)
h = (b-a)/n
sum = 0.0
DO i = 1, n
sum = sum+funct(i*h+a)
END DO
sum = h*(sum-0.5*(funct(a)+funct(b)))
PRINT *,sum
CONTAINS
END
DOUBLE PRECISION FUNCTION funct(x)
IMPLICIT NONE
DOUBLE PRECISION x
INTEGER K
Do k = 1,10
funct = x ** 2 * k
End Do
PRINT *, 'Value of funct is', funct
RETURN
END
'Sum'
in the Main Program to print 10 different sums over 10 different values of k in Function funct(x)
. Funct()
instead of 10 different values in sum.funct
and sum
to actually be arrays using the dimension
statement. Using an explicit interface requires Fortran 90+ (thanks for the hints by @francescalus and @VladimirF) and is quite tedious: PROGRAM integration
INTERFACE funct
FUNCTION funct(x) result(r)
IMPLICIT NONE
DOUBLE PRECISION r
DIMENSION r( 10 )
DOUBLE PRECISION x
END FUNCTION
END INTERFACE
DOUBLE PRECISION a , b, sum, h
DIMENSION sum( 10)
INTEGER n, i
PARAMETER (a = 0, b = 10, n = 200)
h = (b-a)/n
sum = 0.0
DO i = 1, n
sum = sum+funct(i*h+a)
END DO
sum = h*(sum-0.5*(funct(a)+funct(b)))
PRINT *,sum
END
FUNCTION funct(x)
IMPLICIT NONE
DOUBLE PRECISION funct
DIMENSION funct( 10)
DOUBLE PRECISION x
INTEGER K
Do k = 1,10
funct(k) = x ** 2 * k
End Do
PRINT *, 'Value of funct is', funct
RETURN
END
modules
. These provide interfaces automatically, which makes the code much simpler. k
out of the function, and perform the sum element-wise. This would be valid FORTRAN 77: PROGRAM integration
c ...
DIMENSION sum( 10)
c ...
INTEGER K
c ...
DO i = 1, n
Do k = 1,10
sum(k)= sum(k)+funct(i*h+a, k)
End Do
END DO
c ...
k
to the function. It needs to be adjusted accordingly: DOUBLE PRECISION FUNCTION funct(x,k)
IMPLICIT NONE
DOUBLE PRECISION x
INTEGER K
funct = x ** 2 * k
PRINT *, 'Value of funct is', funct
RETURN
END
sum
. There is an intrinsic function with the same name. This could lead to some confusion...