Перебор массива: сумма, среднее, счёт
Один проход по массиву решает сразу три классические задачи: сумму, среднее и подсчёт нужных элементов.
Перебор массива — это цикл, который по очереди берёт каждый элемент от первого до последнего, а в специальной переменной-накопителе копит общий результат.
Почти любая задача ОГЭ на массивы сводится к одному и тому же скелету: завести переменную, пройти по всем элементам и на каждом шаге что-то с ней сделать. Меняется только «что именно делать» — складывать, считать или сравнивать. Если разобрать этот скелет один раз, дальше остаётся подставлять детали. Поэтому перебор — самый важный приём раздела, на нём держится всё остальное.
Зачем это нужно
На экзамене массив — это, например, оценки класса, температуры за месяц или результаты забега. Вопросы всегда похожие: «какая сумма», «какое среднее», «сколько значений больше порога». Все они решаются перебором с накопителем. Научившись писать этот цикл уверенно, вы закрываете целый пласт заданий и почти не делаете ошибок на единицах-индексах.
Накопитель: сумма элементов
Накопитель — это переменная, в которой постепенно собирается ответ. Для суммы её заводят равной нулю до цикла, а внутри прибавляют текущий элемент. Обозначим массив $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$: та же сумма, делённая на количество с дробной частью.
- Счётчик копит единицы по условию — так считают «сколько элементов больше/меньше/равно».
- За один проход можно получить сразу несколько ответов — заводите несколько накопителей в одном цикле.