我正在创建一个程序,需要从两个数组(ARR和MRK)读取值,计算每组值(I,J),以确定它们的第三个数组(X)的频率。到目前为止,我已经编写了以下内容,但嵌套错误阻止了程序的编译。非常感谢任何帮助!
IMPLICIT NONE
REAL, DIMENSION (0:51, 0:51) :: MRK, ALT
INTEGER :: I, J !! FREQUENCY ARRAY ALLELES
INTEGER, PARAMETER :: K = 2
INTEGER :: M, N !! HAPLOTYPE ARRAY POSITIONS
INTEGER :: COUNTER = 0
REAL, DIMENSION(0:1,0:K-1):: X
ALT = 8
MRK = 8
X = 0
MRK(1:50,1:50) = 0 !! HAPLOTYPE ARRAY WITHOUT BUFFER AROUND OUTSIDE
ALT(1:50,1:50) = 0
DO I = 0, 1 !! ALTRUIST ALLELE
DO J = 0, K-1 !! MARKER ALLELE
DO M = 1, 50
DO N = 1, 50 !! READING HAPLOTYPE POSITIONS
IF ALT(M,N) = I .AND. MRK(M,N) = J THEN
COUNTER = COUNTER + 1
ELSE IF ALT(M,N) .NE. I .OR. MRK(M,N) .NE. J THEN
COUNTER = COUNTER + 0
END IF
X(I,J) = COUNTER/2500
COUNTER = 0
END DO
END DO
END DO
END DO
答案 0 :(得分:4)
您的if
语法不正确。您应该在括号之间包含条件表达式。此外,我认为您应该在同一表达式中将单=
替换为双==
,并且可以将语法类型保留为==
和/=
或.eq.
和.neq.
,但不要混用它们:
IF (ALT(M,N) == I .AND. MRK(M,N) == J) THEN
COUNTER = COUNTER + 1
ELSE IF (ALT(M,N) /= I .OR. MRK(M,N) /= J) THEN
COUNTER = COUNTER + 0
END IF
我不知道你在实际的程序中是否这样做,但你应该分别在代码的开头和结尾使用program program_name
和end program program_name
,其中{ {1}}是你想要称之为你的程序的任何东西(我认为不允许使用空格),尽管最后一个简单的program_name
就足够了。