Петля в Фортране из списка - PullRequest
5 голосов
/ 20 марта 2012

Я использую Фортран, и мне было интересно, возможно ли сделать что-то подобное

  do i = array
    write (*,*) i
  end do

где массив - это список целых чисел, которые не обязательно упорядочены.

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

Я бы ввел второй индекс для перебора элементов массива:

program test

  implicit none

  integer, dimension(6)  :: A
  integer, dimension(10) :: B
  integer                :: i, j

  A = (/ 1, 3, 4, 5, 8, 9 /)
  B = (/ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 /)

  do j = 1, size(A)
     i = A(j)
     write(*,*) i, B(i)
  end do

end program test
2 голосов
/ 20 марта 2012

Вы имеете в виду, что вы хотите записать некоторые элементы массива с именем other_array, но не все из них, и что i должен по существу принимать произвольные значения по очереди? Другими словами, вы хотите печатать не

do i = 1, size(other_array,1)
    write(*,*) other_array(i)
end do

но что-то вроде

array = [1,3,4,2,3,7,8,8,12]
write(*,*) another_array(array)

который будет записывать элементы another_array, указанные в array? Это называется подпиской на массив. Я не проверял это и сейчас ухожу, поэтому не буду.

...