Table Of ContentФОРТРАН 90. МЕЖДУНАРОДНЫЙ СТАНДАРТ
Книга содержит перевод на русский язык официального описания
международного стандарта языка Фортран 90, который значительно расширяет
возможности своих предшественников, сохранив при этом полную с ними
преемственность. Наиболее важные его новые возможности: структурные типы
данных; операции над массивами и секциями массивов; средства задания
точности вычислений; указатели; механизмы динамического размещения
объектов в памяти; новые средства для описания и использования глобальных
объектов; гибкие управляющие конструкции; определяемые пользователем
операции; элементы объектно-ориентированного программирования и др.
Для прикладных и системных программистов, работающих с современным
Фортраном.
Содержание
Предисловие редактора перевода XXIII
Предисловие к русскому переводу XXVII
Предисловие XXVIII
ВВЕДЕНИЕ XXIX
Стандартный язык программирования Фортран XXIX
ОБЩИЕ СВЕДЕНИЯ XXIX
Операции над массивами XXIX
Числовые вычисления XXX
Параметризованный символьный тип данных XXX
Производные типы XXX
Модульные определения XXX
Указатели XXX
Эволюция языка XXXI
ОРГАНИЗАЦИЯ ДАННОГО МЕЖДУНАРОДНОГО СТАНДАРТА XXXI
Понятия верхнего/нижнего уровней XXXI
Концепция данных XXXI
Вычисления XXXII
Управление исполнением XXXII
Ввод/вывод XXXII
Программные единицы XXXIII
Область действия и правила связывания XXXIII
Глава 1 ОБЩИЕ СВЕДЕНИЯ 1
1.1. Цель. 1
1.2. Процессор 1
1.3. Что включено в стандарт и что не включено 1
1.3.1. Что включено 1
1.3.2. Что не включено 1
1.4. Соответствие стандарту 2
1.4.1. Совместимость с ФОРТРАНОМ 77 3
1.5. Условные обозначения 3
1.5.1. Синтаксические правила 4
1.5.2. Подразумеваемые синтаксические правила 5
1.5.3. Синтаксические соглашения и характеристики 5
1.5.4. Текстовые обозначения 5
1.6. Исключенные и устаревшие средства 5
1.6.1. Природа исключенных средств 5
1.6.2. Природа устаревших средств 6
1.7. Модули 6
1.8. Нормативные ссылки 6
Глава 2 ТЕРМИНЫ И ПОНЯТИЯ ФОРТРАНА 7
2.1. Синтаксис верхнего уровня 7
2.2. Понятия программной единицы 9
2.2.1. Выполняемая программа 9
2.2.2. Главная программная единица 9
2.2.3. Процедура 10
2.2.3.1. Внешняя процедура 10
2.2.3.2. Модульная процедура 10
2.2.3.3. Внутренняя процедура 10
2.2.3.4. Блок интерфейса процедуры 10
2.2.4. Модуль 10
2.3. Концепции выполнения 11
2.3.1. Выполняемые/невыполняемые операторы 11
2.3.2. Порядок операторов 11
2.3.3. Оператор END 12
2.3.4 Последовательность выполнения 12
2.4. Концепции данных: 13
2.4.1. Тип данных 13
2.4.1.1. Встроенный тип 13
2.4.1.2. Производный тип 13
2.4.2. Значения данных 14
2.4.3. Данное. 14
2.4.3.1. Объект данных 14
2.4.3.2. Выражение 15
2.4.3.3. Ссылка на функцию 15
2.4.4. Скаляр 15
2.4.5. Массив 15
2.4.6. Указатель 16
2.4.7. Память. 16
2.5. Основные термины 16
2.5.1. Имя и обозначение 16
2.5.2. Ключевое слово 16
2.5.3 Объявление 16
2.5.4. Определение и описание 17
2.5.5. Ссылка 17
2.5.6. Связь. 17
2.5.7. Встроенный 17
2.5.8. Знак операции 17
2.5.9 Последовательность 18
Глава 3 СИМВОЛЫ, ЛЕКСИЧЕСКИЕ ЭЛЕМЕНТЫ И ФОРМА 19
ИСХОДНОГО ТЕКСТА
3.1. Набор символов процессора 19
3.1.1. Буквы 19
3.1.2. Цифры 19
3.1.3. Символ подчеркивания 19
3.1.4 Специальные символы 20
3.1.5. Другие символы 20
3.2 Синтаксис нижнего уровня 20
3.2.1. Ключевые слова 20
3.2.2. Имена 21
3.2 3 Константы 21
3.2.4. Знаки операций 21
3.2.5 Метки операторов 22
3.2.6. Ограничители 22
3.3. Форма исходного текста 22
3.3.1. Свободная форма 23
3.3.1.1. Комментарий в свободной форме 23
3.3.1.2. Разделение операторов в свободной форме 24
3.3.1.3. Продолжение оператора в свободной форме 24
3.3.1.4. Операторы в свободной форме 24
3.3.2. Фиксированная форма 24
3.3.2.1. Комментарии в фиксированной форме 25
3.3.2.2. Разделение операторов в фиксированной форме 25
3.3.2.3. Продолжение оператора в фиксированной форме 25
3.3.2.4. Операторы в фиксированной форме 25
3.4. Включение исходного текста 25
Глава 4 ВСТРОЕННЫЕ И ПРОИЗВОДНЫЕ ТИПЫ ДАННЫХ 27
4.1. Концепция типа данных 27
4.1.1. Множество значений 27
4.1.2. Константы 28
4.1.3. Операции 28
4.2. Взаимосвязь типов и значений объектов 28
4.3. Встроенные типы данных 29
4.3.1. Числовые типы 29
4.3.1.1. Тип целый 29
4.3.1.2. Вещественный тип 30
4.3.1.3. Комплексный тип 31
4.3.2 Нечисловые типы 32
4.3.2.1. Символьный тип 32
4.3.2.2. Логический тип 34
4.4. Производные типы 35
4.4.1. Описание производного типа 35
4.4.2. Определение производных типов 38
4.4.3. Значения производного типа 40
4.4.4. Конструирование значений производного типа 40
4.4.5. Операции и присваивание для производного типа 41
4.5. Конструирование значений массива 41
Глава 5 ОБЪЯВЛЕНИЯ И СПЕЦИФИКАЦИИ ОБЪЕКТОВ 43
ДАННЫХ
5.1. Операторы объявления типа 43
5.1.1. Спецификаторы типа 45
5.1.1.1. INTEGER 45
5.1.1.2. REAL 45
5.1.1.3 DOUBLE PRECISION 45
5.1.1.4. COMPLEX 46
5.1.1.5. CHARACTER 46
5.1.1.6. LOGICAL 47
5.1.1.7. Производный тип 47
5.1.2. Атрибуты 48
5.1.2.1. Атрибут PARAMETER 48
5.1.2.2. Атрибут доступности 48
5.1.2.3. Атрибут INTENT 48
5.1.2.4. Атрибут DIMENSION 49
5.1.2.5. Атрибут SAVE 52
5.1.2.6. Атрибут OPTIONAL 52
5.1.2.7. Атрибут POINTER 52
5.1.2.8. Атрибут TARGET 53
5.1.2.9. Атрибут ALLOCATABLE 53
5.1.2.10. Атрибут EXTERNAL 53
5.1.2.11. Атрибут INTRINSIC 53
5.2. Операторы спецификации атрибутов 53
5.2.1. Оператор INTENT 53
5.2.2. Оператор OPTIONAL 54
5.2.3. Операторы PRIVATE и PUBLIC 54
5.2.4. Оператор SAVE 55
5.2.5 Оператор DIMENSION 55
5.2.6. Оператор ALLOCATABLE 55
5.2.7. Оператор POINTER 56
5.2.8. Оператор TARGET 56
5.2.9. Оператор DATA 56
5.2.10. Оператор PARAMETER 58
5.3. Оператор IMPLICIT 59
5.4. Оператор NAMELIST 61
5.5. Связь объектов данных по памяти 61
5.5.1. Оператор EQUIVALENCE 61
5.5.1.1. Связь по эквивалентности 62
5.5.1.2. Эквивалентность объектов стандартного символьного 62
типа
5.5.1.3. Имена массивов и обозначение элементов массива 63
5.5.1.4. Ограничения на оператор EQUIVALENCE 63
5.5.2. Оператор COMMON 63
5.5.2.1. Последовательность памяти общего блока 64
5.5.2.2. Размер общего блока 65
5.5.2.3. Связь по общему блоку 65
5.5.2.4. Разница между именованным и неименованным общими 65
блоками
5.5.2.5. Ограничения на COMMON и EQUIVALENCE 66
Глава 6 ИСПОЛЬЗОВАНИЕ ОБЪЕКТОВ ДАННЫХ 67
6.1. Скаляры 68
6.1.1. Подстроки 68
6.1.2. Компоненты структур 68
6.2. Массивы 69
6.2.1. Полный массив 69
6.2.2. Элементы и секции массива 70
6.2.2.1. Элементы массива 70
6.2.2.2. Последовательность элементов массива 70
6.2.2.3. Секции массива 71
6.3. Динамическая связь 73
6.3.1. Оператор ALLOCATE 73
6.3.1.1. Размещение динамически размещаемых массивов 74
6.3.1.2. Размещение адресатов указателей 74
6.3.2. Оператор NULLIFY 74
6.3.3. Оператор DEALLOCATE 74
6.3.3.1. Удаление из памяти динамически размещаемых 75
массивов
6.3.3.2. Удаление из памяти адресатов указателей 75
Глава 7 ВЫРАЖЕНИЯ И ПРИСВАИВАНИЕ 77
7.1. Выражения 77
7.1.1. Форма выражения 77
7.1.1.1. Первичное 77
7.1.1.2. Выражения уровня-1 78
7.1.1.3. Выражения уровня-2 78
7.1.1.4. Выражения уровня-3 79
7.1.1.5. Выражения уровня-4 79
7.1.1.6. Выражения уровня-5 79
7.1.1.7. Общая форма выражения 80
7.1.2. Встроенные операции 80
7.1.3. Определяемые операции 81
7.1.4. Тип, параметры типа и конфигурация выражения 82
7.1.4.1. Тип, параметры типа и конфигурация первичного 82
7.1.4.2. Тип, параметры типа и конфигурация результата 83
операции
7.1.5. Правила согласования для встроенных операций 83
7.1.6. Выражения-скаляры и выражения-массивы 84
7.1.6.1. Константное выражение 84
7.1.6.2. Выражение спецификации 85
7.1.7. Выполнение операций 87
7.1.7.1. Вычисление операндов 88
7.1.7.2. Целостность скобок 88
7.1.7.3. Выполнение числовых встроенных операций 88
7.1.7.4. Выполнение встроенной символьной операции 89
7.1.7.5. Выполнение встроенных операций отношения 90
7.1.7.6. Выполнение логических встроенных операций 90
7.1.7.7. Выполнение определяемых операций 90
7.2. Интерпретация встроенных операций 90
7.2.1. Числовые встроенные операции 90
7.2.1.1. Целочисленное деление 91
7.2.1.2. Комплексное возведение в степень 91
7.2.2 Символьная встроенная операция 91
7.2.3. Встроенные операции отношения 92
7.2.4. Логические встроенные операции 94
7.3. Интерпретация определяемых операций 94
7.3.1. Унарная определяемая операция 94
7.3.2. Бинарная определяемая операция 95
7.4. Старшинство операций 95
7.5. Присваивание. 97
7.5.1. Оператор присваивания 97
7.5.1.1. Общая форма 97
7.5.1.2. Встроенный оператор присваивания 97
7.5.1.3. Определяемый оператор присваивания 98
7.5.1.4. Правила согласования для встроенного присваивания 98
7.5.1.5. Интерпретация встроенного присваивания 99
7.5.1.6. Интерпретация определяемых операторов присваивания 100
7.5.2. Оператор присваивания указателю 100
7.5.3. Присваивание массивам по маске - WHERE 101
7.5.3.1. Общая форма присваивания массивам по маске 101
7.5.3.2. Интерпретация присваивания массиву по маске 102
Глава 8 УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ 103
8.1. Выполняемые конструкции 103
8.1.1. Правила управления блоками 103
8.1.1.1. Выполняемые конструкции в блоках 103
8.1.1.2. Передача управления в блоках 103
8.1.1.3. Выполнение блока 104
8.1.2. Конструкция IF 104
8.1.2.1. Форма конструкции IF 104
8.1.2.2. Выполнение конструкции IF 104
8.1.2.3. Примеры конструкции IF 105
8.1.2.4. Оператор IF 105
8.1.3. Конструкция CASE 105
8.1.3.1. Форма конструкции CASE 105
8.1.3.2. Выполнение конструкции CASE 106
8.1.3.3. Примеры конструкции CASE 107
8.1.4 Конструкция DO 108
8.1.4.1. Формы конструкции DO 108
8.1.4.2. Область конструкции DO 110
8.1.4.3. Активные и неактивные конструкции DO 110
8.1.4.4. Выполнение конструкции DO 110
8.1.4.5. Примеры конструкции DO 112
8.2. Операторы перехода (операторы ветвления) 115
8.2.1. Метки операторов 115
8.2.2. Оператор GO TO 115
8.2.3. Вычисляемый оператор GO TO 115
8.2.4. Оператор ASSIGN и оператор GO TO по предписанию 115
8.2.5. Арифметический оператор IF 116
8.3. Оператор CONTINUE 116
8.4 Оператор STOP 116
8.5. Оператор PAUSE 116
Глава 9 ОПЕРАТОРЫ ВВОДА/ВЫВОДА 117
9.1. Записи 117
9.1.1. Форматная запись 117
9.1.2. Неформатная запись 117
9.1.3. Запись "конец файла" 117
9.2. Файлы 118
9.2 1. Внешние файлы 118
9.2.1.1. Существование файла 118
9.2.1.2. Доступ к файлу 118
9.2.1.3. Позиция файла 119
9.2.2. Внутренние файлы 121
9.2.2.1. Свойства внутренних файлов 121
9.2.2.2. Ограничения на внутренние файлы 121
9.3. Подсоединение файла 121
9.3.1. Существование устройства 122
9.3.2 Подсоединение файла к устройству 122
9.3.4. Предварительное подсоединение 123
9.3.4. Оператор OPEN 123
9.3.4.1. Спецификатор FILE= в операторе OPEN 124
9.3.4.2. Спецификатор STATUS= в операторе OPEN 124
9.3.4.3. Спецификатор ACCESS= в операторе OPEN 125
9.3.4.4. Спецификатор FORM= в операторе OPEN 125
9.3.4.5. Спецификатор RECL= в операторе OPEN 125
9.3.4.6. Спецификатор BLANK= в операторе OPEN 125
9.3.4.7. Спецификатор POSITION= в операторе OPEN 125
9.3.4.8 Спецификатор ACTION= в операторе OPEN 126
9.3.4.9. Спецификатор DELIM= в операторе OPEN 126
9.3.4.10. Спецификатор PAD= в операторе OPEN 126
9.3.5. Оператор CLOSE 126
9.3.5.1. Спецификатор STATUS= в операторе CLOSE 127
9.4. Операторы передачи данных 127
9.4.1. Список управляющей информации 128
9.4.1.1. Спецификатор формата 129
9.4.1.2. Спецификатор NAMELIST 130
9.4.1.3. Номер записи 130
9.4.1.4. Статус ввода/вывода 130
9.4.1.5. Ветвь ошибки 131
9.4.1.6. Ветвь "конец файла" 131
9.4.1.7. Ветвь "конец записи" 131
9.4.1.8. Спецификатор продвижения 132
9.4.1.9. Число символов 132
9.4.2 Список ввода/вывода для передачи данных 132
9.4.3. Ситуации ошибки, "конец записи" и "конец файла" 133
9.4.4 Выполнение операторов ввода/вывода для передачи данных 134
9.4.4.1. Направление передачи данных 134
9.4.4.2. Идентификация устройства 134
9.4.4.3 Установление формата 135
9.4.4.4. Передача данных 135
9.4.4.5. Форматирование, управляемое списком 137
9.4.4.6. Форматирование по NAMELIST 137
9.4.5 Печать форматных записей 137
9.4.6. Завершение операторов передачи данных 137
9.5. Операторы установки позиции файла 138
9.5.1. Оператор BACKSPACE 138
9.5.2. Оператор ENDFILE 138
9.5.3 Оператор REWIND 139
9.6. Запрос о файле 139
9.6.1. Спецификаторы запроса 139
9.6.1.1 Спецификатор FILE= в операторе INQUIRE 140
9.6.1.2. Спецификатор EXIST= в операторе INQUIRE 140
9.6.1.3. Спецификатор OPENED= в операторе INQUIRE 140
9.6.1.4. Спецификатор NUMBER= в операторе INQUIRE 141
9.6.1.5. Спецификатор NAMED= в операторе INQUIRE 141
9.6.1.6. Спецификатор NAME= в операторе INQUIRE 141
9.6.1.7. Спецификатор ACCESS= в операторе INQUIRE 141
9.6.1.8. Спецификатор SEQUENTIAL= в операторе INQUIRE 141
9.6.1.9. Спецификатор DIRECT= в операторе INQUIRE 141
9.6.1.10. Спецификатор FORM= в операторе INQUIRE 141
9.6.1.11. Спецификатор FORMATTED= в операторе INQUIRE 141
9.6.1.12. Спецификатор UNFORMATTED= в операторе 142
INQUIRE
9.6.1.13. Спецификатор RECL= в операторе INQUIRE 142
9.6.1.14. Спецификатор NEXTREC= в операторе INQUIRE 142
9.6.1.15. Спецификатор BLANK= в операторе INQUIRE 142
9.6.1.16. Спецификатор POSITION в операторе INQUIRE 142
9.6.1.17. Спецификатор ACTION= в операторе INQUIRE 142
9.6.1.18. Спецификатор READ= в операторе INQUIRE 143
9.6.1.19. Спецификатор WRITE= в операторе INQUIRE 143
9.6.1.20. Спецификатор READWRITE= в операторе INQUIRE 143
9.6.1.21. Спецификатор DELIM= в операторе INQUIRE 143
9.6.1.22. Спецификатор PAD= в операторе INQUIRE 143
9.6.2. Ограничения на спецификаторы запроса 143
9.6.3. Запрос о списке вывода 143
9.7. Ограничения для ссылок на функции и для элементов списка 144
9.8. Ограничения на операторы ввода/вывода 144
Глава 10 РЕДАКТИРОВАНИЕ ВВОДА/ВЫВОДА 145
10.1. Методы явной спецификации формата 145
10.1.1. Оператор FORMAT 145
10.1.2. Символьная спецификация формата 145
10.2. Форма списка элементов формата 146
10.2.1. Описатели редактирования 146
10.2.2. Поля 147
10.3. Взаимодействие между списком ввода/вывода и форматом 147
10.4. Установка позиции файла при управлении форматом 148
10.5 Описатели редактирования данных 149
10.5.1. Описатели редактирования чисел 149
10.5.1.1. Редактирование целых данных 149
10.5.1.2. Описатели редактирования вещественных и 150
комплексных данных
10.5.2. Редактирование логических данных 153
10.5.3. Редактирование символьных данных 153
10.5.4. Обобщенные описатели редактирования 154
10.5.4.1. Обобщенные описатели редактирования чисел 154
10.5.4.2. Обобщенные описатели редактирования данных 155
логического типа
10.5.4.3. Обобщенные описатели редактирования данных 155
символьного типа
10.6. Управляющие описатели редактирования 155
10.6.1. Описатели редактирования позиции 155
10.6.1.1. Описатели редактирования Т, TL и TR 156
10.6.1.2. Описатель редактирования X 156
10.6.2. Описатель редактирования "дробная черта" 156
10.6.3 Описатель редактирования "двоеточие" 157
10.6.4. Описатели редактирования S, SP и SS 157
10.6.5. Описатель редактирования Р 157
10.6.5.1. Масштабный множитель 157
10.6.6. Описатели редактирования BN и BZ 158
10.7. Описатели редактирования "символьная строка" 158
10.7.1. Описатель редактирования "символьная константа" 158
10.7.2. Описатель редактирования Н 158
10.8. Форматирование, управляемое списком 158
10.8.1. Ввод, управляемый списком 159
10.8.1.1. Пустые значения 160
10.8.1.2. Пример ввода, управляемого списком 160
10.8.2. Вывод, управляемый списком 161
10.9. Форматирование по NAMELIST 162
10.9.1. Ввод по NAMELIST 162
10.9.1.1. Имена объектов группы NAMELIST 162
10.9.1.2. Значения данных, вводимых по NAMELIST 163
10.9.1.3. Элементы списка объектов группы NAMELIST 163
10.9.1.4. Пустые значения 164
10.9.1.5. Пробелы 164
10.9.1.6. Пример ввода по NAMELIST 165
10.9.2 Вывод по NAMELIST 165
10.9.2.1. Редактирование вывода по NAMELIST 165
10.9.2.2. Записи вывода по NAMELIST 166
Глава 11 ПРОГРАММНЫЕ ЕДИНИЦЫ 167
11.1. Главная программная единица 167
11.1.1. Спецификации главной программной единицы 167
11.1.2 Раздел выполняемых конструкций главной программной 167
единицы
11.1.3. Внутренние процедуры главной программной единицы 168
11.2. Внешние процедуры 168
11.3. Модули 168
11.3.1. Ссылка на модуль 168
11.3.2. Оператор USE и связь по использованию 169
11.3.3. Примеры использования модулей 170
11.3.3.1. Идентичные общие блоки 170
11.3.3.2. Глобальные данные 170
11.3.3.3. Производные типы 171
11.3.3.4. Глобальные динамически размещаемые массивы 171