我有一个简单的Fortran代码,我收到一个错误,我无法找到解决方案。有谁知道如何解决这个问题?
subroutine sort(A,A_done,N,P)
! Sort a real array by algebraically increasing value and return the permutation that
! rearranges the array
implicit none
Integer N, TEMP1, K, L, P(N), TEMP2
real(8), dimension(:) :: A_done
real(8), dimension(:) :: A
DO K=1, N-1
DO L=K+1, N
if A(K)>A(L)
TEMP1=A(K)
TEMP2=P(K)
A(K)=A(L)
P(K)=P(L)
A(L)=TEMP1
P(L)=TEMP2
end if
END DO
END DO
A_done=A
RETURN
END
gfortran -Wall -Werror -fbounds-check -w -L -lm -o模拟readinput.for noutfile.for mean.for covariance.for correlation.for rperm.for simmain.for sort.for 在文件sort.for:13
if A(K)>A(L)
1
错误:(1)处的不可分类陈述 在文件sort.for:20
end if
1
错误:在(1)处期待END DO语句 make: * [模拟]错误1
感谢您的帮助
答案 0 :(得分:1)
你忘记了一对括号和“然后”:
在if A(K)>A(L)
,您必须输入if (A(K)>A(L)) then
除此之外,您的代码有多个问题:
TEMP1=A(K)
和类似的表达式中,将实数(8)值传递给整数变量P
变量的作用(你能描述一下吗?),但你也混合了真(8)和整数。我做了一些你可能想要保留的更正,你可能会做得更多。此代码编译并运行良好。
Program test
implicit none
integer N
real(8), allocatable :: A(:), A_done(:), P(:)
N=5
Allocate (A(N), A_done(N), P(N))
A=(/5,3,6,1,9/)
call sort(A, A_done, N, P)
Write (*,*) A_done
End
subroutine sort(A,A_done,N,P)
! Sort a real array by algebraically increasing value and return the permutation that
! rearranges the array
implicit none
Integer N, K, L
real(8), dimension(N) :: A, A_done, P
real(8) :: TEMP1, TEMP2
DO K=1, N-1
DO L=K+1, N
if (A(K)>A(L)) then
TEMP1=A(K)
TEMP2=P(K)
A(K)=A(L)
P(K)=P(L)
A(L)=TEMP1
P(L)=TEMP2
end if
END DO
END DO
A_done=A
RETURN
END