Fortran 中的逻辑表达式

发布于 2024-12-11 07:11:45 字数 837 浏览 0 评论 0原文

*我正在尝试使用 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)

我无法跟踪错误。任何人都可以提出错误吗?

注意:这不是作业

*I am trying to group set of data according some condition using FORTRAN code.
The code is as below.

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

But when I compile I get error message as below:

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)

I can not trace the error. Can anyone suggest the mistake?

NOTE: this is not an assignment

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜唯美灬不弃 2024-12-18 07:11:45

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

Fortran 90 has six relational operators: <, <=, >, >=, ==, /=
Each of these six relational operators takes two expressions, compares their values, and yields .TRUE. or .FALSE.
Thus, a > b < c is wrong, because a < b is LOGICAL and c is REAL.

Rewrite your test as:

if  ( (0 > dihedral(i) .and. dihedral(i) < 120) .or. (-120 > dihedral(i) .and. dihedral(i) < 0) )  then
笑梦风尘 2024-12-18 07:11:45

您不能像这样组合表达式:
a> b< c
在 Fortran 语言中
写这样的东西:
a>乐队。 b< c

You cannot combine expressions like this:
a > b < c
in Fortran
Write something like this:
a > b .and. b < c

离旧人 2024-12-18 07:11:45

这是什么?

0 > dihedral(i) < 120

如果它是一个< x < b 那么它应该写成“

a < x .and. x < b

如果是别的什么……”

What is this?

0 > dihedral(i) < 120

If it is a < x < b then it should be written like

a < x .and. x < b

If it something else...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文