
Visual Fortran
.pdfО.В.Бартеньев
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 |


