
- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Спецификация массивов
Подобно переменным массивы специфицируются типом данных (INTEGER, REAL, derived type, и т.д.). Для статических массивов ранг (не более 7) и границы (верхняя и нижняя) задаются по каждому измерению. Объявление нижней границы не обязательно. Если нижняя граница не задана, то Fortran 90 полагает, что нижнее значение индекса равно 1.
Альтернативными и эквивалентными формами можно объявлять массив следующим образом
тип, DIMENSION(граница) [, атрибут] :: имя
тип [,атрибут ] :: имя (граница)
где атрибут учитывается декларациями других атрибутов, если требуется.
Следующие декларации эквивалентны. Обе объявляют целый массив а с шестью элементами, вещественный массив b с десятью элементами и двумерный логический массив yes_no.
Первое объявление:
INTEGER, DIMENSION(6) :: a
REAL, DIMENSION(0:9) :: b
LOGICAL, DIMENSION(2,2) :: yes_no
Второе объявление:
INTEGER :: a(6)
REAL :: b(0:9)
LOGICAL :: yes_no(2,2)
Используется форма атрибута DIMENSION, когда одни и те же границы типы несколько массивов необходимо объявить. Используется вторая форма , когда несколько массивов разных типов и/или границ необходимо объявить. Третья форма смешивается из двух предыдущих:
тип, DIMENSION(граница1) [, атрибут] :: a, b(граница2)
где для а берется по умолчанию граница как граница1, но для b берется с другим явно определенным значением граница2.
Смесь трех форм дана в следующей программе :
INTEGER, DIMENSION(8) :: x, y, z(16)
REAL :: alpha(1:3), beta(4:9)
REAL, DIMENSION(0:5,12:45, 6) :: data
CHARACTER(len=10) :: names(25)
Первый оператор объявляет x и y из 8 элементов каждый и z из 16 элементов. Второй оператор объявляет два массива одинакового типа, но с различными границами. Третий оператор объявляет массив ранга 3. Последний оператор объявляет массив из 25 элементов, каждый элемент - это символьная строка длины 10.
Можно включать массивы в качестве компонент производных типов данных и объявлять массивы производных типов данных:
TYPE point
REAL :: position(3)
END TYPE point
TYPE(point) :: object(10)
Тип point содержит 3 числа типа real, тогда массив object содержит 10 точек (элементов типа point), каждый из которых содержит 3 числа типа real.
Сечения массива Индивидуальные элементы
Индивидуальные элементы и сечения массива дают уникальный идентификатор с помощью одного в ранге, отделенного запятыми. Каждый указатель может быть целым значением или выражением, дающим целое значение.
REAL, DIMENSION(8) :: a
INTEGER, DIMENSION(5,4) :: b
...
a(5) ! пятый элемент
b(4,2) ! элемент на пересечении 4-й строки и 5-й колонки
Указатели (такие как (i,j) ) отсылают к элементу на пересечении ряда i и колонки j, где i и j имеют целые значения в диапазоне между нижним и верхней границами в их измерениях.
Используя выражение (например (2*k) ) обращаются к элементу, указвние которого дает результат оценки выражения. Результат выражения должен быть целым внутриобъявленных границ. Ошибкой будет ссылка вне диапазона границ массива (выше или ниже).