/*
Помогите пожалуйста с функцией сортировки матрицы:
void SortMatrix(
int **pMatrix, // Указатель на матрицу
int Rows, // Количество строк матрицы
int Cols ) // Количество столбцов матрицы
её прототип.
Задача:
Характеристикой столбца матрицы назовем сумму его отрицательных элементов, имеющих нечетные значения индексов.
Переставляя столбцы заданной матрицы, расположить их в соответствии с убыванием характеристик.
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <time.h> //Для генератора случ. величины
using namespace std;
void SortMatrix( int **pMatrix, int Rows, int Cols )
{
int *Arr; //Вспомогательный массив для хранения характеристики
Arr = new int[Cols];
//Заполним характеристики
for (int i = 0; i < Cols; i++) //Обойдем все столбцы
{
int Sum = 0; //Текущая сумма
for (int j = 0; j< Rows; j++) //Обойдем все строки
if (pMatrix[j][i] < 0 && ((j+1)%2) != 0)
Sum+= pMatrix[j][i];
Arr[i] = Sum;
}
//Ну а теперь будем полученные данные сортировать в соответсвии с убыванием характеристики
int iMax; //Введем переменную макс. значения
int Index = -1; //Макс. индекс
for (int i = 0; i < Cols; i++)
{
iMax = numeric_limits<int>::min(); //Введем переменную макс. значения и присвоем ей самое минимальное значение
for (int j = i; j < Cols; j++)
{
if (iMax < Arr[j])
{
iMax = Arr[j];
Index = j;
}
}
int Temp = Arr[i];
Arr[i] = Arr[Index];
Arr[Index] = Temp;
for (int z = 0; z < Rows; z++)
{
int Temp2 = pMatrix[z][Index];
pMatrix[z][Index] = pMatrix[z][i];
pMatrix[z][i] = Temp2;
}
}
}
//Основная функция программы (точка входа)
void main (void)
{
int** Matrix; //Наша исходная матрица (указатель на указатель)
int Row; //Размерность нашей матрицы (строки)
int Col; //Размерность нашей матрицы (колонки)
int RandVal; // Предельное значение генерации случ. величины
setlocale(LC_ALL,".1251"); //Подгрузим локаль 1251-кодовая страница
srand(time(NULL)); //Инициализируем генератор случ. величины
cout << "Введите кол-во строк матрицы ";
cin >> Row;
cout << "Введите кол-во столбцов матрицы ";
cin >> Col;
cout << endl << endl << "Генерация значений матрицы" << endl;
cout << "Введите макс. значение генерируемых значений (предел) ";
cin >> RandVal;
//Заполнение случ. значениями и инициализация матрицы
Matrix = new int*[Row]; //Выделим память под строки
cout << "Наша матрица Matrix : " << endl;
for (int i = 0; i< Row; i++)
{
Matrix[i] = new int[Col]; //Выделим память под столбцы
for (int j = 0; j< Col; j++)
{
Matrix[i][j] = rand()%RandVal * (rand()%2?1:-1);
cout << Matrix[i][j] << " , ";
}
cout << endl;
}
SortMatrix(Matrix, Row, Col );
cout << "Результат после сортировки Matrix : " << endl;
for (int i = 0; i< Row; i++)
{
for (int j = 0; j< Col; j++)
cout << Matrix[i][j] << " , ";
cout << endl;
}
//Почистим за собой
for (int i = 0; i < Row; i++)
delete[] Matrix[i];
delete[] Matrix;
}