На Горох
Информатика, 10 класс

§ 26. Типовые задачи обработки массивов

"Информатика (базовый уровень)", Семакин И.Г., Хеннер Е.К., Шеина Т.Ю.

Объяснение темы В оглавлении: § 26. Типовые задачи обработки массивов

Кратко о теме

Массив хранит набор однотипных значений, к которым обращаются по индексам. Он нужен, когда данные удобно обрабатывать как последовательность: например, найти сумму оценок, наибольшее число или количество элементов, подходящих под условие. Основа большинства таких задач — перебор массива, то есть последовательное обращение к каждому элементу. Важно правильно выбрать начальные значения и границы цикла, а перед вычислением среднего или поиском первого элемента проверить, что массив не пуст.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Массив — упорядоченная последовательность однотипных элементов, доступных по индексам. В программе ему дают имя, а значения размещают в ячейках, которые можно последовательно просматривать и изменять. Массив удобен, когда требуется хранить и обрабатывать много однотипных данных: например, оценки учеников или результаты измерений.

Элемент массива — отдельное значение, входящее в эту последовательность. Чтобы обратиться к нему, указывают имя массива и индекс: например, запись a[i] означает элемент массива a с индексом i. Такое обращение позволяет использовать конкретное значение в вычислении или проверять его условием.

Индекс массива — целое число, указывающее положение элемента. Диапазон индексов определяется языком программирования и способом объявления массива: начало нумерации может различаться. Поэтому перед циклом нужно выяснить, какие значения индекса соответствуют первому и последнему элементам.

Перебор массива — последовательное обращение к его элементам, обычно с помощью цикла. На каждом шаге алгоритм получает очередное значение и выполняет с ним нужное действие. Перебор лежит в основе многих задач, потому что результат часто нельзя получить, не проверив все элементы.

Как это устроено

Обработку массива обычно начинают с перебора, потому что условие задачи может относиться к любому его элементу. Цикл последовательно задаёт допустимые индексы: от первого до последнего, не выходя за границы массива. Если элементов n и индексация начинается с нуля, обычно перебирают индексы от 0 до n − 1; при нумерации с единицы — от 1 до n.

Сумму находят с помощью накопителя — переменной, которая хранит промежуточный результат. Перед циклом в неё записывают 0, а при обработке каждого элемента прибавляют его значение: sum = sum + a[i]. Ноль выбран потому, что он не меняет результат сложения, поэтому первый элемент попадёт в сумму без лишней поправки.

Среднее арифметическое получают делением найденной суммы на количество элементов: average = sum / n. Размер массива n известен, поэтому отдельный подсчёт его элементов не нужен. Если n равно нулю, деление невозможно, а у пустого массива нет среднего; такой случай нужно проверить до вычисления.

Максимум или минимум определяют сравнением элементов. Начальное значение удобно взять из первого элемента непустого массива: тогда каждый следующий элемент сравнивается с настоящим значением из данных. Если же произвольно начать, например, с нуля, алгоритм может дать неверный ответ для массива, где все значения отрицательные или все положительные.

Количество элементов, удовлетворяющих условию, хранят в счётчике. Его начинают с нуля и увеличивают на единицу только тогда, когда текущий элемент проходит проверку, например a[i] ≥ порога. Счётчик отвечает на вопрос «сколько?», а накопитель суммы складывает сами значения; при необходимости оба результата обновляют в одном цикле.

Типовые задачи обработки массива и основные приёмы

ЗадачаЧто хранится в промежуточной переменнойНачальное значениеДействие при обработке элемента
Нахождение суммы элементовТекущая сумма0Прибавить очередной элемент
Вычисление среднего арифметическогоСумма элементов0Прибавить очередной элемент; после цикла разделить сумму на размер массива
Поиск максимального или минимального элементаЛучшее найденное значениеПервый элемент непустого массиваЗаменить сохранённое значение, если текущий элемент больше или меньше
Подсчёт элементов, удовлетворяющих условиюКоличество подходящих элементов0Увеличить счётчик на 1, если условие выполнено

В таблице указано, что именно нужно хранить до получения окончательного ответа и как обновлять это значение при каждом шаге. Перед запуском цикла проверь, подходит ли начальное значение для выбранной операции и непуст ли массив, если требуется первый элемент. Несколько переменных можно обновлять в одном переборе, если задача требует получить несколько результатов.

Разбор задач

Задача 1. Дан массив целых чисел. Найти сумму его элементов. Поскольку сумма зависит от каждого значения, нужно пройти массив полностью, а не ограничиваться первым или последним элементом. Для промежуточного результата заведём переменную sum.

  1. Перед циклом присвоим sum значение 0, чтобы в ответ не попало постороннее слагаемое.
  2. Последовательно переберём все допустимые индексы массива.
  3. На каждом шаге прибавим текущий элемент: sum = sum + a[i]. После последнего шага накопитель содержит сумму всех элементов.

Ответ: сумма элементов равна значению sum после завершения цикла. Если массив пуст, сумма по принятому соглашению равна нулю, но конкретное условие задачи может требовать отдельно сообщить об отсутствии данных.

