Решение задач на современном C++. Станьте опытным программистом, решая практические задачи
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Бансила Мариус
Перевод:
Киселев А. Н.
Год издания: 2019
Кол-во страниц: 303
Возрастное ограничение: 12+
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное профессиональное образование
ISBN: 978-5-97060-666-7
Артикул: 882329.01.99
Эта книга — сборник практических задач по языку С++17: от математических и вычислительных до архитектурных, построенных на базе шаблонов проектирования. Здесь собрано 100 задач, которые помогут вам применить на практике разнообразные возможности C++ и его стандартной библиотеки, а также опробовать множество сторонних, кроссплатформенных библиотек. Решения представлены в виде исходного кода, пояснений и рекомендаций к нему. Книга рекомендована сообществом разработчиков С++ России и Беларуси.
Издание будет полезно студентам технических вузов, а также начинающим и опытным разработчикам.
Тематика:
ББК:
УДК:
ОКСО:
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Мариус Бансила Решение задач на современном C++ Станьте опытным программистом, решая практические задачи
The Modern C++ Challenge Become an expert programmer by solving real-world problems Marius Bancila BIRMINGHAM – MUMBAI
Решение задач на современном C++ Станьте опытным программистом, решая практические задачи Мариус Бансила Москва, 2019
УДК 004.4
ББК 32.973.202-018.2
Б23
Б23 Мариус Бансила
Решение задач на современном C++ / пер. с англ. А. Н. Киселева – М.: ДМК Пресс,
2019. – 302 с.: ил.
ISBN 978-5-97060-666-7
Эта книга – сборник практических задач по языку С++17: от математических
и вычислительных до архитектурных, построенных на базе шаблонов проектирования. Здесь собрано 100 задач, которые помогут вам применить на практике
разнообразные возможности C++ и его стандартной библиотеки, а также опробовать множество сторонних, кроссплатформенных библиотек. Решения представлены в виде исходного кода, пояснений и рекомендаций к нему.
Книга рекомендована сообществом разработчиков С++ России и Беларуси.
Издание будет полезно студентам технических вузов, а также начинающим и
опытным разработчикам.
УДК 004.4
ББК 32.973.202-018.2
Все права защищены. Любая часть этой книги не может быть воспроизведена в
какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи с этим издательство
не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 978-1-78899-386-9 (англ.) Copyright © 2018 Packt Publishing.
ISBN 978-5-97060-666-7 (рус.) © Оформление, перевод на русский язык, издание,
ДМК Пресс, 2019
Оглавление Вступительное слово от сообщества разработчиков России и Беларуси.....12 Об авторе.................................................................................................................13 О рецензентах.........................................................................................................14 О чем рассказывается в книге..............................................................................15 Вступление............................................................................................................... 17 Кому адресована эта книга.........................................................................................................18 Что необходимо, чтобы извлечь максимум пользы из книги.......................................18 Скачивание исходного кода примеров.................................................................................19 Сборка примеров............................................................................................................................19 Как сгенерировать проекты для Visual Studio 2017..........................................................20 Как сгенерировать проекты для Xcode....................................................................................20 Соглашения........................................................................................................................................21 Отзывы и пожелания.....................................................................................................................22 Список опечаток..............................................................................................................................23 Нарушение авторских прав........................................................................................................23 Глава 1. Математические задачи.........................................................................24 Задачи..................................................................................................................................................24 1. Сумма натуральных чисел, кратных 3 и 5..........................................................................24 2. Наибольший общий делитель.................................................................................................24 3. Наименьшее общее кратное...................................................................................................24 4. Наибольшее простое число меньше заданного..............................................................24 5. Простые числа, отличающиеся на шесть............................................................................24 6. Избыточные числа.......................................................................................................................24 7. Дружественные числа.................................................................................................................25 8. Числа Армстронга........................................................................................................................25 9. Простые множители числа.......................................................................................................25 10. Код Грея.........................................................................................................................................25 11. Преобразование десятичных чисел в римские............................................................25 12. Наибольшая последовательность Коллатца...................................................................25 13. Вычисление значения числа π.............................................................................................25 14. Проверка действительности номеров ISBN...................................................................25 Решения..............................................................................................................................................25 1. Сумма натуральных чисел, кратных 3 и 5..........................................................................25 2. Наибольший общий делитель.................................................................................................26 3. Наименьшее общее кратное...................................................................................................27
Оглавление 4. Наибольшее простое число меньше заданного..............................................................27 5. Простые числа, отличающиеся на шесть............................................................................28 6. Избыточные числа.......................................................................................................................29 7. Дружественные числа.................................................................................................................30 8. Числа Армстронга........................................................................................................................31 9. Простые множители числа.......................................................................................................32 10. Код Грея.........................................................................................................................................33 11. Преобразование десятичных чисел в римские............................................................34 12. Наибольшая последовательность Коллатца...................................................................36 13. Вычисление значения числа π.............................................................................................37 14. Проверка действительности номеров ISBN...................................................................38 Глава 2. Особенности языка..................................................................................40 Задачи..................................................................................................................................................40 15. Тип данных IPv4.........................................................................................................................40 16. Перечисление адресов IPv4 в заданном диапазоне..................................................40 17. 2-мерный массив с поддержкой базовых операций..................................................40 18. Функция выбора минимального значения с переменным числом аргументов....................................................................................................................................40 19. Добавление диапазона значений в контейнер.............................................................40 20. Проверка наличия в контейнере любого, всех и ни одного из указанных значений........................................................................................................................................41 21. Обертка для системных дескрипторов.............................................................................41 22. Литералы разных температурных шкал...........................................................................41 Решения..............................................................................................................................................41 15. Тип данных IPv4.........................................................................................................................41 16. Перечисление адресов IPv4 в заданном диапазоне..................................................43 17. 2-мерный массив с поддержкой базовых операций..................................................45 18. Функция выбора минимального значения с переменным числом аргументов....................................................................................................................................47 19. Добавление диапазона значений в контейнер.............................................................48 20. Проверка наличия в контейнере любого, всех и ни одного из указанных значений........................................................................................................................................49 21. Обертка для системных дескрипторов.............................................................................50 22. Литералы разных температурных шкал...........................................................................54 Глава 3. Строки и регулярные выражения..........................................................59 Задачи..................................................................................................................................................59 23. Преобразование чисел в строки.........................................................................................59 24. Преобразование строк в числа............................................................................................59 25. Преобразование в верхний регистр первых букв слов............................................59 26. Объединение строк через разделитель............................................................................59 27. Разбиение строк на лексемы по разделителям из списка........................................60 28. Наибольшая подстрока-палиндром...................................................................................60 29. Проверка номерного знака...................................................................................................60 30. Извлечение частей URL...........................................................................................................60
Оглавление 7 31. Преобразование дат в строках............................................................................................60 Решения..............................................................................................................................................60 23. Преобразование чисел в строки.........................................................................................60 24. Преобразование строк в числа............................................................................................61 25. Преобразование в верхний регистр первых букв слов............................................63 26. Объединение строк через разделитель............................................................................64 27. Разбиение строк на лексемы по разделителям из списка........................................65 28. Наибольшая подстрока-палиндром...................................................................................66 29. Проверка номерного знака...................................................................................................68 30. Извлечение частей URL...........................................................................................................69 31. Преобразование дат в строках............................................................................................71 Глава 4. Потоки данных и файловые системы..................................................72 Задачи..................................................................................................................................................72 32. Треугольник Паскаля................................................................................................................72 33. Табличный вывод списка процессов.................................................................................72 34. Удаление пустых строк из текстового файла..................................................................72 35. Определение размера каталога..........................................................................................72 36. Удаление файлов старше заданной даты........................................................................73 37. Поиск файлов в каталоге, соответствующих регулярному выражению..............73 38. Временные файлы журналов................................................................................................73 Решения..............................................................................................................................................73 32. Треугольник Паскаля................................................................................................................73 33. Табличный вывод списка процессов.................................................................................74 34. Удаление пустых строк из текстового файла..................................................................76 35. Определение размера каталога..........................................................................................77 36. Удаление файлов старше заданной даты........................................................................78 37. Поиск файлов в каталоге, соответствующих регулярному выражению..............80 38. Временные файлы журналов................................................................................................81 Глава 5. Дата и время.............................................................................................83 Задачи..................................................................................................................................................83 39. Измерение времени выполнения функции....................................................................83 40. Число дней между двумя датами........................................................................................83 41. День недели.................................................................................................................................83 42. День и неделя года....................................................................................................................83 43. Время встречи для нескольких часовых поясов..........................................................83 44. Календарь на месяц..................................................................................................................83 Решения..............................................................................................................................................84 39. Измерение времени выполнения функции....................................................................84 40. Число дней между двумя датами........................................................................................85 41. День недели.................................................................................................................................86 42. День и неделя года....................................................................................................................87 43. Время встречи для нескольких часовых поясов..........................................................88 44. Календарь на месяц..................................................................................................................90
Оглавление Глава 6. Алгоритмы и структуры данных............................................................92 Задачи..................................................................................................................................................92 45. Приоритетная очередь............................................................................................................92 46. Циклический буфер..................................................................................................................92 47. Двойной буфер...........................................................................................................................93 48. Самый часто встречающийся элемент в диапазоне....................................................93 49. Текстовая гистограмма.............................................................................................................93 50. Фильтрация списка телефонных номеров......................................................................93 51. Преобразование списка телефонных номеров............................................................93 52. Генерация всех перестановок символов в строке.......................................................94 53. Средний рейтинг фильмов.....................................................................................................94 54. Алгоритм объединения в пары.............................................................................................94 55. Алгоритм «сшивания»..............................................................................................................94 56. Алгоритм выбора.......................................................................................................................94 57. Алгоритм сортировки................................................................................................................95 58. Кратчайший путь между узлами..........................................................................................95 59. Программа Weasel.....................................................................................................................96 60. Игра «Жизнь»..............................................................................................................................96 Решения..............................................................................................................................................97 45. Приоритетная очередь............................................................................................................97 46. Циклический буфер..................................................................................................................99 47. Двойной буфер........................................................................................................................103 48. Самый часто встречающийся элемент в диапазоне.................................................105 49. Текстовая гистограмма.......................................................................................................... 107 50. Фильтрация списка телефонных номеров...................................................................108 51. Преобразование списка телефонных номеров.........................................................109 52. Генерация всех перестановок символов в строке....................................................111 53. Средний рейтинг фильмов..................................................................................................113 54. Алгоритм объединения в пары..........................................................................................114 55. Алгоритм «сшивания»...........................................................................................................115 56. Алгоритм выбора.................................................................................................................... 117 57. Алгоритм сортировки............................................................................................................. 117 58. Кратчайший путь между узлами.......................................................................................121 59. Программа Weasel..................................................................................................................125 60. Игра «Жизнь»...........................................................................................................................128 Глава 7. Конкуренция...........................................................................................133 Задачи...............................................................................................................................................133 61. Алгоритм параллельного преобразования..................................................................133 62. Параллельные алгоритмы поиска максимального и минимального значений с использованием потоков.............................................................................133 63. Параллельные алгоритмы поиска максимального и минимального значений с использованием асинхронных функций...............................................133 64. Параллельный алгоритм сортировки.............................................................................133 65. Потокобезопасное журналирование в консоль.........................................................134 66. Система обслуживания клиентов.....................................................................................134
Оглавление 9 Решения...........................................................................................................................................134 61. Алгоритм параллельного преобразования..................................................................134 62. Параллельные алгоритмы поиска максимального и минимального значений с использованием потоков.............................................................................136 63. Параллельные алгоритмы поиска максимального и минимального значений с использованием асинхронных функций...............................................138 64. Параллельный алгоритм сортировки.............................................................................140 65. Потокобезопасное журналирование в консоль.........................................................142 66. Система обслуживания клиентов.....................................................................................143 Глава 8. Шаблоны проектирования...................................................................148 67. Проверка пароля.....................................................................................................................148 68. Генерация случайных паролей..........................................................................................148 69. Генерация номеров социального страхования..........................................................148 70. Система одобрений...............................................................................................................149 71. Контейнер с наблюдателями..............................................................................................149 72. Вычисление стоимости заказа с учетом скидок........................................................149 Решения...........................................................................................................................................150 67. Проверка пароля.....................................................................................................................150 68. Генерация случайных паролей..........................................................................................154 69. Генерация номеров социального страхования..........................................................158 70. Система одобрений...............................................................................................................162 71. Контейнер с наблюдателями..............................................................................................166 72. Вычисление стоимости заказа с учетом скидок........................................................171 Глава 9. Сериализация данных...........................................................................177 Задачи............................................................................................................................................... 177 73. Сериализация и десериализация данных в формате XML.................................... 177 74. Выборка данных из XML с помощью XPath................................................................. 177 75. Сериализация данных в формат JSON...........................................................................178 76. Десериализация данных из формата JSON.................................................................178 77. Вывод списка фильмов в файл PDF................................................................................178 78. Создание документа PDF из коллекции изображений...........................................179 Решения...........................................................................................................................................179 73. Сериализация и десериализация данных в формате XML....................................179 74. Выборка данных из XML с помощью XPath.................................................................183 75. Сериализация данных в формат JSON...........................................................................185 76. Десериализация данных из формата JSON................................................................. 187 77. Вывод списка фильмов в файл PDF................................................................................189 78. Создание документа PDF из коллекции изображений...........................................193 Глава 10. Архивы, изображения и базы данных.............................................196 Задачи...............................................................................................................................................196 79. Поиск файлов в архиве ZIP................................................................................................196 80. Упаковка и извлечение файлов из архива ZIP...........................................................196 81. Упаковка и извлечение файлов из архива ZIP с защитой паролем..................196
Оглавление 82. Создание файла PNG с изображением национального флага............................196 83. Создание изображения PNG с контрольным текстом.............................................. 197 84. Генератор штрихкодов EAN-13 ........................................................................................ 197 85. Чтение информации о фильмах из базы данных SQLite.......................................198 86. Добавление информации о фильмах в базу данных SQLite................................198 87. Обработка изображений для фильмов в базе данных SQLite.............................198 Решения...........................................................................................................................................199 79. Поиск файлов в архиве ZIP................................................................................................199 80. Упаковка и извлечение файлов из архива ZIP...........................................................201 81. Упаковка и извлечение файлов из архива ZIP с защитой паролем..................204 82. Создание файла PNG с изображением национального флага............................ 207 83. Создание изображения PNG с контрольным текстом..............................................208 84. Генератор штрихкодов EAN-13 ........................................................................................211 85. Чтение информации о фильмах из базы данных SQLite....................................... 217 86. Добавление информации о фильмах в базу данных SQLite................................223 87. Обработка изображений для фильмов в базе данных SQLite............................. 227 Глава 11. Криптография......................................................................................236 Задачи...............................................................................................................................................236 88. Шифр Цезаря............................................................................................................................236 89. Шифр Виженера......................................................................................................................236 90. Кодирование и декодирование Base64........................................................................236 91. Проверка учетных данных пользователя.....................................................................236 92. Вычисление хеш-суммы файла.........................................................................................236 93. Шифрование и расшифровывание файлов................................................................. 237 94. Подписывание файлов......................................................................................................... 237 Решения........................................................................................................................................... 237 88. Шифр Цезаря............................................................................................................................ 237 89. Шифр Виженера......................................................................................................................239 90. Кодирование и декодирование Base64........................................................................241 91. Проверка учетных данных пользователя.....................................................................246 92. Вычисление хеш-суммы файла.........................................................................................250 93. Шифрование и расшифровывание файлов.................................................................252 94. Подписывание файлов.........................................................................................................254 Глава 12. Сети и службы......................................................................................258 Задачи...............................................................................................................................................258 95. Поиск IP-адреса хоста..........................................................................................................258 96. Клиент-серверная игра Fizz-Buzz....................................................................................258 97. Обменный курс биткойна....................................................................................................258 98. Получение почты по протоколу IMAP............................................................................258 99. Перевод текста на любой язык.........................................................................................259 100. Определение лиц на изображениях............................................................................259 Решения...........................................................................................................................................259 95. Поиск IP-адреса хоста..........................................................................................................259 96. Клиент-серверная игра Fizz-Buzz....................................................................................261