Вопрос задан 26.10.2026 в 08:59. Предмет Информатика. Спрашивает Кичигин Владислав.

Напишите программу обработки двумерного массива.
Дана целочисленная квадратная матрица. Определите:
a) Сумму элементов в тех столбцах, которые не содержат отрицательных элементов (оформить в виде функции).
b) Минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы (функция).

Перейти к ответам

Ответы на вопрос

Отвечает Ростовский Ваня.

Для решения задачи напишем программу на C++, которая обрабатывает целочисленную квадратную матрицу размером N×NN \times N.

Необходимо выполнить два действия:

а) Найти сумму элементов тех столбцов матрицы, в которых отсутствуют отрицательные числа. Вычисление оформить в виде отдельной функции.

б) Найти минимальную сумму модулей элементов среди всех диагоналей, параллельных побочной диагонали. Вычисление также оформить в виде функции.

1. Программа на C++

C++
#include 
#include 
#include 
#include 
#include 

using namespace std;

// а) Сумма элементов столбцов без отрицательных чисел long long sumColumns(const vector<vector<int>>& a, int n) { long long total = 0;

for (int j = 0; j < n; j++) { bool hasNegative = false; long long sum = 0;

for (int i = 0; i < n; i++) { if (a[i][j] < 0) { hasNegative = true; break; } sum += a[i][j]; }

if (!hasNegative) { total += sum; } }

return total; }

// б) Минимальная сумма модулей элементов диагоналей, // параллельных побочной диагонали long long minDiagonalSum(const vector<vector<int>>& a, int n) { long long minSum = LLONG_MAX;

for (int k = 0; k <= 2 * n - 2; k++) { long long sum = 0;

for (int i = 0; i < n; i++) { int j = k - i;

if (j >= 0 && j < n) { sum += abs((long long)a[i][j]); } }

if (sum < minSum) { minSum = sum; } }

return minSum; }

int main() { int n;

cout << "Введите размер матрицы: "; cin >> n;

if (n <= 0) { cout << "Размер матрицы должен быть положительным!"; return 0; }

vector<vector<int>> a(n, vector<int>(n));

cout << "Введите элементы матрицы:" << endl;

for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } }

cout << "Сумма элементов столбцов без отрицательных: " << sumColumns(a, n) << endl;

cout << "Минимальная сумма модулей диагоналей: " << minDiagonalSum(a, n) << endl;

return 0; }

2. Объяснение решения

а) Сумма элементов столбцов без отрицательных чисел

Функция sumColumns() последовательно проверяет каждый столбец матрицы.

Алгоритм работы:

  1. Перебираем столбцы матрицы с помощью переменной j.

  2. Для каждого столбца создаём логическую переменную hasNegative, изначально равную false.

  3. Просматриваем элементы текущего столбца.

  4. Если встречается отрицательное число, устанавливаем hasNegative = true и прекращаем проверку этого столбца.

  5. Если отрицательных элементов нет, прибавляем сумму элементов столбца к общей сумме total.

  6. Возвращаем полученный результат.

Таким образом, учитываются только столбцы, все элементы которых неотрицательны (больше или равны нулю).

б) Минимальная сумма модулей элементов диагоналей

Побочная диагональ квадратной матрицы проходит из правого верхнего угла в левый нижний.

Например, для матрицы размером 3×33 \times 3:

A=(a00a01a02a10a11a12a20a21a22)A=\begin{pmatrix} a_{00}&a_{01}&a_{02}\\ a_{10}&a_{11}&a_{12}\\ a_{20}&a_{21}&a_{22} \end{pmatrix}

Элементы побочной диагонали:

a02, a11, a20a_{02},\ a_{11},\ a_{20}

Для любой диагонали, параллельной побочной, сумма индексов строки и столбца постоянна:

i+j=ki+j=k

Значение kk изменяется от 00 до 2N−22N-2.

Поэтому функция minDiagonalSum() выполняет следующие действия:

  1. Перебирает все значения kk.

  2. Для каждого элемента диагонали вычисляет номер столбца по формуле j=k−ij=k-i.

  3. Проверяет, что индекс j находится в пределах матрицы.

  4. Складывает абсолютные значения элементов данной диагонали.

  5. Сравнивает полученную сумму с текущим минимумом.

  6. Возвращает наименьшее найденное значение.

В этом решении учитываются все 2N−12N-1 диагоналей данного направления, включая саму побочную диагональ и диагонали из одного элемента.

3. Пример работы программы

Пусть дана матрица:

A=(1

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос