Массивы в Fortran: индексы, срезы и типичные ошибки
Главное отличие Fortran от C++ и C#: индексы по умолчанию начинаются с единицы, а не с нуля. Если вам нужно по-другому, границы можно задать явно, например real :: a(0:9) создаст массив с индексами от 0 до 9. Это удобно, но легко запутаться, поэтому всегда проверяйте, с какого индекса начинается ваш массив.
Ещё одна сильная сторона языка — работа с массивом целиком и срезы. Не нужно писать цикл, чтобы умножить все элементы на два, достаточно одной строки:
real :: a(5)
a = [1.0, 2.0, 3.0, 4.0, 5.0]
print *, a(2:4) ! элементы со 2-го по 4-й
a = a * 2 ! умножили весь массив сразу
Типичные ошибки: выход за границы массива (по умолчанию компилятор может этого не заметить, а программа даст странный результат; в gfortran помогает ключ -fcheck=bounds) и неудобный порядок вложенных циклов. Fortran хранит двумерные массивы по столбцам, поэтому внутренний цикл должен идти по первому индексу, тогда расчёты работают заметно быстрее.
Не получается с массивами в вашей программе? Напишите мне, посмотрим вместе.