Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
#1

Сортировка самого столбца - C++

12.09.2012, 18:19. Просмотров 707. Ответов 11

Вообщем возникли затруднения со следующим
Матрица есть,раньше как то делал сортировку столбцов матрицы,а чтобы сами столбцы сортировались оставаясь на своих местах не приходилось,надеюсь поможет кто кодом

Нужно отсортировать САМ столбец по убыванию элементов,и так про каждый столбец.Пример
Исходная
Код
1.33  4.14  2.14  7.44
0.41  8.87     9  1.44
5.53  7.12  3.01  4.45
Отсортированная должна быть так(сам столбец сортируется)

C++ (Qt)
1
2
3
0.41  4.14  2.14  1.44
1.33  7.12  3.01  4.45
5.53  8.87     9  7.44
Заготовка
C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <ctime> 
#include <iomanip> 
 
using namespace std;
 
int main()
{
    int m,n,i,j,k,temp=0;
    float x;
    
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"\tVvedite razmernost matrix\n";
    cout<<"\nStrok: ";
        cin>>m;
    cout<<"Stolbcov: ";
    cin>>n;
    float **a=new float*[m];
    float *b=new float[m*n];
    for(i=0;i<m;i++)                       
    {
            a[i]=new float[n];
    }
    cout<<endl<<"\tMatrix\n\n";
    srand(time(NULL));
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
            a[i][j]=(rand() % 10 + 1) / float((rand() % 10 + 1));//числа от a до b рамдомно расположенные в матрице
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl<<"\tSortMatrix\n\n";
 
/*код.......*/
 
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    for(int i = 0; i < m; i++)
                {
                    delete [] a[i];
                }
                delete [] a;
    getch();
    return 0;
}
По идее в голову идет следующий алгоритм
1)Выписать столбец в одномерный массив
2)Упорядочить масив по убыванию
3)Записать полученный масив как столбец
4)Взять следующий столбец матрицы

Если это верно то на деле пока не получается реализовать,мож поможет кто кодом))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 18:19     Сортировка самого столбца
Посмотрите здесь:

Число. Вывести только цифры самого младшего и самого старшего разряда - C++
Дано n-значное целое число введеное с клавиатуры. Вывести только цифры самого младшего и самого старшего разряда.

Вывод из вектора самого короткого и самого длинного string значения - C++
Вывод из вектора самого короткого и самого длинного string значения Подскажите как таковое сделать, если кому не трудно сможете ли вы...

Файлы: отсортировать и найти самого младшего и самого страшего с правами и без прав - C++
Прошу помочь!!!:wall: В этой задачке мне необходимо отсортировать и найти самого младшего и самого страшего с правами и без прав( список...

Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова. - C++
1. Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова. 2. 14.14. Имеется строка, содержащая буквы...

Дана строка содержащая текст. Найти длину самого короткого и самого длинного слова. - C++
помогите написать программу =) очень нужно=) Дана строка содержащая текст. Найти длину самого короткого и самого длинного слова.

Найти самого высокого и самого тяжелого студента в группах - C++
Здравствуйте, Помогите, пожалуйста, с задачкой. Нужно решить через 3мерный массив. На первом курсе есть 3 группы. В первой из них 3...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
12.09.2012, 18:37     Сортировка самого столбца #2
Все намного проще:
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
int main() {
   std::size_t size = 5;
   int **array = new int *[ size ];
   int temp;
   bool flag = true;
   
   for ( std::size_t i = 0; i < size; i++ ) {
      array[ i ] = new int [ size ];
      
      for ( std::size_t j = 0; j < size; j++ )
         std::cout << ( array[ i ][ j ] = std::rand() % ( size + size )) << ' ';
      
      std::cout << std::endl;
   }
   
   std::cout << std::endl;
   
   for ( std::size_t i = 0; i < size; i++ ) {
      flag = true;
      
      for ( std::size_t lowBorder = size, curPos; flag; lowBorder-- ) {
         for ( curPos = 1, flag = false; curPos < lowBorder; curPos++ ) {
            if ( array[ curPos ][ i ] < array[ curPos - 1 ][ i ]) {
               temp = array[ curPos ][ i ];
               array[ curPos ][ i ] = array[ curPos - 1 ][ i ];
               array[ curPos - 1 ][ i ] = temp;
               flag = true;
            }
         }
      }
   }
   
   
   for ( std::size_t i = 0; i < size; i++ ) {
      for ( std::size_t j = 0; j < size; j++ )
         std::cout << array[ i ][ j ] << ' ';
      
      std::cout << std::endl;
   }
 
   return 0;
}
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
12.09.2012, 18:44     Сортировка самого столбца #3
a.n.o.n.i.m, через доп массив конечно можно, но можно и так:
C++
1
2
3
4
5
 for (int l=0; l<m; l++) 
   for (i=0; i<m; i++)
    for (j=0; j<m; j++)
      if (a[i][l]<a[j][l])
       swap(a[i][l],a[j][l]);
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
12.09.2012, 18:56     Сортировка самого столбца #4
бгг.
на все случаи жизни
в данном примере в функцию arraySort можно передавать каждый столбец матрицы.
все там весьма примитивно. даже сортир пузырьковый


