在FORTRAN中嵌套错误

时间:2014-04-21 07:21:33

标签: fortran fortran90

我正在创建一个程序,需要从两个数组(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

1 个答案:

答案 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_nameend program program_name,其中{ {1}}是你想要称之为你的程序的任何东西(我认为不允许使用空格),尽管最后一个简单的program_name就足够了。