C++ квадратная матрица порядка N

Рейтинг: -2Ответов: 1Опубликовано: 28.01.2023

результат такой...Дано квадратная матрица порядка N. (задать ее динамически).

Поменять местами колонку, в которой находится максимальный элемент матрицы с колонкой, в которой находится минимальный элемент матрицы. Если номера столбцов совпадают, вывести соответствующее сообщение. Найти в каждом столбце сумму всех четных элементов, записать эти суммы в отдельный массив и вывести его на экран. Упорядочить элементы каждой строки по возрастанию методом быстрой сортировки. Помогите поправить код

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main() {
    setlocale(LC_ALL, "RUS");
    // Размер матрицы
    int n;
    cout << "Введите размер матрицы:";
    cin >> n;
    // Выделение динамической памяти для матрицы
    int** matrix = new int* [n];
    for (int i = 0; i < n; i++) {
        matrix[i] = new int[n];
    }
    // Ввод элементов матрицы
cout << "Введите элементы матрицы:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }
    // Поиск столбца с максимальный и минимальным элементом матицы
    int max_col = 0, min_col = 0;
    int max_elem = matrix[0][0], min_elem = matrix[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] > max_elem) {
                max_elem = matrix[i][j];
                max_col = j;
            }
            if (matrix[i][j] < min_elem) {
                min_elem = matrix[i][j];
                min_col = j;

            }
        }
    }
// Поменять местами столбцы в которых находится минимальный и максимальный элемент матрицы
    if (max_col != min_col) {
        for (int i = 0; i < n; i++) {
            swap(matrix[i][max_col], matrix[i][min_col]);
        }
    }
    else {
        cout << "Максимальные и минимальные элементы находятся в одном столбце" << endl;
    }
    // Найти сумму всех четных элементов в кадом столбце
    int* sums = new int[n];
    for (int j = 0; j < n; j++) {
        sums[j] = 0;
        for (int i = 0; i < n; i++) {
            if (matrix[i][j] % 2 == 0) {
                sums[j] += matrix[i][j];
            }
        }
    }
// Вывод суммы четных элементов
    cout << "Суммы четных элементов в каждом столбце: ";
    for (int j = 0; j < n; j++) {
        cout << sums[j] << " ";

    }
    cout << endl;
    // Сортировка элементов методом быстрой сортировки
    for (int i = 0; i < n; i++) {
        sort(matrix[i], matrix[i] + n);
    }
     cout << "Отсортированная матрица:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
            // Освобождение памяти матрицы
            for (int i = 0; i < n; i++) {
                delete[] matrix[i];
 }
            delete[] matrix;
            // Освобождения памяти для массива сумм
            delete[] sums;
            return 0;

        }
    }
}

Ответы

▲ 1

Но у тебя странно сортирует - построчно, а не всю матрицу.

int main() {
    setlocale(LC_ALL, "RUS");
    // Размер матрицы
    int n;
    cout << "Введите размер матрицы:";
    cin >> n;
    // Выделение динамической памяти для матрицы
    int** matrix = new int*[n];
    for (int i = 0; i < n; i++) {
        matrix[i] = new int[n];
    }
    // Ввод элементов матрицы
    cout << "Введите элементы матрицы:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }
    // Поиск столбца с максимальным и минимальным элементом матрицы
    int max_col = 0, min_col = 0;
    int max_elem = matrix[0][0], min_elem = matrix[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] > max_elem) {
                max_elem = matrix[i][j];
                max_col = j;
            }
            if (matrix[i][j] < min_elem) {
                min_elem = matrix[i][j];
                min_col = j;
            }
        }
    }
    // Поменять местами столбцы в которых находится минимальный и максимальный элемент матрицы
    if (max_col != min_col) {
        for (int i = 0; i < n; i++) {
            swap(matrix[i][max_col], matrix[i][min_col]);
        }
    }
    else {
        cout << "Максимальные и минимальные элементы находятся в одном столбце" << endl;
    }
    // Найти сумму всех четных элементов в каждом столбце
    int* sums = new int[n];
    for (int j = 0; j < n; j++) {
        sums[j] = 0;
        for (int i = 0; i < n; i++) {
            if (matrix[i][j] % 2 == 0) {
                sums[j] += matrix[i][j];
            }
        }
    }
    // Вывод суммы четных элементов
    cout << "Суммы четных элементов в каждом столбце: ";
    for (int j = 0; j < n; j++) {
        cout << sums[j] << " ";

    }
    cout << endl;
    cout << "Несортированная матрица:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << "\n";
    }
    cout << endl;
    // Сортировка элементов методом быстрой сортировки
    for (int i = 0; i < n; i++) {
        sort(matrix[i], matrix[i] + n);
    }
    cout << "Отсортированная матрица:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << "\n";
    }

    // Освобождение памяти матрицы
    for (int i = 0; i < n; i++) {
        delete[] matrix[i];
    }
    delete[] matrix;

    // Освобождение памяти для массива сумм
    delete[] sums;

    return 0;
}