"Информатика", Поляков К.Ю., Еремин Е.А.
Обработка массива — это последовательное выполнение действий над его элементами, например сложение, подсчёт или поиск нужного значения. Она нужна, когда приходится анализировать сразу целый набор данных: оценки, измерения, числа. Обычно программа проходит по массиву циклом и обращается к элементам по индексам. Для разных задач используются сумматор, счётчик, переменная для максимума или признак нахождения.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Сумма элементов массива — результат последовательного сложения всех его значений. Для её вычисления используют переменную-сумматор: в неё по очереди добавляют элементы. Такой приём позволяет получить общий итог, не создавая отдельную переменную для каждого промежуточного результата.
Количество элементов, удовлетворяющих условию, — число значений массива, для которых заданное условие истинно. Его накапливают в счётчике, увеличивая на единицу при каждом подходящем элементе. Это нужно, например, чтобы узнать, сколько оценок не ниже заданного уровня.
Максимальный элемент массива — элемент с наибольшим значением среди всех элементов. В программе хранят текущий максимум и заменяют его, если встречается большее число. Если нужно указать, где находится максимум, вместе со значением сохраняют его индекс — позицию в массиве.
Линейный поиск — последовательная проверка элементов массива на совпадение с нужным значением. Перебор заканчивают, когда значение найдено, или когда проверены все элементы. Такой поиск помогает определить, есть ли значение в массиве, и при необходимости получить индекс его первого вхождения.
Обработка начинается с перебора элементов массива циклом. На каждом шаге индекс указывает, к какому элементу обратиться, а тело цикла выполняет нужное действие. Такой порядок удобен, потому что программа применяет один и тот же алгоритм ко всем элементам, даже если их много. Границы цикла должны охватывать весь массив, иначе часть значений останется без проверки.
Для суммы сначала задают начальное значение сумматора, обычно ноль, затем прибавляют к нему очередной элемент. Ноль выбран потому, что при сложении он не изменяет сумму и не вносит постороннего слагаемого. После последнего шага в переменной окажется общий результат. Если пропустить элемент или начать перебор не с той позиции, итог будет неверным.
Чтобы подсчитать элементы по условию, программа проверяет очередное значение, например выясняет, больше ли оно заданной границы. Счётчик увеличивают только после положительного результата проверки, потому что он должен отражать число подходящих элементов, а не число всех шагов цикла. До перебора счётчик обнуляют: иначе к ответу прибавится случайное или оставшееся от предыдущих вычислений значение.
Максимум ищут сравнением элементов с текущим наибольшим значением. Вначале за максимум принимают первый элемент, а затем заменяют его каждым найденным большим значением. Такой способ не требует заранее знать, какими могут быть числа массива. Если начать, например, с нуля, алгоритм даст неправильный ответ для массива, в котором все значения отрицательные.
При линейном поиске каждый элемент сравнивают с искомым значением. Если требуется только узнать, есть ли совпадение, достаточно сохранить признак нахождения; если нужно сообщить позицию, сохраняют индекс. Поиск первого совпадения можно завершить сразу после него, поскольку дальнейшая проверка уже не изменит ответ. Если цикл закончился без совпадения, программа должна отдельно сообщить, что элемента нет.
| Задача | Что хранить | Что делать при переборе | Что получить |
|---|---|---|---|
| Найти сумму | Сумматор | Прибавлять очередной элемент | Сумму элементов |
| Подсчитать элементы по условию | Счётчик | Проверять условие и увеличивать счётчик | Количество подходящих элементов |
| Найти максимум | Текущий максимум и при необходимости индекс | Сравнивать очередной элемент с максимумом | Наибольшее значение и его позицию |
| Найти заданное значение | Признак нахождения и при необходимости индекс | Сравнивать элементы с искомым значением | Факт наличия или позицию элемента |
Сначала определите, какой результат нужен: сумма, количество, максимум или позиция найденного элемента. Затем выберите переменную для накопления результата и задайте её начальное значение. Во время перебора выполняйте соответствующее действие для каждого элемента.
Задача 1. Дан массив из пяти целых чисел. Найти сумму его элементов. Пройдём по массиву от первого элемента до пятого. Например, для чисел 4, −2, 7, 1, 3 сумма должна включить и положительные, и отрицательные значения. Удобнее складывать их постепенно, сохраняя промежуточный итог.
Ответ: сумма равна 13. В программе вместо отдельных действий выполняется цикл, который прибавляет к сумматору очередной элемент.
Задача 2. Дан массив оценок. Определить, сколько оценок не ниже заданного значения. Пусть оценки равны 3, 5, 4, 2, 5, а граница — 4. Подходящими будут значения, для которых оценка ≥ 4. Здесь важно не прибавлять к счётчику все оценки подряд, а сначала проверять каждую из них.
Ответ: не ниже 4 — три оценки. Если изменить границу, нужно повторить те же проверки с новым условием.
Задача 3. Дан массив целых чисел и число k. Найти максимум и сообщить, есть ли k; если есть — указать индекс первого такого элемента. Возьмём массив 6, −3, 8, 8, 1 и k = 8. Задачи лучше разделить: один перебор определит максимум, другой — позицию k. Предположим, что индексы начинаются с 0, как в некоторых языках программирования.
Ответ: максимум равен 8, число k найдено впервые по индексу 2. Если в используемом языке индексы начинаются с 1, позиция этого элемента будет 3.
Если максимум начинают с произвольного числа, например нуля, он может не соответствовать ни одному элементу массива. Такую начальную величину часто выбирают по привычке, не проверяя, бывают ли в данных отрицательные числа. Надёжный вариант — взять первый элемент. Самопроверка: мысленно примените алгоритм к массиву −8, −3, −10; ответом должно стать −3.
Если сумматор или счётчик не инициализировать, результат может зависеть от случайного содержимого переменной. Иногда переменную забывают обнулить перед новым перебором и получают остаток от прежних вычислений. Перед запуском цикла проверьте, каким значением начинаются накопители. Для суммы и количества это обычно 0.
Если увеличивать счётчик вне проверки условия, он будет расти при каждом шаге цикла. Тогда программа посчитает все элементы, а не только подходящие. Это происходит, когда команду увеличения ставят после проверки, но не внутрь ветви, выполняемой при истинном условии. Проверьте алгоритм на одном элементе, который условию не соответствует: счётчик не должен измениться.
Индекс и значение элемента легко перепутать, потому что оба используются при обращении к массиву. Индекс — номер позиции, а значение — содержимое этой позиции; например, при массиве 10, 20, 30 значение 20 находится по индексу 1, если нумерация начинается с нуля. Ошибка возникает, когда вместо числа выводят номер или наоборот. Для проверки спросите себя, что именно требует задача: само значение или его место в массиве.
Для обработки нужно уметь задавать одномерный массив, обращаться к элементу по индексу и перебирать элементы циклом. Без понимания индексов легко пропустить крайний элемент или обратиться за границы массива. Цикл позволяет повторять одно действие для каждого значения, а условный оператор — выбирать, какие элементы учитывать. Эти знания вместе образуют основу алгоритмов обработки данных.
Такие алгоритмы применяют при анализе наборов данных: например, при подсчёте оценок или поиске нужного измерения. Поиск помогает проверять наличие значений, а нахождение максимума и подсчёт подготавливают данные к дальнейшей обработке, в том числе к сортировке. Понимание перебора пригодится и при решении более сложных задач с массивами.
Почему сумматор обычно начинают с нуля?
Ноль не меняет результат сложения: к нему можно прибавить первый элемент, не добавляя лишнее значение. Если начать с другого числа, итоговая сумма изменится.
Как подсчитать только элементы, удовлетворяющие условию?
Перед перебором нужно обнулить счётчик. Для каждого элемента проверяют условие и увеличивают счётчик на единицу только тогда, когда оно истинно.
Почему для поиска максимума нельзя всегда начинать с нуля?
Если все числа массива отрицательные, ноль окажется больше каждого из них, хотя в массиве его может не быть. Надёжнее принять за максимум первый элемент массива и сравнивать с ним остальные.
Чем индекс элемента отличается от его значения?
Индекс показывает место элемента в массиве, а значение — число, которое хранится на этом месте. Например, если в ячейке с индексом 2 хранится число 15, индекс равен 2, а значение — 15.
Что должна сделать программа, если искомого элемента нет?
Она должна сообщить, что значение не найдено, а не выводить несуществующую позицию. Для этого используют признак нахождения или специальное значение индекса, например −1.
§ 20. Обработка массивов