在fortran中的逻辑表达

时间:2011-10-24 06:25:45

标签: 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)

我无法追踪错误。谁能提出错误?

注意:这不是作业

3 个答案:

答案 0 :(得分:4)

Fortran 90有六个关系运算符:&lt;,&lt; =,&gt;,&gt; =,==,/ =
这六个关系运算符中的每一个都采用两个表达式,比较它们的值,并产生.TRUE。或者.FALSE。
因此,a> b&lt; c是错误的,因为&lt; b是LOGICAL,c是REAL。

将您的测试重写为:

if  ( (0 > dihedral(i) .and. dihedral(i) < 120) .or. (-120 > dihedral(i) .and. dihedral(i) < 0) )  then

答案 1 :(得分:1)

你不能组合这样的表达式:     a&gt; b&lt; C 在Fortran 写下这样的东西:     a&gt; b。和。 b&lt; ç

答案 2 :(得分:0)

这是什么?

0 > dihedral(i) < 120

如果是&lt; x&lt;那么它应该写成

a < x .and. x < b

如果还有别的......