Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
1

Сортировка столбцов матрицы

23.03.2018, 21:58. Показов 2229. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто-то может подсказать как сделать сортировку столбцов, а то у меня в строку нормально сортирует, а в столбец нет.
Просто сортируется именно строка и выводится в столбец...Как сделать что бы сортировало именно сам столбец?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    void Matrix::Sort_Matrix()
    {
        int Matrix_Sort;
        cout << "Rows Sorting : 1" << endl;
        cout << "Column Sorting : 2" << endl;
        cout << "Choose what you want : "; 
        cin >> Matrix_Sort;
        cout << endl;
 
        switch (Matrix_Sort)
        {
 
        case 1:
 
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    for (int k = size - 1; k > j; k--)
                    {
                        if (My_Array[i][k] < My_Array[i][k - 1])
                        {
                            int temp = My_Array[i][k];
                            My_Array[i][k] = My_Array[i][k - 1];
                            My_Array[i][k - 1] = temp;
                        }
                    }
                    cout << My_Array[i][j] << " ";
                }
                cout << endl;
            }
            cout << "\n" << endl;
            break;
 
        case 2:
        
            for (int j = 0; j < size; j++)
            {
                for (int i = 0; i < size; i++)
                {
                    for (int k = size - 1; k > j; k--)
                    {
                        if (My_Array[i][k] < My_Array[i][k - 1])
                        {
                            int temp = My_Array[i][k];
                            My_Array[i][k] = My_Array[i][k - 1];
                            My_Array[i][k - 1] = temp;
                        }
                    }
                    cout << My_Array[i][j] << " ";
                }
                cout << endl;
            }
            cout << "\n" << endl;
            break;
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2018, 21:58
Ответы с готовыми решениями:

Сортировка столбцов матрицы по возрастанию последних элементов столбцов
Сортировка столбцов по росту последних элементов столбцов.Помогите пожалуйста, надо только фрагмент...

Сортировка столбцов матрицы
У меня вопрос..... попытался выполнить сортировку четных столбцов по убыванию.... у меня...

сортировка столбцов матрицы
задание: характеристикой столбца целочисленной матрицы, назовем сумму модулей его отрицательных...

Сортировка столбцов матрицы
Помагите пожалуйсто нужно отсортиовать столбцы матрицы по возростанию нижней строки например : ...

18
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 22:11 2
Лучший ответ Сообщение было отмечено Granrage как решение

Решение

Granrage, блок сортировки столбцов двумерного по возрастанию + вывод на экран:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Sort (double** a, size_t n, size_t m)
{      
    double temp;
    for (size_t j=0; j<m; j++)    
       for (size_t i=0; i<n-1; i++)
           for (size_t k=0; k<n-i-1; k++)        
               if (a[k][j] > a[k+1][j])
                {
                    temp = a[k][j];
                    a[k][j] = a[k+1][j];
                    a[k+1][j] = temp;             
                } 
                
    for (size_t i = 0; i < n; i++) 
    {
        for (size_t j = 0; j < m; j++)            
            cout << a[i][j] << " ";        
            cout << endl;             
    }           
}
1
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 22:27  [ТС] 3
А как переделать конкретно под мой случай, я попытался сделать вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case 2:
            for (int j = 0; j < size; j++)
            {
                for (int i = 0; i < size - 1; i++)
                {
                    for (int k = 0; k < size - 1; k++)
                    {
                        if (My_Array[k][j] > My_Array[k + 1][j])
                        {
                            int temp = My_Array[k][j];
                            temp = My_Array[k][j];
                            My_Array[k][j] = My_Array[k + 1][j];
                            My_Array[k + 1][j] = temp;
                        }
                    }
                    cout << My_Array[j][i] << " ";
                }
                cout << endl;
            }
            cout << "\n" << endl;
            break;
Оно вроде и сортирует, но куда-то пропадает один столбец матрицы.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 22:30 4
Granrage, строка 6 пропустили -i
строки 10-11 не дублируйте
у Вас массив квадратный по условию ?
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 22:36  [ТС] 5
Цитата Сообщение от Yetty Посмотреть сообщение
строка 6 пропустили i
Все равно один столбец пропадает.

Добавлено через 2 минуты
Цитата Сообщение от Yetty Посмотреть сообщение
строки 10-11 не дублируйте
это уже по невнимательности, я заметил, но все равно проблема остаётся.

Добавлено через 1 минуту
Цитата Сообщение от Yetty Посмотреть сообщение
у Вас массив квадратный по условию ?
Да.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 22:38 6
столбец пропадает потому что вывод включили в сортировку (а там size-1)
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 22:43  [ТС] 7
и как это можно привести в нормальный рабочий вид?

