Вы находитесь на странице: 1из 306

О.В.

Бартеньев
VISUAL FORTRAN: НОВЫЕ ВОЗМОЖНОСТИ
Пособие содержит обширный материал по специальным, расширяющим
стандарт Фортрана возможностям Digital Visual Fortran, который, как известно,
использует в том числе и все расширения Microsoft Fortran PowerStation 4.0. При
изложении материала предполагалось, что, во-первых, читатель знаком с
техникой программирования на Фортране и, во-вторых, имеет возможность
работать с последними версиями Digital Visual Fortran или Microsoft Fortran
PowerStation 4.0 для Интел-совместимых компьютеров. Использование
рассмотренных в пособии методов и свойств Фортрана позволит читателю
создавать быстро работающие, при необходимости многоязычные, приложения,
имеющие удобный интерфейс и наглядно представляющие результаты
вычислений.
Предназначено для научно-технических работников, преподавателей,
студентов и аспирантов вузов.
Содержание
ПРЕДИСЛОВИЕ 3
1. ИСПОЛЬЗОВАНИЕ ДИАЛОГОВ 5
1.1. ПОСТАНОВКА ЗАДАЧИ 5
1.2. ПОСТРОЕНИЕ ДИАЛОГОВОГО ОКНА 5
1.2.1. Проект для диалога 6
1.2.2. Задание параметров диалога 6
1.2.3. Задание и обработка статического текста 7
1.2.4. Обработка редактируемых полей 9
1.2.5. Кнопки OK и Cancel 10
1.2.6. Меню диалога 11
1.2.7. Доступ к файлам хранения диалога 12
1.2.8. Работа с диалогом в программе 12
1.3. УСОВЕРШЕНСТВОВАНИЕ ПРОГРАММЫ ТАБУЛЯЦИИ ФУНКЦИИ 16
1.3.1. Вывод сообщения 16
1.3.2. Задание числа итераций 17
1.3.2.1. Зачем группировать радиокнопки 17
1.3.2.2. Элементы управления, задающие число итераций 18
1.3.2.3. Устройство элементов управления 19
1.3.2.4. Использование радиокнопок 19
1.3.2.5. Изменения в тексте программы 20
1.4. УПРАВЛЯЮЩИЕ ЭЛЕМЕНТЫ ДИАЛОГА 22
1.5. ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ДИАЛОГОМ 23
1.6. УПРАВЛЯЮЩИЕ ИНДЕКСЫ 24
1.7. ПРИМЕНЕНИЕ СПИСКОВ 28
1.7.1. Открытые списки 28
1.7.2. Списки с редактируемым полем 33
1.7.3. Список без редактируемого поля 36
1.8. ВЫХОД ИЗ ДИАЛОГА 37
1.9. ИЗМЕНЕНИЕ ВОЗВРАЩАЕМОЙ ДИАЛОГОМ ВЕЛИЧИНЫ 37
2. ВЫВОД ГРАФИЧЕСКИХ ДАННЫХ 39
2.1. ГРАФИЧЕСКИЙ ДИСПЛЕЙ 39
2.2. РАСТРОВОЕ ИЗОБРАЖЕНИЕ 40
2.3. ВИДЕОАДАПТЕР 41
2.4. ВИДЕООКНО И ОКНА ВЫВОДА 42
2.5. ЗАДАНИЕ КОНФИГУРАЦИИ ВИДЕООКНА 43
2.6. СИСТЕМЫ ГРАФИЧЕСКИХ КООРДИНАТ. ОКНО ВЫВОДА 46
2.7. ОЧИСТКА И ЗАПОЛНЕНИЕ ЭКРАНА ЦВЕТОМ ФОНА 50
2.8. УПРАВЛЕНИЕ ЦВЕТОМ 51
2.8.1. Система цветов RGB. Цветовая палитра 51
2.8.2. Цветовая палитра VGA 53
2.8.3. Не RGB-функции управления цветом 57
2.8.3.1. Управление цветом фона 58
2.8.3.2. Управление цветом неграфического текста 59
2.8.3.3. Управление цветом графических примитивов 60
2.8.4. RGB-функции управления цветом 60
2.8.4.1. Управление RGB-цветом фона 60
2.8.4.2. Управление RGB-цветом неграфического текст 61
2.8.4.3. Управление RGB-цветом графических примитивов 61
2.9. ТЕКУЩАЯ ПОЗИЦИЯ ГРАФИЧЕСКОГО ВЫВОДА 62
2.10. ГРАФИЧЕСКИЕ ПРИМИТИВЫ 63
2.10.1. Вывод пикселей 64
2.10.2. Вывод отрезка прямой линии 68
2.10.3. Вывод прямоугольника 68
2.10.4. Вывод многоугольника 69
2.10.5. Вывод эллипса и окружности 70
2.10.6. Вывод дуги эллипса и окружности 71
2.10.7. Вывод сектора 72
2.10.8. Координаты конечных точек дуги и сектора 73
2.10.9. Пример вывода графических примитивов 73
2.11. ВЫВОД ТЕКСТА 75
2.11.1. Вывод текста без использования шрифтов 75
2.11.2. Вывод зависимого от шрифта текста 77
2.12. УПРАВЛЕНИЕ ТИПОМ ЛИНИЙ 82
2.13. ЗАПОЛНЕНИЕ ЗАМКНУТЫХ ОБЛАСТЕЙ 84
2.14. ПЕРЕДАЧА ОБРАЗОВ 87
2.14.1. Обмен с оперативной памятью 87
2.14.2. Обмен с внешней памятью 93
2.15. СТАТУС ВЫПОЛНЕНИЯ ГРАФИЧЕСКИХ ПРОЦЕДУР 95
3. ПРИЛОЖЕНИЯ QUICKWIN 97
3.1. ВОЗМОЖНОСТИ QUICKWIN 97
3.2. ОПЕРАЦИИ НАД ОКНАМИ QUICKWIN 98
3.2.1. Виды окон QUICKWIN 98
3.2.2. Создание дочернего окна 98
3.2.3. Активизация дочернего окна 99
3.2.4. Размещение дочернего окна в фокусе 99
3.2.5. Закрытие устройства дочернего окна 100
3.2.6. Изменение свойств дочернего окна 100
3.2.7. Изменение размеров и позиции обрамляющего и дочернего окна 101
3.3. ИЗМЕНЕНИЕ СИСТЕМНОГО МЕНЮ 106
3.4. ИНИЦИАЛИЗАЦИЯ МЕНЮ И ОБРАМЛЯЮЩЕГО ОКНА 108
3.5. СОЗДАНИЕ СПИСКА ИМЕЮЩИХСЯ ДОЧЕРНИХ ОКОН 110
3.6. ИМИТАЦИЯ ВЫБОРА КОМАНД МЕНЮ 111
3.7. ИЗМЕНЕНИЕ СООБЩЕНИЙ QUICKWIN 112
3.8. ВЫВОД СТАНДАРТНОГО ОКНА СООБЩЕНИЙ 112
3.9. ПЕРЕОПРЕДЕЛЕНИЕ СООБЩЕНИЯ О ПРОГРАММЕ 114
3.10. КОПИРОВАНИЕ ТЕКСТА И ГРАФИКИ ОКНА QUICKWIN 114
3.11. ПРИМЕНЕНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ИКОН 115
3.12. ИСПОЛЬЗОВАНИЕ МЫШИ 116
3.12.1. Связанные с мышью события 116
3.12.2. Функции обработки событий 117
3.12.3. Блокирующая функция WAITONMOUSEEVENT 121
3.12.4. Особенности работы с блокирующими процедурами 123
3.12.5. Особенности подпрограмм обработки событий 124
4. МНОГОНИТОЧНОЕ ПРОГРАММИРОВАНИЕ 125
4.1. ПОСТАНОВКА ЗАДАЧИ 125
4.2. НИТИ И ПРОЦЕССЫ 127
4.3. ОРГАНИЗАЦИЯ НИТЕЙ 128
4.3.1. Модули для многониточного программирования 128
4.3.2. Построение проекта с несколькими нитями 128
4.3.3. Создание нити 129
4.3.4. Реализующая нить процедура 130
4.3.5. Пример создания нити 130
4.3.6. Использование значения параметра argument 131
4.3.7. Обеспечение независимости переменных процедуры нити 132
4.3.8. Способы синхронизации нитей при доступе к ресурсам 132
4.4. ПРОГРАММИРОВАНИЕ ОБЪЕКТОВ СИНХРОНИЗАЦИИ НИТЕЙ 133
4.4.1. Критические секции 133
4.4.2. Текст программы вывода бегущих полос с использованием 135
критической секции
4.4.3. Устранение недостатка в работе программы BARS2 136
4.4.4. Исключения 138
4.4.5. Применение исключений в рассматриваемой задаче 139
4.4.6. Семафоры 140
4.4.7. Применение семафоров в рассматриваемой задаче 142
4.5. ОРГАНИЗАЦИЯ НИТЕЙ ПРИ МНОГООКОННОМ ВЫВОДЕ 142
4.6. ПЕРЕЧЕНЬ МНОГОНИТОЧНЫХ ПРОЦЕДУР 147
5. КОМПИЛЯЦИЯ И ПОСТРОЕНИЕ ПРОГРАММ 151
5.1. НАЗНАЧЕНИЕ КОМАНДЫ DF 151
5.2. ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ 151
5.3. ФОРМАТ КОМАНДЫ DF 153
5.4. ПРАВИЛА ЗАДАНИЯ ОПЦИЙ 154
5.5. ВХОДНЫЕ И ВЫХОДНЫЕ ФАЙЛЫ 154
5.6. ФОРМИРОВАНИЕ ИМЕН ВЫХОДНЫХ ФАЙЛОВ 155
5.7. ВРЕМЕННЫЕ ФАЙЛЫ 155
5.8. УПРАВЛЕНИЕ БИБЛИОТЕКОЙ ОБЪЕКТНЫХ ФАЙЛОВ 156
5.9. ВАРИАНТЫ ИСПОЛЬЗОВАНИЯ КОМАНДЫ DF 157
5.9.1. Компиляция и построение с одним исходным файлом 157
5.9.2. Применение переменной окружения DF 158
5.9.3. Компиляция и построение с несколькими исходными файлами 158
5.9.4. Использование последовательности команд 159
5.9.5. Подключение библиотек объектных файлов 160
5.9.6. Использование динамических библиотек 160
5.9.7. Компиляция и построение приложений с текстами программ на 161
Фортране и СИ
5.9.8. Оптимизация при компиляции и построении 164
5.9.9. Команда DF, параметры которой хранятся в текстовом файле 165
5.9.10. Примеры ошибочного использования команды DF 165
5.10. ОГРАНИЧЕНИЯ КОМПИЛЯТОРА И ПОСТРОИТЕЛЯ 166
5.11. ПЕРЕЧЕНЬ ОПЦИЙ КОМПИЛЯТОРА И ПОСТРОИТЕЛЯ 167
5.12. РАСПРЕДЕЛЕНИЕ ОПЦИЙ ПОСТРОИТЕЛЯ ПО КАТЕГОРИЯМ VS 175
5.13. ИСПОЛЬЗОВАНИЕ ОПЦИЙ FPS В КОМАНДЕ DF 177
6. ПОВЫШЕНИЕ БЫСТРОДЕЙСТВИЯ ПРОГРАММ 182
6.1. ВВЕДЕНИЕ 182
6.2. ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ 182
6.3. ВЫРАВНИВАНИЕ ДАННЫХ 184
6.3.1. Размещение данных в памяти 184
6.3.2. Невыравненные данные 184
6.3.3. Сообщения о невыравненных данных 186
6.3.4. Как выравнивать данные 186
6.3.5. Опции компилятора, управляющие выравниванием 187
6.4. ОПТИМИЗАЦИЯ ИСХОДНОГО КОДА 187
6.4.1. Эффективное использование массивов 187
6.4.2. Организация быстрого ввода/вывода 190
6.4.3. Дополнительные приемы оптимизации кода 192
6.5. ВЛИЯНИЕ ОПЦИЙ КОМАНДЫ DF НА ПРОИЗВОДИТЕЛЬНОСТЬ 193
6.6. ОБОБЩЕНИЯ 198
7. ПРОГРАММИРОВАНИЕ НА НЕСКОЛЬКИХ ЯЗЫКАХ 199
7.1. ВВЕДЕНИЕ 199
7.2. АТРИБУТЫ DEC 201
7.2.1. Атрибут ALIAS 202
7.2.2. Атрибуты С и STDCALL 203
7.2.3. Атрибут EXTERN 206
7.2.4. Атрибут REFERENCE 208
7.2.5. Атрибут VALUE 208
7.2.6. Атрибут VARYING 209
7.2.7. Атрибуты DLLEXPORT и DLLIMPORT 211
7.3. СОГЛАШЕНИЯ ОБ ИМЕНАХ 212
7.4. ПРОПИСНЫЕ И СТРОЧНЫЕ БУКВЫ В ИМЕНАХ 214
7.4.1. Имена из прописных букв 214
7.4.2. Имена из строчных букв 215
7.4.3. Имена из смеси прописных и строчных букв 215
7.4.4. Имена VISUAL C++ 216
7.5. ИНТЕРФЕЙС ВНЕШНЕЙ ПРОЦЕДУРЫ 217
7.6. СОГЛАСОВАНИЕ ТИПОВ ДАННЫХ 218
7.7. ПЕРЕДАЧА ДАННЫХ В ПРОГРАММАХ С РАЗНОЯЗЫЧНЫМИ 219
ПРОЦЕДУРАМИ
7.7.1. Обмен данных через параметры процедур 219
7.7.1.1. Передача символьных данных 221
7.7.1.2. Передача массивов 224
7.7.1.3. Передача ссылок и размещаемых массивов Фортрана 227
7.7.1.4. Передача целочисленных указателей 228
7.7.1.5. Имена модулей 229
7.7.1.6. Доступ к объектам модулей Фортрана в функциях СИ 230
7.7.1.7. Определение модульной процедуры в СИ 231
7.7.2. Использование common-блоков Фортрана и структур СИ 232
7.7.2.1. Прямой доступ к common-блокам Фортрана и структурам СИ 232
7.7.2.2. Передача адреса common-блока 233
7.7.3. Передача производных типов данных 234
7.8. ОСОБЕННОСТИ ОДНОВРЕМЕННОГО ИСПОЛЬЗОВАНИЯ 235
ФОРТРАНА И СИ
7.9. ВКЛЮЧЕНИЕ ФОРТРАН-ПРОЦЕДУР В ПРИЛОЖЕНИЯ НА 236
БЕЙСИКЕ
7.10. СОЗДАНИЕ ПРИЛОЖЕНИЙ НА ФОРТРАНЕ И АССЕМБЛЕРЕ 237
7.10.1. Формирование результата функцией Ассемблера 237
7.10.2. Примеры программ на Фортране и Ассемблере 238
ПРИЛОЖЕНИЕ 1. ДИРЕКТИВЫ DVF 244
П. 1.1. ОБЗОР ДИРЕКТИВ 244
П. 1.2. ИСПОЛЬЗОВАНИЕ ДИРЕКТИВ 245
П. 1.3. ДИРЕКТИВЫ, КОНТРОЛИРУЮЩИЕ ПРАВИЛА НАПИСАНИЯ 247
ИСХОДНОГО КОДА
П. 1.3.1. Директивы $STRICT и $NOSTRICT 247
П. 1.3.2. Директивы $FREEFORM и $NOFREEFORM 248
П. 1.3.3. Директива $FIXEDFORMLINESIZE 249
П. 1.4. УСЛОВНАЯ КОМПИЛЯЦИЯ ПРОГРАММЫ 249
П. 1.4.1. Директивы $DEFINE и $UNDEFINE 249
П. 1.4.2. Конструкции директив $IF u $IF DEFINED 251
П. 1.5. УПРАВЛЕНИЕ ОТЛАДКОЙ ПРОГРАММЫ 253
П. 1.5.1. Директивы $DECLARE и $NODECLARE 253
П. 1.5.2. Директива $MESSAGE 253
П. 1.6. ВЫБОР ЗАДАВАЕМОЙ ПО УМОЛЧАНИЮ РАЗНОВИДНОСТИ 253
ТИПА
П. 1.6.1. Директива $INTEGER 253
П. 1.6.2. Директива $REAL 254
П. 1.7. УПРАВЛЕНИЕ ПЕЧАТЬЮ ЛИСТИНГА ИСХОДНОГО КОДА 255
П. 1.7.1. Директива $TITLE 255
П. 1.7.2. Директива $SUBTITLE 256
П. 1.8. ДИРЕКТИВА $OBJCOMMENT 256
П. 1.9. ДИРЕКТИВА $OPTIONS 257
П. 1.10. ДИРЕКТИВА $PACK 259
П. 1.11. ДИРЕКТИВА $PSECT 260
П. 1.12. ДИРЕКТИВА $ATTRIBUTES 261
П. 1.13. ДИРЕКТИВА $ALIAS 262
П.1.14. ДИРЕКТИВА IDENT 262
П. 1.15. ДИРЕКТИВЫ И ОПЦИИ КОМПИЛЯТОРА 262
ПРИЛОЖЕНИЕ 2. ОПИСАТЕЛИ ССЫЛОК И РАЗМЕЩАЕМЫХ 264
МАССИВОВ ФОРТРАНА
П. 2.1. КОД НА ФОРТРАНЕ 264
П. 2.2. КОД НА СИ 269
ПРИЛОЖЕНИЕ 3. ВЫВОД РУССКИХ СООБЩЕНИЙ В DOS-ОКНО 272
П. 3.1. ПРЕОБРАЗОВАНИЯ "СИМВОЛ - КОД СИМВОЛА" И "КОД 272
СИМВОЛА-КОД"
П. 3.2. ПРЕОБРАЗОВАНИЕ DOS-БУКВ РУССКОГО АЛФАВИТА В 273
WINDOWS-БУКВЫ РУССКОГО АЛФАВИТА И ОБРАТНО
ПРИЛОЖЕНИЕ 4. НОВОВВЕДЕНИЯ СТАНДАРТА ФОРТРАН 95 277
П. 4.1. ОПЕРАТОР И КОНСТРУКЦИЯ FORALL 277
П. 4.2. ОПЕРАТОР ELSEWHERE 283
П. 4.3. ЧИСТЫЕ ПРОЦЕДУРЫ 283
П.4.4. ЭЛЕМЕНТНЫЕ ПРОЦЕДУРЫ 286
П. 4.5. ВСТРОЕННЫЕ ФУНКЦИИ MINLOC И MAXLOC 288
П. 4.6. РАСШИРЕНИЕ ФУНКЦИЙ CEILING И FLOOR 289
П. 4.7. ИНИЦИАЛИЗАЦИЯ ССЫЛКИ И ФУНКЦИЯ NULL 289
П. 4.8. ИНИЦИАЛИЗАЦИЯ КОМПОНЕНТОВ ПРОИЗВОДНОГО ТИПА 290
П. 4.9. ВСТРОЕННАЯ ПОДПРОГРАММА CPU TIME 290
П. 4.10. АВТОМАТИЧЕСКОЕ ОСВОБОЖДЕНИЕ РАЗМЕЩАЕМЫХ 291
МАССИВОВ
П. 4.11. КОММЕНТАРИИ В NAMELIST-СПИСКЕ 291
П.4.12. ВЫЧИСЛЯЕМАЯ ДЛИНА ПОЛЯ ПРИ ФОРМАТНОМ ВЫВОДЕ 291
П. 4.13. ПОЛНАЯ ВЕРСИЯ ОПЕРАТОРА END INTERFACE 292
П. 4.14. ИСКЛЮЧЕННЫЕ ИЗ ФОРТРАНА СВОЙСТВА 292
П. 4.15. УСТАРЕВШИЕ СВОЙСТВА ФОРТРАНА 292
ЛИТЕРАТУРА 294