В Фортране нет основной операции c, которая предписывала бы выбрать определенный набор элементов массива на основе критерия исключения. Однако существует несколько подходов, требующих более сложных усилий.
Если можно построить массив желаемых индексов для включения, то можно использовать векторные индексы
integer a(10)
integer, allocatable :: idx(:)
idx = [...] ! An array constructor of the desired elements to select
a(idx) = 2*a(idx)
такой конструктор массива для случай вопроса вполне может быть idx=[1,(i,i=3,10)]
. Мы можем создать этот массив во многих операторах или даже не использовать переменную для индекса вектора.
Мы можем выбрать элементы массива, чтобы действовать с помощью конструкции WHERE
integer a(10), i
a = 1
where ([(i,i=1,10)]/=2) ! Or other selecting expression
a = 2*a
end where
(Для Fortran 90 с тегами используйте вместо этого конструкторы массивов (/(...)/)
.)
Существуют также подходы к разделам массива (как в ответе Tine198) или просто с использованием исключения в al oop:
do i=1, 10
if (i==2) cycle ! Or other element exclusion criterion
a(i) = 2*a(i)
end do