C++ для инженерных и научных расчетов
Book information
Description
По мере развития вычислительной техники научные и инженерные проекты становятся все более крупными и сложными, и все более вероятно, что все новые проекты будут разрабатываться на C++. По мере того, как встраиваемое аппаратное обеспечение становится все более мощным, его программное обеспечение также все чаще разрабатывается на C++. Овладение языком программирования C++ дает вам навыки программирования почти на каждом уровне - от близкого к аппаратному обеспечению до абстракций высшего уровня. Короче говоря, C++ - это тот язык, который научные и технические специалисты должны знать в обязательном порядке. Книга "C++ для инженерных и научных расчетов" Питера Готтшлинга представляет собой интенсивное введение в язык программирования C++, облегчающее переход к действительно сложным темам, основанным на передовых методах программирования. Автор вводит ключевые понятия с использованием примеров из многих предметных областей, опираясь на свой обширный опыт обучения языку C++ студентов, обучающихся физическим, математическим и инженерным специальностям. Эта книга призвана помочь вам быстро приступить к реальной работе, а затем совершенствовать свои знания и умения, осваивая все более сложные возможности языка - от лямбда-функций до шаблонов выражений. Вы также узнаете, как использовать преимущества мощных библиотек, доступных программистам на C++: стандартной библиотеки шаблонов (STL) и научных библиотек для арифметических вычислений, решения задач линейной алгебры, дифференциальных уравнений или построения графиков. На протяжении всей книги автор показывает, как писать программное обеспечение четко и выразительно, используя парадигмы объектно-ориентированного программирования, обобщенного и метапрограммирования и процедурные методы. К тому времени, когда вы закончите чтение книги, вы освоите все абстракции, необходимые для написания программ на C++, обладающих исключительным качеством и производительностью. Содержание Предисловие Причины для изучения C++ Причины для чтения данной книги Красавица и чудовище Языки в науке и технике Соглашения об оформлении Благодарности Об авторе Ждем ваших отзывов! Глава 1. Основы C++ 1.1. Наша первая программа 1.2. Переменные 1.2.1. Константы 1.2.2. Литералы 1.2.3. Не сужающая инициализация в C++11 1.2.4. Области видимости 1.3. Операторы 1.3.1. Арифметические операторы 1.3.2. Булевы операторы 1.3.3. Побитовые операторы 1.3.4. Присваивание 1.3.5. Поток выполнения 1.3.6. Работа с памятью 1.3.7. Операторы доступа 1.3.8. Работа с типами 1.3.9. Обработка ошибок 1.3.10. Перегрузка 1.3.11. Приоритеты операторов 1.3.12. Избегайте побочных эффектов! 1.4. Выражения и инструкции 1.4.1. Выражения 1.4.2. Инструкции 1.4.3. Ветвление 1.4.4. Циклы 1.4.5. goto 1.5. Функции 1.5.1. Аргументы 1.5.2. Возврат результатов 1.5.3. Встраивание 1.5.4. Перегрузка 1.5.5. Функция main 1.6. Обработка ошибок 1.6.1. Утверждения 1.6.2. Исключения 1.6.3. Статические утверждения 1.7. Ввод-вывод 1.7.1. Стандартный вывод 1.7.2. Стандартный ввод 1.7.3. Ввод-вывод в файлы 1.7.4. Обобщенная концепция потоков 1.7.5. Форматирование 1.7.6. Обработка ошибок ввода-вывода 1.8. Массивы, указатели и ссылки 1.8.1. Массивы 1.8.2. Указатели 1.8.3. Интеллектуальные указатели 1.8.3.1. unique_ptr 1.8.4. Ссылки 1.8.5. Сравнение указателей и ссылок 1.8.6. Не ссылайтесь на устаревшие данные! 1.8.7. Контейнеры в качестве массивов 1.9. Структурирование программных проектов 1.9.1. Комментарии 1.9.2. Директивы препроцессора 1.10. Упражнения 1.10.1. Возраст 1.10.2. Массивы и указатели 1.10.3. Чтение заголовка файла Matrix Market Глава 2. Классы 2.1. Программируйте универсальный смысл, а не технические детали 2.2. Члены 2.2.1. Переменные-члены 2.2.2. Доступность 2.2.3. Операторы доступа 2.2.4. Декларатор static в классах 2.2.5. Функции-члены 2.3. Установка значений. Конструкторы и присваивания 2.3.1. Конструкторы 2.3.2. Присваивание 2.3.3. Список инициализаторов 2.3.5. Семантика перемещения 2.4. Деструкторы 2.4.1. Правила реализации 2.4.2. Корректная работа с ресурсами 2.5. Резюме генерации методов 2.6. Доступ к переменным-членам 2.6.1. Функции доступа 2.6.2. Оператор индекса 2.6.3. Константные функции-члены 2.6.4. Ссылочная квалификация членов 2.7. Проектирование перегрузки операторов 2.7.1. Будьте последовательны 2.7.2. Вопросы приоритетов 2.7.3. Члены или свободные функции 2.8. Упражнения 2.8.1. Полиномы 2.8.2. Перемещающее присваивание 2.8.3. Список инициализаторов 2.8.4. Спасение ресурса Глава 3. Обобщенное программирование 3.1. Шаблоны функций 3.1.1. Инстанцирование 3.1.2. Вывод типа параметров 3.1.3. Работа с ошибками в шаблонах 3.1.4. Смешение типов 3.1.5. Унифицированная инициализация 3.1.6. Автоматический возвращаемый тип 3.2. Пространства имен и поиск функций 3.2.1. Пространства имен 3.2.2. Поиск, зависящий от аргумента 3.2.3. Квалификация пространств имен или ADL 3.3. Шаблоны классов 3.3.1. Пример контейнера 3.3.2. Проектирование унифицированных интерфейсов классов и функций 3.4. Вывод и определение типа 3.4.1. Автоматический тип переменных 3.4.2. Тип выражения 3.4.3. decltype(auto) 3.4.4. Определение типов 3.5. Немного теории шаблонов: концепции 3.6. Специализация шаблонов 3.6.1. Специализация класса для одного типа 3.6.2. Специализация и перегрузка функций 3.6.3. Частичная специализация 3.6.4. Частично специализированные функции 3.7. Параметры шаблонов, не являющиеся типами 3.8. Функторы 3.8.1. Функциональные параметры 3.8.2. Составные функторы 3.8.3. Рекурсия 3.8.4. Обобщенное суммирование 3.9. Лямбда-выражения 3.9.1. Захват 3.9.2. Захват по значению 3.9.3. Захват по ссылке 3.9.4. Обобщенный захват 3.9.5. Обобщенные лямбда-выражения 3.10. Вариативные шаблоны 3.11. Упражнения 3.11.1. Строковое представление 3.11.2. Строковое представление кортежей 3.11.3. Обобщенный стек 3.11.4. Итератор вектора 3.11.5. Нечетный итератор 3.11.6. Нечетный диапазон 3.11.7. Стек bool 3.11.8. Стек с пользовательским размером 3.11.9. Вывод аргументов шаблона, не являющихся типами 3.11.10. Метод трапеций 3.11.11. Функтор 3.11.12. Лямбда-выражения 3.11.13. Реализация make_unique Глава 4. Библиотеки 4.1. Стандартная библиотека шаблонов 4.1.1. Вводный пример 4.1.2. Итераторы 4.1.3. Контейнеры 4.1.4. Алгоритмы 4.1.5. За итераторами 4.2. Числовые алгоритмы 4.2.1. Комплексные числа 4.2.2. Генераторы случайных чисел 4.3. Метапрограммирование 4.3.1. Пределы 4.3.2. Свойства типов 4.4. Утилиты 4.4.1. tuple 4.4.2. function 4.4.3. Оболочка для ссылок 4.5. Время — сейчас! 4.6. Параллельность 4.7. Научные библиотеки за пределами стандарта 4.7.1. Иная арифметика 4.7.2. Арифметика интервалов 4.7.3. Линейная алгебра 4.7.4. Обычные дифференциальные уравнения 4.7.5. Дифференциальные уравнения в частных производных 4.7.6. Алгоритмы на графах 4.8. Упражнения 4.8.1. Сортировка по абсолютной величине 4.8.2. Контейнер STL 4.8.3. Комплексные числа Глава 5. Метапрограммирование 5.1. Пусть считает компилятор 5.1.1. Функции времени компиляции 5.1.2. Расширенные функции времени компиляции 5.1.3. Простота 5.1.4. Насколько константны наши константы 5.2. Предоставление и использование информации о типах 5.2.1. Свойства типов 5.2.2. Условная обработка исключений 5.2.3. Пример применения константности 5.2.4. Стандартные свойства типов 5.2.5. Свойства типов, специфичные для предметной области 5.2.6. enable_if 5.2.7. Еще о вариативных шаблонах 5.2.7.1. Вариативный шаблон класса 5.3. Шаблоны выражений 5.3.1. Реализация простого оператора 5.3.2. Класс шаблона выражения 5.3.3. Обобщенные шаблоны выражений 5.4. Метанастройка: написание собственной оптимизации 5.4.1. Классическое развертывание фиксированного размера 5.4.2. Вложенное развертывание 5.4.3. Динамическое развертывание: разминка 5.4.4. Развертывание векторных выражений 5.4.5. Настройка шаблона выражения 5.4.6. Настройки операций сверток 5.4.7. Настройка вложенных циклов 5.4.8. Резюме 5.5. Упражнения 5.5.1. Свойства типов 5.5.2. Последовательность Фибоначчи 5.5.3. Метапрограммирование НОД 5.5.4. Шаблон векторного выражения 5.5.5. Метасписок Глава 6. Объектно-ориентированное программирование 6.1. Фундаментальные принципы 6.1.1. Базовые и производные классы 6.1.2. Наследование конструкторов 6.1.3. Виртуальные функции и полиморфные классы 6.1.4. Функторы и наследование 6.2. Устранение избыточности 6.3. Множественное наследование 6.3.1. Множественные родители 6.3.2. Общие прародители 6.4. Динамический выбор с использованием подтипов 6.5. Преобразования 6.5.1. Преобразование между базовыми и производными классами 6.5.2. const__cast 6.5.3. reinterpret_cast 6.5.4. Преобразования в стиле функций 6.5.5. Неявные преобразования 6.6. CRTP 6.6.1. Простой пример 6.6.2. Повторно используемый оператор доступа 6.7. Упражнения 6.7.1. Ромбовидное наследование без избыточности 6.7.2. Наследование класса вектора 6.7.3. Функция клонирования Глава 7. Научные проекты 7.1. Реализация решателей ОДУ 7.1.1. Обыкновенные дифференциальные уравнения 7.1.2. Алгоритмы Рунге-Кутты 7.1.3. Обобщенная реализация 7.1.4. Дальнейшее развитие 7.2. Создание проектов 7.2.1. Процесс построения 7.2.2. Инструменты для построения приложений 7.2.3. Раздельная компиляция 7.3. Несколько заключительных слов Приложение А. Скучные детали А.1. О хорошем и плохом научном программном обеспечении А.2. Детали основ А.2.1. О квалифицирующих литералах А.2.2. Статические переменные А.2.3. Еще немного об if А.2.4. Метод Даффа А.2.5. Еще немного о функции main А.2.6. Утверждения или исключения? А.2.7. Бинарный ввод-вывод А.2.8. Ввод-вывод в стиле С А.2.9. Сборка мусора А.2.10. Проблемы с макросами А.3. Реальный пример: обращение матриц А.4. Больше о классах А.4.1. Указатель на член А.4.2. Примеры инициализации А.4.3. Обращение к многомерным массивам А.5. Генерация методов А.5.1. Управление генерацией А.5.2. Правила генерации А.5.3. Ловушки и советы по проектированию А.6. Подробнее о шаблонах А.6.1. Унифицированная инициализация А.6.2. Какая функция вызвана? А.6.3. Специализация для определенного аппаратного обеспечения А.6.4. Бинарный ввод-вывод с переменным числом аргументов А.7. Использование std: : vector в С++03 А.8. Динамический выбор в старом стиле A.9. Подробности метапрограммирования А.9.1. Первая метапрограмма в истории А.9.2. Метафункции А.9.3. Обратно совместимые статические утверждения А.9.4. Анонимные параметры типа А.9.5. Проверка производительности динамического развертывания A.9.6. Производительность умножения матриц Приложение Б. Инструментарий для программирования Б.1. gcc Б.2. Отладка Б.2.1. Текстовая отладка Б.2.2. Отладка с графическим интерфейсом: DDD Б.3. Анализ памяти Б.4. gnuplot Б.5. Unix, Linux и Mac OS Приложение В. Определения языка B.1. Категории значений В.2. Обзор операторов В.3. Правила преобразования B.3.1. Повышение В.3.2. Другие преобразования В.3.3. Обычные арифметические преобразования В.3.4. Сужение Библиография Предметный указатель
Similar books
C++ для инженерных и научных расчетов
2020 · PDF
Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique
2025 · PDF
Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная
2022 · PDF
Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание
2021 · PDF
Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)
2022 · PDF
Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)
2023 · PDF
Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"
2022 · PDF
Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»
2014 · PDF