Добавлено через 38 секунд
у меня либо без столбца, либо столбец есть, но в нём смешиваются элементы
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 22:45 8
i и j зачем поменяли местами при выводе ?
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 22:48  [ТС] 9
Цитата Сообщение от Yetty Посмотреть сообщение
i и j зачем поменяли местами при выводе ?
хороший вопрос, я до этого когда экспериментировал, забыл вернуть, но проблема не в этом
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 22:53 10
Granrage, сбросьте этот кусок ещё разок со всеми исправлениями и отдельным выводом на экран
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 22:57  [ТС] 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
case 2:
            for (int j = 0; j < size; j++)
            {
                for (int i = 0; i < size; i++)
                {
                    for (int k = 0; k < size - i - 1; k++)
                    {
                        if (My_Array[k][j] > My_Array[k + 1][j])
                        {
                            int temp = My_Array[k][j];
                            My_Array[k][j] = My_Array[k + 1][j];
                            My_Array[k + 1][j] = temp;
                        }
                    }
                    cout << My_Array[i][j] << " ";
                }
                cout << endl;
            }
            cout << "\n" << endl;
            break;
Исходная матрица:

4 5
6 2


Отсортированная матрица:

4 6
2 5

Добавлено через 50 секунд
хотя, стоп

Добавлено через 47 секунд
сортирует нормально, уже, но как сделать что бы выводило это все в столбец?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 23:00 12
Granrage, не вносите изменения в сортировку. верните size-1. сделайте отдельный вывод (как в первоначальном варианте, который я Вам сбросил)
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 23:06  [ТС] 13
Цитата Сообщение от Yetty Посмотреть сообщение
сделайте отдельный вывод (как в первоначальном варианте, который я Вам сбросил)
В таком случае у меня выводится изначальна(еще одна) и отсортированная матрица
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.03.2018, 23:10 14
какая ещё одна ? должна одна выводиться (это сортировка и вывод результата на экран)
лишние скобки лучше убрать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int j = 0; j < size; j++)  
  for (int i = 0; i < size-1; i++)                
    for (int k = 0; k < size - i - 1; k++)             
      if (My_Array[k][j] > My_Array[k + 1][j])
      {
        int temp = My_Array[k][j];
        My_Array[k][j] = My_Array[k + 1][j];
        My_Array[k + 1][j] = temp;
      }
         
for (size_t i = 0; i < size; i++) 
    {
        for (size_t j = 0; j < size; j++)            
            cout << My_Array[i][j] << " ";        
            cout << endl;             
    }
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
23.03.2018, 23:29  [ТС] 15
Цитата Сообщение от Yetty Посмотреть сообщение
какая ещё одна ?
уже все нормально, я уже понял почему так...

Добавлено через 49 секунд
я немного не в те скобки загнал вывод

Добавлено через 1 минуту
заболел просто, вот и сижу как тормоз, элементарные ошибки делаю

Добавлено через 1 минуту
спасибо вам

Добавлено через 4 минуты
До этого пока сам химичил, сделал нечто похожее не ваш код, но без вас бы не додумался, что нужно еще -i и вывод переделать.

Добавлено через 5 минут
Yetty, может из-за этого и растянулась моя тема так сильно. Ибо мне до последнего казалось, что это не то, ибо что-то похожее я пробовал, но как оказалось, что я немного не додумал тогда пару моментов.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
24.03.2018, 00:19 16
Цитата Сообщение от Granrage Посмотреть сообщение
нужно еще -i и вывод переделать
i не обязательно. если помните Вы его проигнорировали и всё было нормально. просто если уже часть элементов отсортирована, нет смысла их проверять ещё раз. хотя это вопрос спорный (с точки зрения быстродействия). блок вроде сам составлял, поэтому на истину в последней инстанции не претендую. можете попробовать внести вывод в циклы сортировки.
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
26.03.2018, 10:06  [ТС] 17
Yetty, с выводом беда, если размер матрицы больше двух, то выводится несколько матриц последняя из которых правильная

Добавлено через 20 минут
Yetty, а, все норм, это я намудрил уже
0
1 / 1 / 1
Регистрация: 26.09.2016
Сообщений: 146
27.03.2018, 23:57  [ТС] 18
Yetty, каким образом можно написать алгоритм для решения матричного уравнения, хотя бы самого простого? (аля А*Х=В)
Я просто сижу уже который день и вообще не могу понять.
0
Yetty
28.03.2018, 00:21     Сортировка столбцов матрицы
  #19

Не по теме:

Granrage, это форум. старайтесь избегать личных обращений. создайте новую тему, только подробно
всё опишите (размерность матрицы, способ заполнения, тип элементов) и что требуется сделать.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2018, 00:21

Сортировка столбцов матрицы
Было дано задание: &quot;Написать программу обработки матриц. Программа должна иметь текстовое меню,...

Сортировка матрицы по убыванию столбцов
Как уже понятно из темы нужно отсортировать столбцы значений матрицы по убыванию. Где красная линия...

Сортировка столбцов матрицы по убыванию
дана матрица размером NxM надо отсортировать элементы столбцы в порядке убывание. Ввод данных с...

Fork() и сортировка столбцов матрицы
В общем такая беда. Целый день не могу понять что не так в моем коде. Задание такое. Мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru