将数组值分配给函数中的标量

时间:2016-10-29 04:11:31

标签: fortran gfortran fortran95

program TEST
IMPLICIT NONE 

DOUBLE PRECISION, DIMENSION(37,4) :: originalCoords ! Save the original array of coordinates and delta x/y positions
integer :: row, col, maxRows,maxCols, i, j   !loop variables  
doubleprecision :: diameter, mark
diameter = 0.7534 
maxRows = 37
maxCols = 4

open(10, file = 'coords.txt')
do row = 1, maxRows                     
  read(10,*) (originalCoords(row, col), col = 1, maxCols)
end do
close(10) 

!sample use of the function
if ( diameter >= Pitch( originalCoords(1,1), originalCoords(1,2), originalCoords(2,1), originalCoords(2,2), originalCoords(1,3), originalCoords(1,4), originalCoords(2,3), originalCoords(2,4) ) ) then 
print *, 'There is an error and the two circles will collide' 


end program TEST

double precision Function Pitch(x1, y1, x2, y2, dx1, dy1, dx2, dy2) 
IMPLICIT NONE
DOUBLE PRECISION :: x1(:), x2(:), y1(:), y2(:), dx1(:), dy1(:), dx2(:), dy2(:)  
doubleprecision :: x1_Coord, y1_Coord, x2_Coord, y2_Coord

x1_Coord = x1
y1_Coord = y1 + dy1 
x2_Coord = x2 + dx2 
y2_Coord = y2 + dy2

Pitch = sqrt( ((x2_Coord - x1_Coord)**2) + ((y2_Coord - y1_Coord)**2) )

return 
end Function Pitch  

我收到错误“在分配中不兼容的排名0和1” 对于 x1_Coord = x1 y1_Coord = y1 + dy1 x2_Coord = x2 + dx2 y2_Coord = y2 + dy2 如何将数组中的值分配给变量。我将数组值传递给函数,现在我需要使用这些值,就像它们是数字一起添加来计算一些叫做音高的东西 为什么我收到此错误?

2 个答案:

答案 0 :(得分:0)

CONTAINS 
DOUBLE PRECISION Function Pitch(x1, y1, x2, y2, dx1, dy1, dx2, dy2) 
IMPLICIT NONE
DOUBLE PRECISION :: x1, x2, y1, y2, dx1, dy1, dx2, dy2  
DOUBLE PRECISION :: x1_Coord, y1_Coord, x2_Coord, y2_Coord

x1_Coord = x1 + dx1
y1_Coord = y1 + dy1 
x2_Coord = x2 + dx2 
y2_Coord = y2 + dy2

Pitch = sqrt( ((x2_Coord - x1_Coord)**2) + ((y2_Coord - y1_Coord)**2) )

return 
end Function Pitch  
end program TEST

需要在程序中添加contains并在函数声明后结束它 也不要将x1值分配为数组,就像常规标量一样

答案 1 :(得分:-1)

由于x1_Coord是缩放器,因此您需要为其指定另一个缩放器。哪个是数组x1的元素,而不是整个数组。所以:x1_Coord = x (i)。但是你要处理哪个元素i?目前尚不清楚你要做什么。如果您只想处理数组的一个元素,可能需要将该值作为参数传递。此外,在使用该功能之前,您可能应将其放在模块中。