Задача: Расширенная сортировка дв. массива (сортировка по-столбцам с з

Тема в разделе "C/C++/C#", создана пользователем Exilien, 5 дек 2010.

Статус темы:
Закрыта.
  1. Exilien

    Exilien New Member

    Регистрация:
    6 ноя 2010
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте.
    Помогите пожалуйста с функцией сортировки матрицы:
    void SortMatrix(
    int **pMatrix, // Указатель на матрицу
    int Rows, // Количество строк матрицы
    int Cols ) // Количество столбцов матрицы
    её прототип.
    Задача:
    Характеристикой столбца матрицы назовем сумму его отрицательных элементов, имеющих нечетные значения индексов. Переставляя столбцы заданной матрицы, расположить их в соответствии с убыванием характеристик.

    Если не сложно напишите сам цикл сортировки или пример, выполняющий схожую задачу.
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    Помогите пожалуйста с функцией сортировки матрицы:
    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;

    }
     

    Вложения:

    • functmatr.jpg
      functmatr.jpg
      Размер файла:
      54,3 КБ
      Просмотров:
      21
  3. Exilien

    Exilien New Member

    Регистрация:
    6 ноя 2010
    Сообщения:
    3
    Симпатии:
    0
    Спасибо огромное, сейчас буду разбираться :(
     
Загрузка...
Похожие Темы - Задача Расширенная сортировка
  1. Янчик
    Ответов:
    0
    Просмотров:
    486
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    782
  3. elzim
    Ответов:
    0
    Просмотров:
    930
  4. ShaoKahn
    Ответов:
    1
    Просмотров:
    1.124
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
Статус темы:
Закрыта.

Поделиться этой страницей