Перебор массива: сумма, среднее, счёт

Один проход по массиву решает сразу три классические задачи: сумму, среднее и подсчёт нужных элементов.

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

Почти любая задача ОГЭ на массивы сводится к одному и тому же скелету: завести переменную, пройти по всем элементам и на каждом шаге что-то с ней сделать. Меняется только «что именно делать» — складывать, считать или сравнивать. Если разобрать этот скелет один раз, дальше остаётся подставлять детали. Поэтому перебор — самый важный приём раздела, на нём держится всё остальное.

Зачем это нужно

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

Накопитель: сумма элементов

Накопитель — это переменная, в которой постепенно собирается ответ. Для суммы её заводят равной нулю до цикла, а внутри прибавляют текущий элемент. Обозначим массив $a$ из $n$ элементов с индексами от $0$ до $n-1$. Тогда сумма — это

$$ S = \sum_{i=0}^{n-1} a_i = a_0 + a_1 + \dots + a_{n-1}. $$

Знак $\sum$ («сигма») в школьной программе как раз и означает «сложи всё подряд». Цикл — это буквальный перевод этой формулы на язык шагов. Псевдокод и блок-схема выглядят так:

сумма <- 0
для i от 0 до n-1:
    сумма <- сумма + a[i]
вывести сумма

[Начало]
   |
[сумма := 0;  i := 0]
   |
  /сделать i < n ?/ --нет--> [вывести сумма] -> [Конец]
   | да
[сумма := сумма + a[i]]
   |
[i := i + 1] --(назад к проверке)

Ключевая идея блок-схемы: ромб-условие i < n стоит перед телом цикла, а стрелка «да» возвращается к нему после увеличения i. Это цикл с предусловием — ровно тот, что вы проходили в азах циклов, только теперь внутри живёт массив.

Среднее арифметическое

Среднее — это сумма, делённая на количество. Считать отдельным циклом её не нужно: накапливаем сумму тем же перебором, а в конце делим на $n$:

$$ \bar{a} = \frac{1}{n}\sum_{i=0}^{n-1} a_i = \frac{S}{n}. $$

Единственная тонкость — деление должно быть с дробной частью. Среднее оценок $4, 5, 3, 5$ равно $\frac{17}{4} = 4{,}25$, а не $4$. В Python для этого служит обычный оператор / (он всегда даёт дробь), а в задачах с целочисленным делением легко потерять остаток.

Подсчёт элементов по условию

Третья типовая задача — посчитать, сколько элементов удовлетворяют условию (например, оценок не ниже $4$). Здесь накопитель называют счётчиком: он тоже стартует с нуля, но прибавляет не значение элемента, а единицу — и только когда условие выполнено. Формально, с индикаторной записью:

$$ K = \sum_{i=0}^{n-1} [\,a_i \ge 4\,], $$

где квадратные скобки дают $1$, если условие истинно, и $0$ иначе. На псевдокоде это просто если a[i] >= 4: счёт := счёт + 1 внутри того же цикла.

Как это работает

Соберём всё в один рабочий пример: по списку оценок посчитаем сумму, среднее и число пятёрок за один проход.

ocenki = [4, 5, 3, 5, 4, 2, 5]

summa = 0      # накопитель суммы
schet = 0      # счётчик пятёрок
for x in ocenki:
    summa = summa + x
    if x == 5:
        schet = schet + 1

srednee = summa / len(ocenki)

print("Сумма:", summa)
print("Среднее:", round(srednee, 2))
print("Пятёрок:", schet)

Вывод:

Сумма: 28
Среднее: 4.0
Пятёрок: 3

Здесь цикл for x in ocenki на каждом шаге кладёт в x очередную оценку, поэтому индексы можно не трогать вовсе — это удобный «питоновский» способ перебора. Накопитель и счётчик меняются независимо, но в одном цикле, и за один проход по массиву мы получили сразу три ответа. Проверим арифметику: $4+5+3+5+4+2+5 = 28$, делим на $7$ элементов — получаем ровно $4{,}0$, а пятёрок три. Всё сходится с формулами выше.

Частые ошибки

  • Накопитель внутри цикла. Если написать summa = 0 внутри цикла, он обнуляется на каждом шаге, и в конце останется лишь последний элемент. Инициализация — всегда до цикла.
  • Деление на ноль. Среднее пустого массива не определено: при $n = 0$ деление падает. На экзамене такой случай обычно оговаривают отдельно, но привычка проверять размер полезна.
  • Целочисленное деление. В языках, где / для целых отбрасывает дробь, среднее $4{,}25$ превратится в $4$. Следите за типом: для среднего нужна дробь.
  • Путаница суммы и счёта. Для суммы прибавляют a[i], для подсчёта — 1. Это разные накопители; не складывайте значения там, где надо считать количество.

Итоги

  • Перебор массива — это цикл с предусловием, в котором переменная-накопитель копит результат по всем элементам.
  • Сумма $S = \sum a_i$: накопитель стартует с $0$ и прибавляет a[i].
  • Среднее $\bar a = S/n$: та же сумма, делённая на количество с дробной частью.
  • Счётчик копит единицы по условию — так считают «сколько элементов больше/меньше/равно».
  • За один проход можно получить сразу несколько ответов — заводите несколько накопителей в одном цикле.
Проверьте себя
1. Чему должен быть равен накопитель суммы ДО начала цикла перебора массива?
A0
BПервому элементу массива a[0]
CКоличеству элементов n
D1
2. Чем счётчик (подсчёт элементов по условию) отличается от накопителя суммы?
AСчётчик прибавляет 1 при выполнении условия, а сумма прибавляет сам элемент
BСчётчик инициализируют единицей, а сумму нулём
CСчётчик работает без цикла
DНикакой разницы нет