Загрузка данных


#include <iostream>
#include <vector>
#include <iomanip> // Для красивого вывода

using namespace std;

// Структура для возврата двух значений из функции
struct Averages {
    double topRight;
    double bottomLeft;
};

// Функция вычисления среднего арифметического заштрихованных областей
Averages calculateAverages(const vector<vector<int>>& matrix) {
    int n = matrix.size();
    if (n == 0) return {0.0, 0.0};
    int m = matrix[0].size();

    // Определяем границы четвертей
    int midRow = n / 2;
    int midCol = m / 2;

    // Переменные для сумм и количества элементов
    long long sumTopRight = 0;
    int countTopRight = 0;

    long long sumBottomLeft = 0;
    int countBottomLeft = 0;

    // Проходим по всей матрице
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            
            // Проверяем: находится ли элемент в ВЕРХНЕЙ ПРАВОЙ области
            // Условие: строка в верхней половине И столбец в правой половине
            if (i < midRow && j >= midCol) {
                sumTopRight += matrix[i][j];
                countTopRight++;
            }
            
            // Проверяем: находится ли элемент в НИЖНЕЙ ЛЕВОЙ области
            // Условие: строка в нижней половине И столбец в левой половине
            // (Обратите внимание: для нечетных размеров остаток от деления 
            // лучше отнести к одной из областей, здесь мы используем строгое деление)
            else if (i >= midRow && j < midCol) {
                sumBottomLeft += matrix[i][j];
                countBottomLeft++;
            }
        }
    }

    Averages result;
    
    // Вычисляем среднее (с защитой от деления на ноль, если матрица слишком мала)
    result.topRight = (countTopRight > 0) ? (double)sumTopRight / countTopRight : 0.0;
    result.bottomLeft = (countBottomLeft > 0) ? (double)sumBottomLeft / countBottomLeft : 0.0;

    return result;
}

int main() {
    // Пример: матрица 4x4 (чтобы удобно делилась на 4 части)
    // N = 4, M = 4
    vector<vector<int>> matrix = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
        {13, 14, 15, 16}
    };

    cout << "Исходная матрица:" << endl;
    for (const auto& row : matrix) {
        for (int val : row) {
            cout << setw(4) << val;
        }
        cout << endl;
    }

    // Вызов функции
    Averages avg = calculateAverages(matrix);

    cout << "\nРезультаты:" << endl;
    cout << "Среднее арифметическое верхней заштрихованной области (правый верх): " << avg.topRight << endl;
    cout << "Среднее арифметическое нижней заштрихованной области (левый низ): " << avg.bottomLeft << endl;

    return 0;
}