#fortran #fortran90
#fortran #fortran90
Вопрос:
* Я пытаюсь сгруппировать набор данных в соответствии с некоторым условием, используя код FORTRAN. Код выглядит следующим образом.
gauche = 0.0
trans = 0.0
do i = 1, total_data
!write(*,*) nombor(i), dihedral(i)
if ( (0 > dihedral(i) < 120) .or. (-120 > dihedral(i) < 0) ) then
gauche = gauche 1
else
trans = trans 1
endif
end do
write(20,*) "Layer1_seg_total= ",(gauche trans)," ","gauche_seg= ",gauche,"trans_seg= trans
Но когда я компилирую, я получаю сообщение об ошибке, как показано ниже:
if ((0 > dihedral(i) < 120) .or. (-120 > dihedral(i) < 0)) then
1
Error: Expected a right parenthesis in expression at (1)
population.f90:42.5:
else
1
Error: Unexpected ELSE statement at (1)
population.f90:44.4:
endif
1
Error: Expecting END DO statement at (1)
Я не могу отследить ошибку. Может кто-нибудь подсказать ошибку?
ПРИМЕЧАНИЕ: это не задание
Ответ №1:
Fortran 90 имеет шесть реляционных операторов: <, <=, >, >=, ==, /=
Каждый из этих шести реляционных операторов принимает два выражения, сравнивает их значения и выдает .TRUE. или .FALSE.
Таким образом, a> b < c неверно, потому что a < b ЛОГИЧНО, а c РЕАЛЬНО.
Перепишите свой тест как:
if ( (0 > dihedral(i) .and. dihedral(i) < 120) .or. (-120 > dihedral(i) .and. dihedral(i) < 0) ) then
Комментарии:
1. Верно, но логически выражение (0> x .и. x < 120) и другое также не имеют смысла. Я думаю, что это (0 < x .и. x < 120).
2. Согласен, хотя, насколько я понимаю, вопрос был больше о понимании сообщения компилятора 🙂
Ответ №2:
Вы не можете комбинировать выражения, подобные этому: a > b < c в Fortran Напишите что-то вроде этого: a> b .и. b < c
Ответ №3:
Что это?
0 > dihedral(i) < 120
Если это a < x < b, то оно должно быть записано как
a < x .and. x < b
Если это что-то другое…