2.10. Массивы

Существуют два способа описания массива - описание измерений массива в операторе DIMENSION плюс описание типа элементов массива, или описание измерений массива непосредственно в операторе описания типа. Оператор DIMENSION записывается следующим образом :

DIMENSION имя массива([нижняя граница:]верхняя граница[,...]) Нижняя граница измерения массива по умолчанию равна 1. Оператор DIMENSION никак не определяет тип элемента массива, но только количество и длины его измерений. Границы измерений могут задаваться любыми арифмети­ческими константными выражениями. Если какая-либо граница задана вещест­венным значением, оно преобразуется к целому отбрасыванием дробной части. Язык FORTRAN не задает никаких ограничений на размер массива и суммарный размер данных программы. Если тип элемента массива должен отличаться от типа, определенного по умолчанию, необходимо явно определить этот тип обыч­ным образом:

тип имя массива

Можно не пользоваться оператором DIMENSION для описания массива, одно­временно описывая тип элементов и измерения массива:

тип имя массива([нижняя граница:]верхняя граница[,...]) Инициализировать массивы можно в операторе DATA, так же, как и простые переменные (можно использовать повторители). Элементы многомерных масси­вов располагаются в памяти не так, как в языках Паскаль и C: первым меняется самый левый индекс. Пусть массив описан как DIMENSION x(3,3), тогда его элементы будут записаны в памяти в таком порядке : x11, x21, x31, x12, x22, x32, x13, x23, x33. Для сравнения такой же массив в программе на Паскале или C : x11, x12, x13, x21, x22, x23, x31, x32, x33. Элементы массива в программе можно использовать так же, как простые переменные соответствующего типа (кроме оператора DO),обращение к элементу массива имеет вид:

имямассива(индексное выражение,...) Индексное выражение может быть целого или вещественного типа. Массивы можно целиком вводить оператором READ и выводить оператором PRINT. Массиву можно присвоить массив с таким же описателем измерений, тип эле­ментов при этом может быть разным. Массиву можно присвоить скалярное вы­ражение - это присваивание будет выполнено для каждого элемента массива.

Массивы могут быть операндами выражений, например, запись PRINT*,SIN(a) вполне корректна. Операция над массивом означает последовательное выполне­ние этой операции над каждым элементом массива, результат выражения есть массив такой же структуры с элементами соответствующего типа.

При вводе и выводе массивов (и не только массивов) можно задавать так на­зываемые неявные циклы. Неявный цикл ввода-вывода записывается в виде:

(список ввода-вывода,переменная цикла=начало,конец[,приращение]) Переменная цикла, параметры начало, конец и приращение имеют тот же смысл, что и в операторе DO. Список ввода-вывода вводится или выводится столько раз, сколько раз выполняется неявный цикл. Если переменная цикла каким-то образом входит в список ввода-вывода, ее значение изменяется на каждом шаге цикла. Сам список ввода-вывода, в свою очередь, может включать неявные цик­лы.