Фортран: Счетчик внутри петли DO

У меня есть массив, из которого я хочу получить некоторую информацию.

Я написал небольшой цикл DO, но я не знаю, почему он всегда возвращается

integer :: inn=0
parameter :: m=115200
real*8 :: da1(m)

DO i=1, 115200
    IF( i<=19200 .and. da1(i)>1 .and. da1(i)<999.9999 .and. da1(i)<-1 )then
        inn=inn+1
    END IF
END DO
write(*,*) 'inn=',inn
  1. почему он всегда печатает 0, тогда как я проверил в файле, и этот массив действительно имеет много значений в определенном диапазоне
  2. Если ошибка в логике, кто-то может дать мне несколько советов о том, чтобы не делать таких ошибок в будущем?

2 ответа

Решение

The problem is your conditional:

da1(i).gt.1.00 .and. da1(i).lt.999.9999 .and. da1(i).lt.-1.000

How can a number (here: da1(i)) быть > 1 а также < -1 в то же время? That conditional is always false, and inn никогда не увеличивается.

Расширенный комментарий, а не ответ. Цикл может быть полностью заменен, вероятно,

count( da1(1:19200)>1 .and. da1(1:19200)<999.999 )

Я пишу, вероятно, потому что я не проверял это.

Я думаю, что цикл в диапазоне i = 1, 115200 а затем, внутри цикла, проверяя, что i<=19200 это просто неправильно. Если вы хотите зациклить, напишите i = 1, 19200,

Другие вопросы по тегам