首页 > 解决方案 > 在 Fortran 数组中查找第一个和最后一个正值

问题描述

我有一个整数数组。有几个值为零,至少有几个大于零。我想找到数组中第一个和最后一个正值的位置。当然,这可以通过循环来完成。但是,对于现代 Fortran 数组功能,我认为必须有更紧凑和优雅的东西。但我什么也没有。有人知道这样做的好方法吗?

标签: arraysfortran

解决方案


我被迫回答,因为现有的答案是巴洛克式的且不正确。我的回答是基于 FINDLOC 与 LOGICAL ARRAY= 和 VALUE= 参数一起使用的事实:

program find
   integer, allocatable :: data(:)
   data = [-3, 3, 2, 0, -2]
   write(*,'(*(g0))') 'First Positive = ',findloc(data > 0, .TRUE.)
   write(*,'(*(g0))') 'Last Positive = ',findloc(data > 0, .TRUE., BACK = .TRUE.)
   write(*,*) findloc(sign(1, data), 1)
   write(*,*) findloc(sign(1, data), 1, back=.true.)
end program find

来自 equation.com 的 gcc 版本 9.0.0 20181125 (experimental) (GCC) 的输出:

First Positive = 2
Last Positive = 3
           2
           4

请注意,如果参数 B= 为零,则 SIGN 内在函数会给出误报。


推荐阅读