надо же пиарить тему свою
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
12.09.2012, 18:59     Сортировка самого столбца #5
co6ak, как Вы собираетесь передавать столбец в функцию, если его элементы расположены в разных выделенных частях памяти?
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.09.2012, 19:03     Сортировка самого столбца #6
вариант (из первичного кода):
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
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <ctime> 
#include <iomanip> 
 
using namespace std;
 
int main()
{
    int m,n,i,j,k,temp;
    float x;
    
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"\tVvedite razmernost matrix\n";
    cout<<"\nStrok: ";
        cin>>m;
    cout<<"Stolbcov: ";
    cin>>n;
    float **a=new float*[m];    
    for(i=0;i<m;i++)                       
    {
            a[i]=new float[n];
    }
    cout<<endl<<"\tMatrix\n\n";
    srand(time(NULL));
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
            a[i][j]=(rand() % 10 + 1) / float((rand() % 10 + 1));//числа от a до b рамдомно расположенные в матрице
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl<<"\tSortMatrix\n\n";
    for(i=0; i<n; i++)
    {
        for(j=0; j<m-1; j++)
        {
            temp=j;
            for(k=j+1; k<m; k++)
                if(a[temp][i]>a[k][i])
                    temp=k;
            x=a[j][i]; a[j][i]=a[temp][i]; a[temp][i]=x;
        }
    }
 
 
 
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    for(i = 0; i < m; i++)
                {
                    delete [] a[i];
                }
                delete [] a;
    getch();
    return 0;
}
ProNoooob
72 / 72 / 6
Регистрация: 14.10.2009
Сообщений: 121
12.09.2012, 19:20     Сортировка самого столбца #7
Просто берем и сортируем столбцы. ^_^
И да отучайтесь писать код как в первом посте.

Если бы я был студентом, то в этой задаче написал бы свой итератор. Чтобы пожоще было.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
float **matrix;
int rows, columns;
 
float **BuildMatrix(int _rows, int _columns);
void    PrintMatrix(float **_matrix, int _rows, int _columns);
 
int main()
{
    srand(GetTickCount());
 
    printf("Universal matrix column sorting programm.\n");
    printf("Enter Matrix data.\n");
    printf("rows num: ");
    scanf("%d", &rows);
    printf("columns num: ");
    scanf("%d", &columns);
    printf("Building matrix %dx%d ...\n\n", rows, columns);
    matrix = BuildMatrix(rows, columns);
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\nSorting columns ... \n\n");
 
    for(int i = 0; i < rows; i++)
    {
        std::sort(&matrix[i][0], &matrix[i][columns], std::less<float>());
    }
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\n");
    system("pause");
 
    return 0;
}
 
float **BuildMatrix(int _rows, int _columns)
{
    float **matrix;
 
    matrix = new float *[_rows];
 
    for(int i = 0; i < _rows; i++)
    {
        matrix[i] = new float[_columns];
 
        for(int k = 0; k < _columns; k++)
        {
            matrix[i][k] = (rand() % 10 + 1) / float((rand() % 10 + 1));
        }
    }
    return matrix;
}
 
void PrintMatrix(float **_matrix, int _rows, int _columns)
{
    for(int i = 0; i < _columns; i++)
    {
        for(int k = 0; k < _rows; k++)
        {
            printf("%.2f ", matrix[k][i]);
        }
 
        printf("\n");
    }
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
12.09.2012, 19:27  [ТС]     Сортировка самого столбца #8
Мужики,прям порадовали,спасибо,столько ответов пасиб кто помог,будем дальше продолжать ,это только начало))
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
18.09.2012, 14:27  [ТС]     Сортировка самого столбца #9
Можете еще раз помочь сделать,написать сортировку выбором и пузырьком тоесть 2 функции добавить в одной будет выбором во второй пузырьком?

Добавлено через 15 минут
и кстате сортировка то по не возрастанию(тоесть убыванию),во всех примерах наоборот
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.09.2012, 14:28     Сортировка самого столбца #10
Цитата Сообщение от ProNoooob Посмотреть сообщение
Просто берем и сортируем столбцы. ^_^
И да отучайтесь писать код как в первом посте.

Если бы я был студентом, то в этой задаче написал бы свой итератор. Чтобы пожоще было.
Кликните здесь для просмотра всего текста
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
float **matrix;
int rows, columns;
 
float **BuildMatrix(int _rows, int _columns);
void    PrintMatrix(float **_matrix, int _rows, int _columns);
 
