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


#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;
}