#include <iostream>
#include <vector>
#include <iomanip>
#include <locale> // Нужно для правильной кодировки
#include <windows.h> // Нужно для SetConsoleCP и SetConsoleOutputCP
using namespace std;
// Структура для возврата двух значений из функции
struct СредниеЗначения {
double верхняяОбласть;
double нижняяОбласть;
};
// Функция вычисления среднего арифметического заштрихованных областей
СредниеЗначения вычислитьСредние(const vector<vector<int>>& матрица) {
int n = матрица.size();
if (n == 0) return {0.0, 0.0};
int m = матрица[0].size();
// Определяем границы четвертей
int серединаСтрок = n / 2;
int серединаСтолбцов = m / 2;
// Переменные для сумм и количества элементов
long long суммаВерх = 0;
int количествоВерх = 0;
long long суммаНиз = 0;
int количествоНиз = 0;
// Проходим по всей матрице
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// Проверяем: находится ли элемент в ВЕРХНЕЙ ПРАВОЙ области
if (i < серединаСтрок && j >= серединаСтолбцов) {
суммаВерх += матрица[i][j];
количествоВерх++;
}
// Проверяем: находится ли элемент в НИЖНЕЙ ЛЕВОЙ области
else if (i >= серединаСтрок && j < серединаСтолбцов) {
суммаНиз += матрица[i][j];
количествоНиз++;
}
}
}
СредниеЗначения результат;
// Вычисляем среднее
результат.верхняяОбласть = (количествоВерх > 0) ? (double)суммаВерх / количествоВерх : 0.0;
результат.нижняяОбласть = (количествоНиз > 0) ? (double)суммаНиз / количествоНиз : 0.0;
return результат;
}
int main() {
// === ИСПРАВЛЕНИЕ КОДИРОВКИ ===
// Устанавливаем кодировку для ввода и вывода в консоль Windows
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
// =============================
// Пример: матрица 4x4
vector<vector<int>> матрица = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
cout << "Исходная матрица:" << endl;
for (const auto& строка : матрица) {
for (int значение : строка) {
cout << setw(4) << значение;
}
cout << endl;
}
// Вызов функции
СредниеЗначения средние = вычислитьСредние(матрица);
cout << "\nРезультаты:" << endl;
cout << "Среднее арифметическое верхней заштрихованной области (правый верх): " << средние.верхняяОбласть << endl;
cout << "Среднее арифметическое нижней заштрихованной области (левый низ): " << средние.нижняяОбласть << endl;
return 0;
}