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
如何将数组中的值分配给变量。我将数组值传递给函数,现在我需要使用这些值,就像它们是数字一起添加来计算一些叫做音高的东西
为什么我收到此错误?
答案 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
?目前尚不清楚你要做什么。如果您只想处理数组的一个元素,可能需要将该值作为参数传递。此外,在使用该功能之前,您可能应将其放在模块中。