логическое выражение на фортране - PullRequest
1 голос
/ 24 октября 2011

* Я пытаюсь сгруппировать набор данных в соответствии с некоторыми условиями, используя код 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)

Я не могу отследить ошибку.Кто-нибудь может подсказать ошибку?

ПРИМЕЧАНИЕ : это не задание

Ответы [ 3 ]

4 голосов
/ 24 октября 2011

Fortran 90 имеет шесть операторов связи: <, <=,>,> =, ==, / =
Каждый из этих шести реляционных операторов принимает два выражения, сравнивает их значения и выдает .TRUE. или. ЛОЖЬ.
Таким образом, a> b

Перепишите ваш тест как:

if  ( (0 > dihedral(i) .and. dihedral(i) < 120) .or. (-120 > dihedral(i) .and. dihedral(i) < 0) )  then
1 голос
/ 24 октября 2011

Вы не можете комбинировать такие выражения: а> б <с в Фортране Напишите что-то вроде этого: а> б. и. б <с </p>

0 голосов
/ 24 октября 2011

Что это такое?

0 > dihedral(i) < 120

Если это

a < x .and. x < b

Если это что-то еще ...

...