2011-10-24 25 views
1

* FORTRANコードを使用してある条件でデータセットをグループ化しようとしています。 コードは以下の通りです。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) 

。誰もが間違いを示唆することはできますか?

:<、< =、>、> =、==、/ =
これらの6つの関係演算子のそれぞれが取る二つの式:これは

答えて

4

のFortran 90は、6つの関係演算子を有する割り当てませんそれらの値を比較し、.TRUEを生成する。または.FALSE。
したがって、< bはLOGICALであり、cはREALであるため、a> b < cは間違っています。

のように、あなたのテストを書き直し

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

論理的には、式(0> xと。x <120)と別の式も意味をなさない。私はそれを考える(0 Wildcat

+0

合意しましたが、私の理解は、質問はコンパイラのメッセージを理解することに関するものです。:) – cma

+0

ありがとうございました。できます。 – Vijay

0

これは何ですか?

0 > dihedral(i) < 120 

それはそうでなければ、何か...

1

あなたはこのような式を組み合わせることができない場合、それは

a < x .and. x < b 

のように記述する必要があります< X < Bの場合: > B < c in Fortran このような書き込み: a> b .and。 b < c

+0

ありがとうございます。 – Vijay