Среднее значение массива в Python, C++, JavaScript и C

Условие задачи
Дан массив arr. Нужно вычислить среднее значение элементов массива.
Примеры:
Пример 1: arr = [1, 2, 3, 4, 5, 6, 7, 8] Среднее = (1+2+3+4+5+6+7+8) / 8 = 4.5
Пример 2: arr = [1, 1, 1, 1, 1, 1] Среднее = (1+1+1+1+1+1) / 6 = 1
Формула:
Среднее = (сумма всех элементов) / (количество элементов)
Подход к решению
Короткая проверенная последовательность действий:
- Проверить, не пуст ли массив; для пустого массива решить, что возвращать (NaN, 0 или исключение).
- Инициализировать суммирующую переменную (в подходящем типе, чтобы минимизировать риск переполнения).
- Пройти по всем элементам и накопить сумму.
- Вернуть сумму, делённую на количество элементов (обеспечить вещественное деление при необходимости).
Важно: при работе с целыми числами и большими массивами используйте типы с большей вместимостью (long long, double) или аккумулируйте в плавающей точке.
Примеры кода
C++
// C++ program to find the mean of an array
#include
#include
using namespace std;
// Используем double для точности и уменьшения риска переполнения при суммировании
double calculateMean(const int arr[], int size) {
if (size == 0) return 0.0; // или можно бросить исключение
long long sum = 0; // аккумулируем в большом целочисленном типе
for (int i = 0; i < size; ++i) {
sum += arr[i];
}
return static_cast(sum) / size;
}
void printArrayElements(const int arr[], int size) {
for (int i = 0; i < size; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
cout << "Array 1:" << endl;
printArrayElements(arr1, size1);
cout << "Mean of the array: " << calculateMean(arr1, size1) << endl;
int arr2[] = {1, 1, 1, 1, 1, 1};
int size2 = sizeof(arr2) / sizeof(arr2[0]);
cout << "Array 2:" << endl;
printArrayElements(arr2, size2);
cout << "Mean of the array: " << calculateMean(arr2, size2) << endl;
return 0;
} Вывод (пример):
Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1
Mean of the array: 1Python
# Python program to find the mean of an array
def calculateMean(arr):
size = len(arr)
if size == 0:
return 0.0 # можно вернуть None или бросить исключение
sumOfElements = 0
for x in arr:
sumOfElements += x
return sumOfElements / size
def printListElements(arr):
for x in arr:
print(x, end=" ")
print()
arr1 = [1, 2, 3, 4, 5, 6, 7, 8]
print("Array 1:")
printListElements(arr1)
print("Mean of the array:", calculateMean(arr1))
arr2 = [1, 1, 1, 1, 1, 1]
print("Array 2:")
printListElements(arr2)
print("Mean of the array:", calculateMean(arr2))Вывод (пример):
Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1
Mean of the array: 1.0Совет: в Python можно использовать sum(arr)/len(arr) напрямую, но проверяйте len(arr) == 0.
JavaScript
// JavaScript program to find the mean of an array
function calculateMean(arr) {
const size = arr.length;
if (size === 0) return 0; // или NaN
let sumOfElements = 0;
for (let i = 0; i < size; i++) {
sumOfElements += arr[i];
}
return sumOfElements / size;
}
function printArrayElements(arr) {
console.log(arr.join(' '));
}
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
console.log('Array 1:');
printArrayElements(arr1);
console.log('Mean of the array: ' + calculateMean(arr1));
const arr2 = [1, 1, 1, 1, 1, 1];
console.log('Array 2:');
printArrayElements(arr2);
console.log('Mean of the array: ' + calculateMean(arr2));Вывод (пример):
Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1
Mean of the array: 1C
// C program to find the mean of an array
#include
float calculateMean(int arr[], int size) {
if (size == 0) return 0.0f; // или обработать как ошибку
long long sumOfElements = 0;
for (int i = 0; i < size; i++) {
sumOfElements += arr[i];
}
return (float)sumOfElements / (float)size;
}
void printArrayElements(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
printf("Array 1:\n");
printArrayElements(arr1, size1);
printf("Mean of the array: %f\n", calculateMean(arr1, size1));
int arr2[] = {1, 1, 1, 1, 1, 1};
int size2 = sizeof(arr2) / sizeof(arr2[0]);
printf("Array 2:\n");
printArrayElements(arr2, size2);
printf("Mean of the array: %f\n", calculateMean(arr2, size2));
return 0;
} Вывод (пример):
Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.500000
Array 2:
1 1 1 1 1 1
Mean of the array: 1.000000Пограничные случаи и ошибки
- Пустой массив: заранее решите поведение — возвращать 0, NaN или бросать исключение. Документируйте выбор.
- Переполнение при суммировании: при больших числах аккумулируйте в типе большего размера (long long, double) или используйте Kahan summation для вещественных чисел.
- Не числовые элементы: проверяйте типы или фильтруйте данные заранее.
- Погрешности с плавающей точкой: при суммировании большого количества чисел порядок суммирования влияет на точность.
Альтернативные подходы
- Использовать встроенные функции: Python sum()/len(), C++ std::accumulate из
, JavaScript reduce. - Инкрементальное вычисление среднего (online mean): полезно для потоков данных. Формула: mean{n} = mean{n-1} + (xn - mean{n-1})/n
- Для больших наборов данных — вычислять среднее по блокам и усреднять результаты для снижения риска переполнения.
Модель мышления (heuristic)
- «Сумма / количество» — базовая мысль.
- Всегда сначала подумайте о типе данных и возможном переполнении.
- Для потоков — используйте инкрементальную формулу.
Сложность и факт-бокс
- Временная сложность: O(n)
- Память: O(1) (без учёта входного массива)
- Рекомендация по типам: используйте 64-битные целые или double для накопления при неограниченных значениях.
Тесты и критерии приёмки
Критерии приёмки:
- Правильно считает среднее для позитивных и отрицательных чисел.
- Обрабатывает пустой массив согласно спецификации (тест на ожидаемое поведение).
- Не теряет корректность для больших сумм (проверка на переполнение).
Минимальные тест-кейсы:
- Обычный набор: [1,2,3,4,5] → 3.0
- Все одинаковые: [7,7,7] → 7.0
- Включает отрицательные: [-1, 1] → 0.0
- Пустой: [] → поведение по спецификации
- Большие числа: [INT_MAX, INT_MAX] → проверка на переполнение
Чеклист по ролям
- Разработчик: покрыть функцию тестами, выбрать поведение для пустого массива.
- Тестировщик: добавить крайние случаи и тесты на переполнение.
- Архитектор: выбрать представление и формат ошибок/исключений.
Диаграмма принятия решения
flowchart TD
A[Есть массив?] --> B{Длина массива == 0}
B -- Да --> C[Вернуть 0 / NaN / ошибка по схеме]
B -- Нет --> D[Суммировать элементы]
D --> E{Потенциальное переполнение?}
E -- Да --> F[Использовать 64-бит или блоковую агрегацию]
E -- Нет --> G[Вычислить среднее как sum/size]
F --> G
G --> H[Готово]Краткое резюме
Среднее массива вычисляется просто, но надёжная реализация требует учёта пустых массивов, переполнения и погрешностей с плавающей точкой. Используйте встроенные функции, если они доступны, или инкрементные алгоритмы для потоков.
Важно: документируйте ожидаемое поведение для пустого входа и добавьте тесты на крайние случаи.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты