Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Литература / Фортран / Бартенев - Visual Fortran - новые возможности

.pdf
Скачиваний:
196
Добавлен:
17.04.2013
Размер:
21.23 Mб
Скачать

О.В.Бартеньев

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