Тема: Сортування стовпців матриць

Характеристикою стовпця цілочисельної матриці назвемо суму модулів його негативних непарних елементів. Переставляючи стовпці заданої матриці, розташувати їх відповідно до зростання характеристик. Знайти суму елементів в тих стовпцях, які містять хоч би один негативний елемент. (Як відсортувати стовпці без індексів?)

#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include "iostream"
using namespace std;
void main()
{
int a[20][20]={0},i,j,ch[20]={0},tmp,index[20],sam=0,st=0,m,n; 
cout<<"vvedite razmernost\n"<<endl;
cin>>n>>m;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>a[i][j];
}
}
cout<<"\n\n";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)

{
if (a[i][j]<0 && a[i][j]%2)
{
ch[j]+=abs(a[i][j]);
}
printf("%4d ",a[i][j]);
index[i]=i;}
cout<<endl;
}    
for(i=0;i<n-1;i++)
for(j=i+1;j<m;j++)
if (ch[index[j]]<ch[index[i]])
{
tmp=index[j];
index[j]=index[i];
index[i]=tmp;
}
cout<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%4d ",a[i][index[j]]);
}
cout<<endl;
}
cout<<endl;
for(int j=0;j<m;j++)
{
sam=0;
for(int i=0;i<n;i++)
{
if(a[i][j]<0&&abs(a[i][j])%2==1)
{
sam+=abs(a[i][j]);
}
}
cout<<"stolbec : "<<j<<" summa "<<sam<<endl;
}
for(int j=0;j<m;j++)
{st=0;
for(int i=0;i<n;i++)
{
if(a[i][j]<0)
{
for(int i=0;i<n;i++)
{
st+=a[i][j];
}
break;
}
}
cout<<"\n Stolbec : "<<j<<" Summa "<<st; }

_getch();
}

2

Re: Сортування стовпців матриць

0. Розставте відступи, код читати боляче.
1. Ви використовуєте явно надлишковий (за операціями обміну) алгоритм сортування вибіркою (і, мабуть, гадаєте, що це бульбашка).
2. А по суті - замість обміну

tmp=index[j];
index[j]=index[i];
index[i]=tmp;

міняєте в циклі стовпчики повністю, хоча це й збочення. І не забуваєте обміняти характеристики.

3

Re: Сортування стовпців матриць

Для чого нам ++, якщо писати майже як на С?
Описати два класи: Matrix & Column, з зручним та зрозумілим інтерфейсом, клас Column, можливо, зручніше зробити nested у Matrix. У класі Column перезавантажити (правильно переклав термін?) оператор (-и) порівняння, і згадати про те, що функції упорядкування давно існують в стандартній бібліотеці, не треба винаходити велосипед, треба вчитися їздити на тому, що вже довело свою надіїність.

Подякували: quez1