Фортран: Счетчик внутри петли 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
- почему он всегда печатает 0, тогда как я проверил в файле, и этот массив действительно имеет много значений в определенном диапазоне
- Если ошибка в логике, кто-то может дать мне несколько советов о том, чтобы не делать таких ошибок в будущем?
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
,