Современный Fortran на практике
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Маркус Арьен
Перевод:
Снастин А. В.
Год издания: 2023
Кол-во страниц: 319
Дополнительно
Вид издания:
Учебно-методическая литература
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-602-9
Артикул: 644417.03.99
Язык программирования Fortran изначально был предназначен для математических вычислений с максимальной производительностью. В последний стандарт Fortran 2008 включено множество современных функциональных возможностей: средства объектно-ориентированного программирования, специализированные операции с массивами, типы, определяемые пользователем и поддержка параллельных вычислений.
Данное учебное руководство поможет программистам на языке Fortran научиться применять все вышеперечисленные функциональные возможности в соответствии с современными требованиями: модульность, лаконичность, объектно-ориентированный подход и рациональное использование ресурсов, а также организация работы с учётом наличия нескольких процессоров. В книге рассматриваются практические примеры взаимодействия с программами, написанными на языке C, управления памятью, применения графики и графических пользовательских интерфейсов, параллельные вычисления с использованием библиотек MPI, OpenMP и комассивов (coarrays). Кроме того, автор анализирует некоторые числовые алгоритмы и их реализации, а также показывает, как можно применить некоторые библиотеки с открытыми исходными кодами.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Арьен Маркус Современный Fortran на практике
Modern Fortran in Practice Arjen MArkus with Foreword by MichAel MetcAlF
Москва, 2023 Арьен МАркус с предисловиеМ МАйклА МеткАлфА Современный Fortran на практике 2-е издание, электронное
УДК 004.438Fortran ББК 32.973.22 M27 M27 Маркус, Арьен. Современный Fortran на практике / А. Маркус ; пер. с англ. А. В. Снастина. — 2-е изд., эл. — 1 файл pdf : 319 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-602-9 Язык программирования Fortran изначально был предназначен для математических вычислений с максимальной производительностью. В последний стандарт Fortran 2008 включено множество современных функциональных возможностей: средства объектно-ориентированного программирования, специализированные операции с массивами, типы, определяемые пользователем и поддержка параллельных вычислений. Данное учебное руководство поможет программистам на языке Fortran научиться применять все вышеперечисленные функциональные возможности в соответствии с современными требованиями: модульность, лаконичность, объектно-ориентированный подход и рациональное использование ресурсов, а также организация работы с учётом наличия нескольких процессоров. В книге рассматриваются практические примеры взаимодействия с программами, написанными на языке C, управления памятью, применения графики и графических пользовательских интерфейсов, параллельные вычисления с использованием библиотек MPI, OpenMP и комассивов (coarrays). Кроме того, автор анализирует некоторые числовые алгоритмы и их реализации, а также показывает, как можно применить некоторые библиотеки с открытыми исходными кодами. УДК 004.438Fortran ББК 32.973.22 Электронное издание на основе печатного издания: Современный Fortran на практике / А. Маркус ; пер. с англ. А. В. Снастина. — Москва : ДМК Пресс, 2015. — 318 с. — ISBN 978-5- 97060- 302-4. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-602-9 © Arjen Markus, 2012 © Оформление, перевод на русский язык ДМК Пресс, 2015
«Eadem mutata resurgo» (вольный перевод: «изменяясь, я вновь воскресаю») Надпись на могиле Якоба Бернулли, изначально относящаяся к логарифмической спирали Посвящается памяти моего отца. Мои родители научили меня любознательности. Моя жена и мои дети всё время учат меня другим важным вещам.
оглавление Предисловие Майкла Меткалфа.......................... 11 Предисловие автора ......................................... 15 Глава 1. Введение в современный Fortran ............. 17 1.1. особенности современного Fortran .................................. 17 1.2. Fortran 90 .......................................................................... 21 1.3. Fortran 95 .......................................................................... 25 1.4. Fortran 2003 ...................................................................... 26 1.5. Fortran 2008 ...................................................................... 28 1.6. Что осталось неизменным ................................................. 29 Глава 2. Функции для работы с массивами ............ 32 2.1. передача массивов в аргументах ...................................... 33 производительность при использовании функций обработки массивов ........................................................................................35 2.2. Элементные функции и автоматическое перераспределение памяти .................................................... 36 2.3. два более сложных примера ............................................. 38 дистанционирование иррациональных чисел .................................38 Быстрая сортировка Quicksort ........................................................40 2.4. компактный стиль ............................................................. 41 Глава 3. Математические абстракции .................. 44 3.1. Автоматическое дифференцирование .............................. 44 проблемы при вычислениях ...........................................................49 3.2. дискретное программирование ........................................ 50 управление памятью ......................................................................51 3.3. перечислимое множество решений диофантовых уравнений ............................................................................... 53 3.4. отложенные или ленивые вычисления .............................. 56
Оглавление Глава 4. Управление памятью ............................. 60 4.1. динамически изменяемые массивы .................................. 60 4.2. утечки памяти при использовании указателей .................. 61 4.3. увеличение размера массива ........................................... 62 4.4. строки символов с изменяемой длиной ............................ 63 4.5. сочетание автоматических и динамических массивов ...... 66 4.6. производительность массивов разных типов .................... 67 4.7. параметризованные производные типы ........................... 69 4.8. Утечки памяти в производных типах ................................ 71 4.9. производительность и доступ к памяти ............................. 76 Глава 5. Проблема интерфейса ........................... 80 5.1. подстановка параметров .................................................. 82 5.2. использование пула данных .............................................. 84 данные в модулях ...........................................................................85 внутренние подпрограммы ............................................................88 5.3. передача дополнительных аргументов ............................. 89 Массив параметров ........................................................................89 использование функции transfer() ..................................................90 процедуры, связанные с типом ......................................................91 указатели на процедуры .................................................................93 5.4. управляющие конструкции ............................................... 95 Библиотека openMP .....................................................................100 5.5. работа с числовыми значениями различной точности ..... 102 5.6. резюме ........................................................................... 103 Глава 6. Взаимодействие с программами на языке C на примере работы с СУБД SQLite ...... 105 6.1. соответствие типов данных ............................................ 106 6.2. передача аргументов между подпрограммами, написанными на c и на Fortran ............................................... 109 6.3. соглашения об именовании и вызовах функций .............. 110 6.4. работа с производными типами ...................................... 113 6.5. создание интерфейса к суБд sQlite .............................. 116 Глава 7. Графика, GUI и Интернет ...................... 124 7.1. вывод результатов в графическом виде .......................... 125 7.2. Графические пользовательские интерфейсы (Gui) ......... 131
Оглавление 7.3. интернет ......................................................................... 139 7.4. работа с XMl-файлами ................................................... 143 Глава 8. Модульное тестирование ..................... 148 8.1. инструментальные средства тестирования ..................... 148 8.2. пример: обработка трёхдиагональной матрицы .............. 149 8.3. проектирование и реализация ........................................ 153 8.4. Заключительные замечания ............................................ 155 Глава 9. Просмотр и рецензирование исходного кода ............................................................. 157 9.1. соблюдать определённость и однозначность ................. 158 используйте явные объявления переменных и констант ...............158 используйте предусловия ............................................................160 переменные, сохраняющие свои значения между вызовами ........161 видимость интерфейса к подпрограмме или функции ..................161 доступность переменных и подпрограмм .....................................161 вариант default в блоке select и ветвь else в блоке if ......................162 информативные сообщения об ошибках ......................................162 9.2. избегать излишней сложности и запутанности ............... 164 9.3. избегать «ловушек» ........................................................ 169 правильная обработка ошибок .....................................................169 сравнение вещественных чисел ...................................................169 смешанная точность ....................................................................171 неожиданные результаты при работе с отрицательными числами ........................................................................................171 Автоматические массивы .............................................................172 ошибки могут возникать не только при работе с числами .............173 9.4. писать простой и понятный код ...................................... 173 Глава 10. Устойчивая к ошибкам реализация нескольких простых алгоритмов ....................... 178 10.1. обзор существующих подобных методик ...................... 179 10.2. линейная интерполяция ................................................ 181 10.3. простые статистические методы и характеристики ....... 187 10.4. поиск корней уравнения ............................................... 195 Глава 11. Объектно-ориентированное программирование ......................................... 209 11.1. расширение типов и процедуры, связанные с типами ... 209 передача объекта в другом аргументе ..........................................211
Оглавление расширение до трёх измерений ...................................................212 пример: случайные перемещения в двух и в трёх измерениях ......215 определение динамического типа ................................................217 наблюдение за частицами ............................................................217 11.2. интерфейсы как контракты ........................................... 221 Аппроксимация множественного наследования ...........................225 11.3. использование прототипирования ................................ 226 пример: моделирование поведения рыб ......................................229 11.4. Абстрактные типы данных и обобщённое программирование ............................................................... 232 11.5. изменение поведения типа данных ............................... 235 11.6. Шаблоны проектирования ............................................. 237 Шаблон проектирования Factory...................................................238 Шаблон проектирования наблюдатель .........................................241 Глава 12. Параллельное программирование ....... 245 12.1. простые числа .............................................................. 246 Библиотека openMP .....................................................................248 интерфейс MPi .............................................................................251 комассивы ...................................................................................255 12.2. декомпозиция по доменам ........................................... 259 openMP ........................................................................................261 MPi ...............................................................................................265 комассивы ...................................................................................266 12.3. другие методики параллельного программирования .... 268 12.4. резюме ......................................................................... 270 Приложение А. Инструментальные средства для разработки и сопровождения ........................... 271 А.1. компиляторы .................................................................. 271 А.2. средства сборки программ ............................................ 272 А.3. интегрированные среды разработки .............................. 275 А.4. средства проверки во время выполнения ....................... 276 А.5. системы управления версиями ...................................... 278 А.6. документирование исходного кода ................................. 279 А.7. охват кода тестированием и статический анализ ............ 281 Приложение Б. Некоторые нюансы использования Fortran ..................................... 285
Оглавление Б.1. особенности стандарта .................................................. 285 вычисление логических выражений по короткой схеме ................285 сохранение значений локальных переменных ..............................286 ещё об инициализации .................................................................287 двойная точность и вычисление правой части выражений ............287 передача одного и того же аргумента дважды ..............................288 reAl(4) .........................................................................................290 признак конца файла (eoF), вывод на экран и т. п. ........................290 внешние и внутренние (встроенные) подпрограммы ....................291 несовпадения в интерфейсах: предполагаемая форма и явная форма массивов ...........................................................................292 инициализация генератора случайных чисел ...............................293 открытие одного и того же файла дважды ....................................294 Б.2. Массивы ......................................................................... 294 использование автоматических и временных массивов может привести к переполнению стека ...................................................294 Границы массивов с начальным индексом меньше 1 ....................296 объявления массивов: dimension(:) и dimension(*) .......................296 Б.3. динамические библиотеки ............................................. 297 открытие файла в программе и использование его в dll и наоборот ....................................................................................297 выделение памяти в dll и освобождение этой памяти в программе и наоборот ...............................................................298 Аргументы командной строки недоступны в dll ...........................298 подпрограммы или данные из основной программы, используемые в dll .....................................................................298 Приложение В. Зарегистрированные товарные знаки, упоминаемые в данной книге ..................... 300 Список литературы ......................................... 302 Предметный указатель .................................... 309