Do-loop忽略if语句

时间:2016-11-28 22:27:41

标签: if-statement fortran do-loops

我正在尝试在do循环中使用if语句,该循环应该生成素数。为此,我使用modulo来排序数字。在找到素数后,我希望它更进一步并加1,以便找到下一个素数并将其添加到数组pzahl中。我的问题是循环似乎忽略了它应该在plauf找到一个素数之后再向前迈一步,以便它一直持续到无穷大......我试图重新排列循环的内容,如果声明,但它只是不起作用。这是代码:

PROGRAM Primzahlen

   IMPLICIT NONE

   INTEGER :: start, plauf, n, a
   INTEGER, ALLOCATABLE, DIMENSION(:) :: pzahlen !array into which the  prime numbers should be added
   INTEGER :: input
   INTEGER, DIMENSION(:), ALLOCATABLE :: alle 

   PRINT *, "How many prime numbers should be listed"
   READ (*,*) input
   ALLOCATE (pzahlen(input))
   pzahlen(1) = 1 
   start = 2
   plauf = 1

 loop1: DO 

   ALLOCATE(alle(start))

    loop2: DO n = 1,start
       alle(n)= MODULO(start,n)
    END DO loop2

   IF (minval(alle) /= 0) THEN  ! This is what it seems to ignore.
    plauf= plauf + 1 
    pzahlen(plauf) = start
    PRINT *, plauf
   END IF

  start = start + 1

 IF (plauf == eingabe) then
    EXIT
 END IF
 PRINT *,  alle
 DEALLOCATE(alle)

END DO loop1

PRINT *, "prime numbers:" , pzahlen(1:input)

END PROGRAM Primzahlen 

我使用gfortran编译器并在Emacs中编写它,如果这有助于了解。

1 个答案:

答案 0 :(得分:2)

它没有忽略它,它正确执行:

loop2: DO n = 1,start
   alle(n)= MODULO(start,n)
END DO loop2

start是什么并不重要,alle(1)将始终为零,因为每个整数都可以被1整除。这意味着minval(alle)也将始终为零,意味着条件minval(alle) /= 0永远不会成立,并且该语句永远不会执行。

已添加:最后一个值alle(start)也将为零,因为每个数字都可以自行整除。