Неправильная сумма элементов матрицы
Написал программу,которая переставляет столбцы в соответствии с ростом характеристик,но почему-то неправильно считается сумма элементов столбца,в котором есть хоть один отрицательный элемент.В чем может быть проблема?
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int main()
{
srand((int)time(0));
int n, m;
cout << "Введите количество строк "; cin >> n;
cout << "Введите количество столбцов "; cin >> m;
int **a = new int*[n];
for (int i = 0; i < n; i++)
a[i]=new int[m];
int *c = new int[m]();
cout <<"Matrix a:\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
a[i][j]=rand()%19 - 9;
cout << setw(3) << a[i][j] << " ";
}
cout << "\n";
}
for (int j = 0; j < m; j++)
{
for (int i = 0; i < n; i++)
if(a[i][j]<0 && a[i][j]%2!=0) c[j]+=abs(a[i][j]);
cout << "col " << j+1 << ": sum=" << c[j] << "\n";
}
for (int j = 1; j < m; j++)
for (int k = 0; k < m-j; k++)
if (c[k]>c[k+1])
{
swap(c[k],c[k+1]);
for (int i = 0; i < n; i++)
swap(a[i][k],a[i][k+1]);
}
cout <<"\nSorted matrix a:\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << setw(3) << a[i][j] << " ";
cout <<"\n";
}
for (int i = 0; i < n; i++)
delete[]a[i];
delete[]a;
delete[]c;
system("pause");
return 0;
}
Добавляю результат программы.
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
- Вы добавляете не сам элемент, а его модуль
c[j] += abs(a[i][j] - Вы складываете только нечетные элементы:
if (a[i][j]<0 && a[i][j]%2!=0)
Для того, чтобы получить сумму столбца, в котором содержится хоть один отрицательный элемент нужно:
- Проверить, есть ли в столбце отр. элемент
- Прибавить каждый его элемент.
...
bool* is_negative = new bool[m]; // True - есть, False - нет отр. элемент
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
is_negative[j] = false;
if(a[i][j] < 0){
is_negative[j] = true;
break;
}
}
}
for(int j=0; j<m; ++j)
if(is_negative[j])
for(int i=0; i<n; ++i)
c[j] += a[i][j];
