Думай как программист, Креативный подход к созданию кода, C++ версия, Спрол А., 2018.
При помощи этой книги любой программист, особенно начинающий, может усовершенствовать свои навыки программирования. Автор разработал собственную программу, позволяющую получить навыки креативного решения разнообразных задач. Эти навыки необходимы в первую очередь тем, кто хочет создавать собственный код и действительно понимать и чувствовать основы программирования. Живой язык, множество примеров на языке C++ и уникальное авторское видение сделают чтение этой книги настоящим удовольствием.
Стратегии решения задач.
Эта книга посвящена решению задач, но что это значит на самом деле? Когда люди используют этот термин в разговоре, они зачастую имеют в виду нечто очень отличное от того, о чем я говорю в этой книге. Если из выхлопной трубы вашего старого автомобиля идет сизый дым, двигатель то и дело глохнет, а расход топлива вырос, то эта проблема, как задача, может быть решена с применением знаний автомобиля, диагностикой и заменой деталей при помощи инструментов автомеханика. Впрочем, если вы расскажете о своей проблеме друзьям, то один из них может вам ответить: «Эй, ты должен заменить свою старую машину на что-то поновее, и проблема будет решена». Однако предложение вашего друга на самом деле не будет решением задачи: это будет лишь способом ее избежать.
Задачи подразумевают ограничения, незыблемые правила, касающиеся задачи или способа ее решения. В случае со сломанной машиной одно из ограничений заключается в том, что вам нужно отремонтировать имеющийся автомобиль, а не купить новый. Ограничения также должны подразумевать общую стоимость ремонта, время на ремонт и невозможность приобретения инструмента для ремонта только этой поломки.
При решении проблемы в программе у вас также есть определенные ограничения. Среди общих ограничений язык программирования, платформа (будет ли программа работать на ПК, iPhone или ином устройстве?), производительность (для игровой программы может требоваться обновление графики до 30 кадров в секунду, бизнес-приложение должно иметь ограничение по максимальному времени отклика на ввод пользователя) или объем требуемой памяти. Иногда ограничения также подразумевают код, на который вы можете ссылаться: возможно, программа не может включать определенный открытый код или, наоборот, должна использовать только открытый код.
Содержание.
ОБ АВТОРЕ.
ВВЕДЕНИЕ.
Об этой книге.
Предварительная подготовка.
Выбор тем.
Стиль программирования.
Упражнения.
Почему C++?.
ГЛАВА 1. СТРАТЕГИИ РЕШЕНИЯ ЗАДАЧ.
Классические головоломки.
Лисица, гусь и кукуруза.
Задача: как пересечь реку?.
Вынесенные уроки.
Головоломки со скользящими плитками.
Задача: скользящая восьмерка.
Задача: скользящая пятерка.
Вынесенные уроки.
Судоку.
Задача: заполнить квадрат «Судоку».
Вынесенные уроки.
Замок Кварраси.
Задача: открыть инопланетный замок.
Вынесенные уроки.
Общие подходы к решению задач.
Планируйте решения.
Переформулируйте задачи.
Делите задачи.
Начните с того, что знаете.
Упрощайте задачи.
Ищите аналогии.
Экспериментируйте.
Не расстраивайтесь.
Упражнения.
ГЛАВА 2. ИСТИННЫЕ ГОЛОВОЛОМКИ.
Обзор языка C++, используемого в этой главе.
Шаблоны вывода.
Задача: половина квадрата.
Задача: квадрат (упрощение задачи с половиной квадрата).
Задача: линия (еще большее упрощение задачи с половиной квадрата).
Задача: посчитать на уменьшение, считая на увеличение.
Задача: равнобедренный треугольник.
Обработка ввода.
Задача: проверка контрольной суммы Луна.
Разбиение проблемы на части.
Задача: преобразовать символ цифры в целое число.
Задача: проверка контрольной суммы Луна, фиксированная длина.
Задача: проверка простой контрольной суммы, фиксированная длина.
Задача: положительное или отрицательное.
Соберем все детали вместе.
Отслеживание состояния.
Задача: декодирование сообщения.
Задача: чтение трех- или четырехзначного числа.
Задача: чтение трех- или четырехзначного числа, дальнейшее упрощение.
Заключение.
Упражнения.
ГЛАВА 3. РЕШЕНИЕ ЗАДАЧ С МАССИВАМИ.
Обзор основных свойств массивов.
Сохранение.
Копирование.
Извлечение и поиск.
Поиск определенного значения.
Поиск по критерию.
Сортировка.
Быстрая и простая сортировка с помощью функции qsort.
Легко модифицируемый алгоритм сортировки — сортировка вставками.
Вычисление статистических показателей.
Решение задач с помощью массивов.
Задача: нахождение моды.
Рефакторинг.
Массивы фиксированных данных.
Нескалярные массивы.
Многомерные массивы.
В каких случаях использовать массивы.
Упражнения.
ГЛАВА 4. РЕШЕНИЕ ЗАДАЧ С УКАЗАТЕЛЯМИ И ДИНАМИЧЕСКОЙ ПАМЯТЬЮ.
Обзор основных свойств указателей.
Преимущества использования указателей.
Структуры данных, размер которых определяется во время выполнения программы.
Динамические структуры.
Разделение памяти.
В каких случаях использовать указатели.
Вопросы памяти.
Стек и куча.
Объем памяти.
Время существования переменной.
Решение задач с указателями.
Строка переменной длины.
Задача: операции со строками переменной длины.
Проверка на специальные случаи.
Копирование созданной динамически строки.
Связные списки.
Задача: отслеживание неизвестного количества студенческих карточек.
Построение списка узлов.
Добавление узлов в список.
Обход списка.
Заключение и дальнейшие шаги.
Упражнения.
ГЛАВА 5. РЕШЕНИЕ ЗАДАЧ С КЛАССАМИ.
Обзор основных свойств классов.
Цели использования классов.
Инкапсуляция.
Повторное использование кода.
Разделение задачи.
Сокрытие.
Читабельность.
Выразительность.
Создание простого класса.
Задача: список класса.
Базовый фреймворк класса.
Служебные методы.
Классы с динамическими данными.
Задача: отслеживание неизвестного количества записей студентов.
Добавление узла.
Перегруппировка списка.
Деструктор.
Глубокое копирование.
Общий обзор классов с динамической памятью.
Ошибки, которых следует избегать.
Фальшивый класс.
Однозадачники.
Упражнения.
ГЛАВА 6. РЕШЕНИЕ ЗАДАЧ С ПОМОЩЬЮ РЕКУРСИИ.
Обзор основ рекурсии.
Головная и хвостовая рекурсия.
Задача: подсчет количества попугаев.
Подход 1.
Подход 2.
Задача: выявление лучшего клиента.
Подход 1.
Подход 2.
Большая рекурсивная идея.
Задача: вычисление суммы элементов целочисленного массива.
Распространенные ошибки.
Слишком много параметров.
Глобальные переменные.
Применение рекурсии к динамическим структурам данных.
Рекурсия и связные списки.
Задача: подсчет отрицательных чисел в односвязном списке.
Рекурсия и двоичные деревья.
Задача: нахождение наибольшего значения в двоичном дереве.
Функции-обертки.
Задача: нахождение количества листьев в двоичном дереве.
В каких случаях использовать рекурсию.
Аргументы против рекурсии.
Задача: отображение элементов связного списка в прямом порядке.
Задача: отображение элементов связного списка в обратном порядке.
Упражнения.
ГЛАВА 7. РЕШЕНИЕ ЗАДАЧ С ПОМОЩЬЮ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ КОДА.
Хорошее и плохое повторное
использование кода.
Основы работы с компонентами.
Кодовый блок.
Алгоритмы.
Шаблоны.
Абстрактные типы данных.
Библиотеки.
Изучение компонентов.
Исследовательское обучение.
Применение полученных знаний на практике.
Задача: староста.
Анализ решения задачи выбора старосты.
Обучение по мере необходимости.
Задача: эффективный обход.
Когда следует искать компонент.
Нахождение компонента.
Применение компонента.
Анализ эффективного решения задачи с обходом.
Выбор типа компонента.
Процесс выбора компонента.
Задача: выборочная сортировка.
Сравнение результатов.
Упражнения.
ГЛАВА 8. ДУМАЙТЕ КАК ПРОГРАММИСТ.
Разработка собственного мастер-плана.
Использование своих сильных и слабых сторон.
Планирование с учетом недостатков кодирования.
Планирование с учетом недостатков дизайна.
Планирование с учетом ваших сильных сторон.
Составление мастер-плана.
Решение любой задачи.
Задача: жульничество при игре в «Виселицу».
Нахождение возможности для жульничества.
Необходимые операции для обмана в игре «Виселица».
Исходный дизайн.
Первичное кодирование.
Анализ первоначальных результатов.
Искусство решения задач.
Изучение новых навыков программирования.
Новые языки.
Выделите время на учебу.
Начните с того, что вы знаете.
Изучите отличия.
Изучайте хорошо написанный код.
Новые навыки для языка, который вы уже знаете.
Новые библиотеки.
Выберите курс.
Заключение.
Упражнения.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ.
Купить .
Теги: учебник по программированию :: программирование :: Спрол
Смотрите также учебники, книги и учебные материалы:
- Изучаем Java ЕЕ, Современное программирование для больших предприятий, Дашнер С., 2018
- Идеальный программист, Как стать профессионалом разработки ПО, Мартин Р., 2018
- Легкий способ выучить Python 3, Шоу З., 2019
- Язык программирования Python, практикум, Жуков Р.А., 2019
- Дискретная математика для программистов, Хаггарти Р., 2003
- Стандартная библиотека Python 3, справочник с примерами, Хеллман Д., 2019
- Грокаем глубокое обучение, Траск Э., 2019
- Head First, Программирование для Android, Гриффитс Д., 2018