int main()
{
    srand(GetTickCount());
 
    printf("Universal matrix column sorting programm.\n");
    printf("Enter Matrix data.\n");
    printf("rows num: ");
    scanf("%d", &rows);
    printf("columns num: ");
    scanf("%d", &columns);
    printf("Building matrix %dx%d ...\n\n", rows, columns);
    matrix = BuildMatrix(rows, columns);
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\nSorting columns ... \n\n");
 
    for(int i = 0; i < rows; i++)
    {
        std::sort(&matrix[i][0], &matrix[i][columns], std::less<float>());
    }
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\n");
    system("pause");
 
    return 0;
}
 
float **BuildMatrix(int _rows, int _columns)
{
    float **matrix;
 
    matrix = new float *[_rows];
 
    for(int i = 0; i < _rows; i++)
    {
        matrix[i] = new float[_columns];
 
        for(int k = 0; k < _columns; k++)
        {
            matrix[i][k] = (rand() % 10 + 1) / float((rand() % 10 + 1));
        }
    }
    return matrix;
}
 
void PrintMatrix(float **_matrix, int _rows, int _columns)
{
    for(int i = 0; i < _columns; i++)
    {
        for(int k = 0; k < _rows; k++)
        {
            printf("%.2f ", matrix[k][i]);
        }
 
        printf("\n");
    }
}
и отучайтесь использовать глобальные переменные, ога
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
18.09.2012, 14:31  [ТС]     Сортировка самого столбца #11
а нет верно вроде все,тупанул,просто сортировки нужны

Добавлено через 1 минуту
Глобальные переменные не использую никогда,и где здесь сортировка первая и где вторая?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 15:17     Сортировка самого столбца
Еще ссылки по теме:

Найти среди людей самого старшего и самого тяжелого - C++
Здраствуйте. Есть такое задание: нужно с помощью классов создать 100 человек с параметрами вес и возраст, после чего найти самого...

Найти длину самого короткого и самого длинного слова - C++
помогите решить Дана символьная строка, содержащая текст, который заканчивается точ¬кой. Найти длину самого короткого и самого длинного...

Верно ли, что вес самого тяжелого человека из группы превышает массу самого легкого более чем в 2 раза? - C++
4. Известен вес каждого человека из группы. Верно ли, что вес самого тяжелого из них превышает массу самого легкого более чем в 2 раза?

Сортировка столбца двумерного массива! - C++
#include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;iomanip.h&gt; void main () { ...


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

Или воспользуйтесь поиском по форуму:
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.09.2012, 15:17     Сортировка самого столбца #12
возможные ошибки поправишь. компиль не съест мой код
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
void matrPrint      ( flaot **, int, int );
void matrSortBubl   ( flaot **, int, int );
void matrSortChng   ( flaot **, int, int );
void matrRandom     ( flaot **, int, int );
 
int main() {
    srand( time ( 0 ) );
    int row;
    int column;
    float **matrix;
    
    
    std::cout << "\nEnter number of rows: ";
    std::cin >> row;
    std::cout << "\nEnter number of columns: ";
    std::cin >> column;  
 
    matrix = new int* [ row ];
    for ( int i = 0; i < row; i ++ )
        matrix[i] = new int [ column ] ;
    matrRandom( matrix, row, column );
    
    matrSortBubl( matrix, row, column );
    matrPrint( matrix, row, column );
    
    
    
    std::cout << "New one";
    
    matrRandom(matrix, row, column );
    matrSortChng( matrix, row, column );
    matrPrint( matrix, row, column );
    
    for ( int i = 0; i < row; i ++ )
       delete [] matrix[i];
    delete [] matrix;
    
    return 0;
}
 
 
void matrRandom( float ** matr, int row, int column )
{
    for ( int i = 0; i < row; i ++ )
        for ( int j = 0; j < column; j ++ )
            matr[i][j] = (std::rand() % 50 - std::rand() % 25) / std::rand() % 10;
    matrPrint( matr, row, column );
}
 
void matrSortBubl( float **matr, int row, int column )
{
    float tmp;
    for ( int i = 0; i < column; i ++ )
    {
        for ( int j = 0; j < row - 1; j ++ )
            if (  matr[i][j + 1] > matr[i][j] ) 
            {
                tmp = matr[i][j+1];
                matr[i][j+1] = matr[i][j];
                matr[i][j] = tmp;
            }
    }
}
void matrSortChng( float **matr, int row, int column ) {
    float tmp;
    for ( int l = 0; k < column; k ++ ) {
        for(int i = 0; i < row-1; i++){
            int min = i;
            for (int j = i + 1;j < row; j++){
                if( matrix[j][l]< matrix[j][min])
                    min=j;
            }
        matrix[i][l] = matrix[min][l]);
        }
    }
}
 
void matrPrint ( float **matrix, int row, int column )
{
    std::cout << std::endl;
    for ( int i = 0; i < row; i ++ )
    {
        for ( int j = 0; j < column; j ++ )
            std::cout << matrix[i][j] << "\t";
        std::cout << std::endl;
    }
}
Yandex
Объявления
18.09.2012, 15:17     Сортировка самого столбца
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru