Некорректный вывод значения максимума/минимума ряда/столбца массива и его расположения
Иногда, если при нахождении максимумом/минимумом ряда/столбца двухмерного массива вдруг оказывается ноль или отрицательное значение, то программа почему-то вместо нужного значения ставит везде нули или же значение, указанные в начале по умолчанию в массивах max_rows, min_rows, imax_rows, imin_rows и т.д.
p.s Значение месторасположения элемента для вывода сдвинуто на 1, если что
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian" );
srand(time( NULL ));
const int n = 3, m = 4;
int a[n][m] = { 0 }, check[n] = { 0 }, check_n[n] = { 0 };
int max_rows[n] = { -100 }, imax_rows[n] = { 0 }, min_rows[n]= { 100 }, imin_rows[n]={ 0 };
int max_columns[m] = { -100 }, imax_columns[m] = { 0 }, min_columns[m] = { 100 }, imin_columns[m]= { 0 };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
a[i][j] = (rand() % 10) - 5;
cout << a[i][j] << "\t";
}
cout << endl;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] == 0)
{
check[i]++; break;
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (check[i] != 0)
{
if (a[i][j] < 0) check_n[i]++;
}
}
}
for (int i = 0; i < n; i++)
{
if (check[i] != 0)
{
cout << "Негативных элементов в ряде " << i + 1 << ": " << check_n[i] << endl;
}
else if (check[i] == 0) cout << "Отсутствуют нули в ряде " << i + 1 << endl;
}cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (min_rows[i] > a[i][j])
{
min_rows[i] = a[i][j];
imin_rows[i] = j+1;
}
else if (max_rows[i] < a[i][j])
{
max_rows[i] = a[i][j];
imax_rows[i] = j+1;
}
}
}
for (int j = 0; j < m; j++)
{
for (int i = 0; i < n; i++)
{
if (min_columns[j] > a[i][j])
{
min_columns[j] = a[i][j];
imin_columns[j] = i + 1;
}
else if (max_columns[j] < a[i][j])
{
max_columns[j] = a[i][j];
imax_columns[j] = i + 1;
}
}
}
for (int i = 0; i < n; i++)
{
cout << "Максимум ряда " << i + 1 << ": " << max_rows[i] << ", место максимума: " << imax_rows[i] << endl;
}
for (int i = 0; i < n; i++)
{
cout << "Минимум ряда " << i + 1 << ": " << min_rows[i] << ", место минимума: " << imin_rows[i] << endl;
}cout << endl;
for (int i = 0; i < m; i++)
{
cout << "Максимум колонки " << i + 1 << ": " << max_columns[i] << ", место максимума: " << imax_columns[i] << endl;
}
for (int i = 0; i < m; i++)
{
cout << "Минимум колонки " << i + 1 << ": " << min_columns[i] << ", место минимума: " << imin_columns[i] << endl;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (max_rows[i] == min_columns[j])
{
cout << 'A' << i + 1 << '(' << i + 1 << "; " << j + 1 << ')' << "\t";
}
}
}
}
Вывод:
-2 -4 2 -2
1 -1 0 -4
2 -2 0 2
Отсутствуют нули в ряде 1
Негативных элементов в ряде 2: 2
Негативных элементов в ряде 3: 1
Максимум ряда 1: 2, место максимума: 3
Максимум ряда 2: 1, место максимума: 1
Максимум ряда 3: 2, место максимума: 1
Минимум ряда 1: -4, место минимума: 2
Минимум ряда 2: -4, место минимума: 4
Минимум ряда 3: -2, место минимума: 2
Максимум колонки 1: 2, место максимума: 3
Максимум колонки 2: 0, место максимума: 0 // тут проблема
Максимум колонки 3: 2, место максимума: 1
Максимум колонки 4: 2, место максимума: 3
Минимум колонки 1: -2, место минимума: 1
Минимум колонки 2: -4, место минимума: 1
Минимум колонки 3: 0, место минимума: 0 // тут проблема
Минимум колонки 4: -4, место минимума: 2
Ответы (1 шт):
Если оставить алгоритм как есть, то в коде 2 проблемы:
Инициализация массива
{ -100 }установит первый элемент массива в -100, а остальные в 0. Если нужно установить все элементы в -100 то и указывать нужно все.Условие
if (min_columns[j] > ...) ... else if (max_columns[j] < ...)в случае срабатывания первого условия, будет пропускать установку максимума и вы получите -100.