Задача 2. Дан массив оценок. Найти средний балл и количество оценок не ниже заданного порога. Оба результата можно получить за один проход: каждую оценку нужно включить в сумму, а для счётчика дополнительно проверить условие. Пусть число оценок равно n, а порог обозначен p.

  1. Перед перебором зададим sum = 0 и count = 0.
  2. Для каждой оценки a[i] увеличим сумму на её значение. Если a[i] ≥ p, увеличим count на единицу.
  3. После цикла проверим, что n больше нуля, и вычислим средний балл как sum / n. Счётчик уже содержит количество оценок не ниже порога.

Ответ: средний балл равен sum / n, число оценок не ниже порога равно count. Например, оценки 4, 5 и 3 при пороге 4 дают сумму 12, среднее 4 и счётчик 2. При пустом массиве среднее не вычисляют.

Задача 3. Дан массив целых чисел. Найти максимальный элемент и количество элементов, равных ему. Сначала нужно узнать само максимальное значение, а затем посчитать, сколько раз оно встречается. Второй проход полезен тем, что максимум может встретиться в массиве несколько раз.

  1. Проверим, что массив непуст, и положим max = a[первый индекс].
  2. Переберём элементы и заменим max текущим значением, если оно больше сохранённого.
  3. Обнулим count и ещё раз переберём массив. Каждый раз, когда a[i] равно max, увеличим count на единицу.

Ответ: max — наибольший элемент, count — число его вхождений. Повторный подсчёт нужен, потому что простое обновление максимума не сохраняет сведения о том, сколько раз значение встретилось.

Типичные ошибки

Если максимум или минимум изначально равен нулю, результат может оказаться неверным: например, ноль больше любого числа в массиве, состоящем только из отрицательных значений. Такую ошибку допускают, принимая удобное число за универсальную начальную границу. Задай начальное значение первым элементом непустого массива и проверь алгоритм на наборе отрицательных чисел.

Неверные границы цикла приводят к тому, что первый или последний элемент пропускается либо программа обращается за пределы массива. Причина часто в путанице между размером массива и индексом последнего элемента: при нумерации с нуля последний индекс равен n − 1. Проверь, что цикл охватывает ровно n индексов и обращение к каждому из них допустимо.

Если перед обработкой не обнулить сумму или счётчик, переменная сохранит результат предыдущего вычисления. Это происходит, когда накопитель объявляют один раз и затем используют повторно. Перед каждым новым запуском алгоритма присвой сумме и счётчику начальные значения и проверь, что результат не зависит от прежнего содержимого переменных.

Деление суммы на количество элементов без проверки размера массива вызывает ошибку при пустом массиве. Её допускают, когда формулу среднего сразу переносят в программу, не рассматривая крайний случай. До деления проверь, что количество элементов больше нуля, и отдельно определи, какое сообщение или действие требуется при отсутствии данных.

Связь с другими темами

Для обработки массива нужны знания о самом массиве и индексе элемента: они объясняют, где находятся данные и как обратиться к каждому значению. Цикл организует повторение действий, а условный оператор позволяет выбирать элементы по заданному признаку. Поэтому перед составлением алгоритма полезно уверенно пользоваться всеми этими понятиями.

Перебор и накопление результатов встречаются не только при работе с одномерными последовательностями. Эти приёмы применяют при обработке таблиц и поиске нужных данных, а также используют как основу более сложных алгоритмов. Например, перед сортировкой часто требуется уметь сравнивать элементы и находить нужные значения.

Что запомнить

  • Большинство простых задач обработки массива решается перебором его элементов.
  • Сумму накапливают, начиная с нуля.
  • Счётчик увеличивают только тогда, когда текущий элемент удовлетворяет условию.
  • Максимум и минимум удобно первоначально считать равными первому элементу непустого массива.
  • Среднее арифметическое равно сумме элементов, делённой на их количество.
  • Перед обработкой нужно проверить, что массив не пуст, если алгоритму требуется его первый элемент.

Частые вопросы по теме

Почему сумму начинают накапливать с нуля?

Ноль — нейтральное значение для сложения: прибавление к нему первого элемента даёт сам этот элемент. Если взять другое начальное значение, оно ошибочно попадёт в итоговую сумму.

Как правильно задать начальное значение максимума?

Для непустого массива начальный максимум задают равным его первому элементу. Так алгоритм работает и тогда, когда все числа отрицательные, и не зависит от произвольной границы.

Чем счётчик отличается от накопителя суммы?

Счётчик хранит количество подходящих элементов и обычно увеличивается на единицу при выполнении условия. Накопитель суммы хранит результат сложения значений элементов.

Можно ли за один перебор найти сумму и посчитать подходящие элементы?

Да. В цикле можно одновременно прибавлять каждый элемент к сумме и увеличивать счётчик, если элемент удовлетворяет условию. Для этих результатов используют отдельные переменные.

Что делать, если массив пуст?

Нужно проверить размер массива до начала вычислений. Для пустого массива нельзя делить сумму на количество элементов или обращаться к первому элементу; следует обработать этот случай отдельно.

Спросить по теме параграфа

§ 26. Типовые задачи обработки массивов

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (базовый уровень)", Семакин И.Г., Хеннер Е.К., Шеина Т.Ю.