Решение задач на современном C++

Издательство: ДМК-Пресс
Автор: Бансила М.
ISBN: 978-5-97060-666-7
Страниц: 302
Язык: Русский
Год издания: 2018

 
 
 

Описание книгиСодержаниеДополнительно

Книги по IT. Это руководство является сборником с задачами по языку программирования С++ 17. Представлены как вычислительные, математические задачи так и архитектурные, построенные с помощью шаблонов проектирования. С помощью этого издания Вы научитесь практическому применению разнообразных возможностей C++ со стандартной и множеством кроссплатформенных сторонних библиотек. Решения представляют из себя исходный код с пояснениями и рекомендациями. Сборник будет полезен как опытным так и начинающим разработчикам, студентам.

Вступительное слово от сообщества разработчиков России и Беларуси 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
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
Решения 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
97. Обменный курс биткойна 265
98. Получение почты по протоколу IMAP 270
99. Перевод текста на любой язык 274
100. Определение лиц на изображениях 279
Библиография 291
Статьи 291
Документация к библиотекам 293
Предметный указатель 295

Маурис Бансила (Marius Bancila) – инженер-программист с 15-летним опытом разработки промышленных и финансовых решений. Автор книги «Modern C++ Programming Cookbook». Отдает предпочтение технологиям Microsoft и занимается в основном разработкой настольных приложений на C++ и C#. С удовольствием делится своим опытом с другими, и поэтому вот уже больше десяти лет ему присваивается статус Microsoft MVP. Связаться с ним можно в Twitter: @mariusbancila.
Глава 1 «Математические задачи» содержит ряд математических упражнений, которые помогут вам разобраться в более сложных задачах в последующих главах.
Глава 2 «Особенности языка» предлагает задачи, решая которые, вы попрактикуетесь в перегрузке операторов, семантике перемещения, определении пользовательских литералов и аспектах метапрограммирования шаблонов, таких как функции с переменным количеством аргументов, выражения свертки и свойства типов (type traits).
Глава 3 «Строки и регулярные выражения» включает несколько задач по работе со строками, такие как преобразование между строками и другими типами данных, разбиение и объединение строк, а также задачи с регулярными выражениями.
Глава 4 «Потоки данных и файловые системы» охватывает управление потоком вывода, а также операции с файлами и каталогами с применением библиотеки filesystem в C++17.
Глава 5 «Дата и время» знакомит с грядущими расширениями к библиотеке chrono в C++20, содержит несколько задач по работе с датами и часовыми поясами,
которые можно решать с помощью библиотеки date, являющейся основой новых дополнений к стандарту.
Глава 6 «Алгоритмы и структуры данных» – одна из самых длинных и содержит широкий спектр задач. Для решения одних вы должны будете использовать существующие стандартные алгоритмы; для других – написать свои обобщенные алгоритмы или структуры данных, такие как циклический буфер и приоритетная очередь. В конце главы приводятся две довольно забавные задачи, программа «Weasel» Докинза (Dawkins) и программа «Game of Life» Конвея (Conway), которые познакомят вас с эволюционными алгоритмами и клеточными автоматами.
Глава 7 «Конкуренция» потребует от вас использовать потоки выполнения (threads) и асинхронные функции для реализации обобщенных параллельных алгоритмов, а также решить некоторые проблемы конкурентного выполнения.
Глава 8 «Шаблоны проектирования» предлагает ряд задач, которые можно решить с применением шаблонов проектирования, таких как «Декоратор», «Компоновщик», «Цепочка обязанностей», «Шаблонный метод» и др.
Глава 9 «Сериализация данных» охватывает наиболее распространенные форматы сериализованных данных, JSON и XML; но также включает задачу по созданию файлов PDF с применением любых сторонних, открытых и кроссплатформенных библиотек.
Глава 10 «Архивы, изображения и базы данных» научит вас работать с архивами ZIP, создавать файлы PNG, например для Captcha-подобных систем, а также пользоваться встраиваемыми базами данных SQLite.
Глава 11 «Криптография» в основном охватывает приемы использования библиотеки Crypto++ для шифрования и подписывания данных. Также предложит вам реализовать свои утилиты кодирования и декодирования в/из формата Base64.
Глава 12 «Сети и службы» предложит вам реализовать свое клиент/серверное приложение, взаимодействующее по протоколу TCP/IP, а также продемонстрировать свою способность пользоваться разнообразными REST-службами, возвращающими информацию о курсе биткойна или выполняющими преобразование текста.
ссылка