Практика по алгоритмам
УБЕДИ МЕНЯ ЧТО МНЕ ЭТО НАДО!
Заголовок раздела «УБЕДИ МЕНЯ ЧТО МНЕ ЭТО НАДО!»Программирование в проектах любой сложности всегда включает анализ и решение задач. Для решения задач необходимо выявление алгоритма решения и его реализация в программе. Для эффективного выполнения этого нужно натренировать определенный ход мышления, называемый алгоритмическим мышлением.
Несмотря на то, что простые задачи могут показаться нереалистичными (“ну кто будет суммировать массив чисел в реальном мире? есть же уже встроенная функция для этого!”) их решение тренирует то самое алгоритмическое мышление.
Анализ и решение простых задач поможет вам развить высокоуровневое мышление, которое заключается в понимании абстракций без необходимости вспоминать базовые ее составляющие. Это эссенциальный навык как для решения более сложных задач, так и для эффективного понимания и использования уже существующих решений.
Цель данной работы научиться:
- анализировать и понимать задачу;
- разбить задачу на подзадачи, подзачачи на еще меньшие подзадачи;
- разработать алгоритм: уметь логически вывести и объяснить каждый шаг алгоритма исходя из условий задачи;
- уметь представить условия задачи в программе, правильно определить структуры данных и интерфейс;
- уметь представить шаги алгоритма в инструкциях программы.
Все это необходимо научится делать достаточно быстро на простых задачах.
В идеале, элементарные операции и инструкции из кода у вас должны быть интуитивно эквивалентны, то есть вы должны сразу понимать операцию, глядя на синтаксис языка программирования, без размышлений или поиска примеров синтаксиса, и наоборот, уметь преобразовать словесное описание операции в код.
Практическое задание с объяснением
Заголовок раздела «Практическое задание с объяснением»- Сделайте функцию которая попарно перемножает числа из 2 массивов, записывая результат в 1-ый массив.
Какой будет интерфейс?
Нужно принять первый и второй массив параметром. В первый мы также будем вписывать ответ.
Возвращаемый тип void, потому что возвращение происходит как побочный эффект,
путем вписывания в массив первого параметра.
Функция не возвращает никакого значения как результат.
void product(std::span<int> inputOutput, std::span<int> coefficients){}Можно также сделать второй параметр константой, потому что элементы массива не будут перезаписываться.
void product(std::span<int> inputOutput, std::span<const int> coefficients){}- Убедитесь в ней в том, что спаны одинаковой длины, используя
assert.
Как?
assert(inputOutput.size() == coefficients.size());-
Реализуйте версию с бесконечным циклом, используя
breakвручную. -
Реализуйте версию с циклом
whileс условием. -
Реализуйте версию с циклом
for.
Еще практика
Заголовок раздела «Еще практика»Если не чувствуете себя достаточно уверенно, попрактикуйтесь с разными алгоритмами, например:
- Подсчет, сколько чисел в массиве больше, чем 5;
- Поиск максимального значения в массиве;
- Поиск двух наибольших значений в массиве;
- Генерирование первых
nпростых чисел; - Подсчет чисел Фиббоначи;
- и так далее.
Можете практиковаться на простых задачах на LeetCode