
- •Lesson 4 Массивы
- •Одномерные массивы Описание одномерных массивов
- •Ввод и вывод одномерных массивов Ввод одномерного массива
- •Вывод одномерного массива
- •Integer:: I
- •Примеры задач.
- •Многомерные массивы
- •Секции массива
- •Размещение массивов в памяти
- •Ввод и вывод массивов
- •Ввод двумерного массива
- •Вывод двумерного массива
- •Примеры задач.
- •Характеристики массивов
- •Форма массива. Конформные массивы
- •Функции shape и size
- •Выражения с массивами и присваивание массивов
- •Оператор и конструкция where
- •Динамические массивы
Lesson 4 1
Массивы 1
Одномерные массивы 2
Описание одномерных массивов 2
Ввод и вывод одномерных массивов 3
Примеры задач. 5
Многомерные массивы 7
Секции массива 8
Размещение массивов в памяти 9
Ввод и вывод массивов 9
Примеры задач. 11
Характеристики массивов 13
Форма массива. Конформные массивы 14
Функции shape и size 14
Выражения с массивами и присваивание массивов 15
Оператор и конструкция where 16
Динамические массивы 17
Lesson 4 Массивы
В одной переменной в каждый конкретный момент может храниться только одно значение. Это бывает не очень удобно, когда в задаче приходится иметь дело с набором однотипных величин. Например, требуется написать программу для обработки данных о возрасте жителей города. Для этого пришлось бы создать в программе несколько десятков, а то и сотен тысяч переменных. В таких случаях необходимо использовать массив.
Массив – это множество однотипныхэлементов, объединенныхобщим именеми адресуемых с помощью одного или несколькихиндексов. Имя массива должно быть уникальным именем Фортрана, составленным по его правилам. Количество элементов называется размером или длиной массива.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя –двумернымии т. д. Одномерный массив нестрого соответствуетвекторув математике, двумерный –матрице. Чаще всего применяются массивы с одним или двумя индексами, реже – с тремя, ещё большее количество индексов встречается крайне редко.
Чтобы продолжить аналогию, будем говорить, что простая переменная соответствует скалярув математике.
Общая форма записи элемента массива:
Name(список индексов)
Здесь Name – имя массива;список индексов– список индексных выражений. Индексное выражение может быть целой константой, целой переменной или целым выражением.
Примерызаписи элементов массивов:
A(3),A(J),A(I+1) – элементы одномерного массиваA.
B(3, 4),B(I,J),B(I+1,I+2) – элементы двумерного массиваB.
Одномерные массивы Описание одномерных массивов
Выделение памяти для хранения одномерных массивов производится с помощью атрибута dimensionв описании массива:
тип массива,dimension(границы массива)::список имен массивов
Здесь тип массива– типвсех элементовмассива, один из типов данных, используемых в Фортране.
Границы массива– константные целые выражения, разделенные двоеточием и задающие диапазон индексов его элементов. Элементы массива располагаются в порядке возрастания индекса, начиная с нижней границы массива.
Если нижняя граница не задана, по умолчанию она равна 1. Допускаются отрицательные значения индексов.
Индексомэлемента массива называется его номер в массиве. Значение индекса не должно выходить за пределы границ массива.
Предупреждение. Выбор элемента неописанного массива компилятор воспринимает как вызов неизвестной функции, причем об этом сообщает не компилятор, а компоновщик приложений.
Примерыописания одномерных массивов.
Описание вещественных массивов А, В, С:
real, dimension(1:20) :: A, B, C то же, что
real, dimension(20) :: A, B, C
Объявлены три вещественных массива из 20 элементов с номерами от 1 до 20.
Описание целочисленного массива Number:
integer, dimension(-3:3) :: Number
Объявлен целочисленный массив из 7 элементов с номерами от –3 до 3.
Описание символьного массива student:
character*20,dimension(1:30)::student
Для массива studentвыделено 30 строк по 20 байт, всего 600 байт.
При объявлении массивы можно инициализировать с помощью конструктора массива, например:
integer, dimension(1:10):: digit=(/0,1,2,3,4,5,6,7,8,9/)
С помощью конструктора массива можно создавать массивы констант, например:
integer, parameter, dimension(1:5):: digit=(/0,1,2,3,4/)
Если задавать границы массива в виде именованных констант, то при необходимости изменить размер массива, вносить изменение можно только в одном месте:
integer, parameter:: L_digit=10
integer:: i
integer, dimension(L_digit: L_digit+10):: digit
do i=L_digit, L_digit+10
digit(i)=i
enddo
В программе объявлен целочисленный массив из 11 элементов с номерами от 10 до 20. Каждому элементу массива присваивается значение, равное его номеру.
Устаревшее допустимое, но не рекомендуемое описание массивов:
integer A(34), B(34), C(7)
Лучше записать так:
integer, dimension(1:34):: A, B
integer, dimension(1:7):: С