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

Отсортировать матрицу по возрастанию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.67
Homjak
 Аватар для Homjak
3 / 2 / 0
Регистрация: 03.10.2009
Сообщений: 46
11.09.2010, 17:18     Отсортировать матрицу по возрастанию #1
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
93
94
95
96
97
98
99
100
101
102
103
104
#include <conio.h> 
#include <iostream> 
#include <stdlib.h> 
#include <time.h> 
#include <iomanip> 
 using namespace std; 
 int main() 
{ 
int x[4][4]; 
int y[4][4]; 
int i,j,minx,maxx,mini,minj,maxi,maxj,z,min,max,g,h; 
srand(time(NULL)); 
minx=100;mini=0;minj=0;maxx=0;maxi=0;maxj=0; 
 
for(i=1;i<4;i++) 
{ 
for(j=1;j<4;j++) 
{ 
x[i][j]=rand() % 100; 
/*  cout<< "Vvedite x["<<i<<"] ["<<j<<"]"; 
  cin>> x[i][j];*/ 
if(x[i][j]>maxx){maxx=x[i][j]; maxi=i; maxj=j;} 
if(x[i][j]<minx){minx=x[i][j]; mini=i; minj=j;} 
} 
} 
 
// vvod zakon4en 
// Copy x >>> y 
 
for(i=1;i<4;i++) 
{ 
for(j=1;j<4;j++) 
{ 
y[i][j]=x[i][j]; 
} 
} 
 
min=minx; 
 
// sortirovka 
 
for(g=1;g<4;g++) 
{ 
for(h=1;h<4;h++) 
{ 
y[g][h]=min; 
min=101; 
for(i=1;i<4;i++) 
{ 
for(j=1;j<4;j++) 
{ 
if(x[i][j]<min){min=x[i][j]; x[i][j]=101;} 
} 
} 
} 
} 
 
// Vivod matrici X 
 
cout<< "Massiv vveden"; 
cout<<endl<< "Massiv:"; 
cout<<endl; 
cout<<"   "; 
 
for(z=1;z<4;z++) 
{cout<<setw(4)<<z;} 
cout<<endl; 
for(z=1;z<4;z++) 
{cout<<setw(4)<<"_";} 
 
for(i=1;i<4;i++) 
{if(i<10) cout<<endl<<i<<" |"; 
//if(i>9) cout<<endl<<i<<"|"; 
for(j=1;j<4;j++) 
{cout<<setw(4)<<x[i][j];} 
} 
cout<<endl<<""; 
cout<<endl<< "Min element: "<<minx<<"("<<mini<<","<<minj<<")"<<". Max element: "<<maxx<<"("<<maxi<<","<<maxj<<")"; 
 
// Otsortirovannii massiv 
 
cout<<endl<< "Otsortirovannii massiv: "; 
cout<<endl; 
cout<<"   "; 
for(z=1;z<4;z++) 
{cout<<setw(4)<<z;} 
cout<<endl; 
for(z=1;z<4;z++) 
{cout<<setw(4)<<"_";} 
 
cout<<endl; 
for(i=1;i<4;i++) 
{ 
if(i<10) cout<<i<<" |"; 
//if(i>9) cout<<i<<"|"; 
for(j=1;j<4;j++) 
{ 
cout<<setw(4)<<y[i][j]; 
} 
cout<<endl; 
} 
getch(); 
return 0; 
}
Собственно код проги. Нужно показать мои ошибки. Ошибки в циклах сортировки матрицы.

Задача: отсортировать матрицу по возрастанию.

Это как бета тестер для программиста, пока ошибки уловить не могу. Заранее благодарю.

Хочу увидеть именно мои ошибки. Знаю, что можно сортировку сделать через функции >>> оптимизировать код. Но пока 4 фора(for) меня устраивают.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
chesser
17 / 17 / 1
Регистрация: 02.08.2010
Сообщений: 44
11.09.2010, 17:51     Отсортировать матрицу по возрастанию #2
Сортируются только строки матрицы, или же элементы матрицы должны еще возрастать сверху вниз?
Homjak
 Аватар для Homjak
3 / 2 / 0
Регистрация: 03.10.2009
Сообщений: 46
11.09.2010, 17:54  [ТС]     Отсортировать матрицу по возрастанию #3
Пример:
Дана матрица:

5 9 8
6 3 4
1 2 7

Сортированная:

1 2 3
4 5 6
7 8 9
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 19:39     Отсортировать матрицу по возрастанию #4
я лисопет изобретать обязательно? чем не устраивает стандартная std::sort() с предикатом?
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
11.09.2010, 20:13     Отсортировать матрицу по возрастанию #5
первое что бросается в глаза, много кода, и зачем создавать сразу два массива, если можно использовать один
Homjak
 Аватар для Homjak
3 / 2 / 0
Регистрация: 03.10.2009
Сообщений: 46
11.09.2010, 21:03  [ТС]     Отсортировать матрицу по возрастанию #6
Только начали учить Си, так что функции и т.д. не давать. "Топорным методом". В одном массиве, впринципе да. Привер в студию.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
11.09.2010, 21:22     Отсортировать матрицу по возрастанию #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
#include <iostream>
#include <cstdlib>
 
int main()
{
    const int rows = 3;
    const int cols = 3;
    int matrix[rows][cols];
    
    for(int i = 0; i < rows; ++i) {
        for(int j = 0; j < cols; ++j)
            matrix[i][j] = rand() % 9;
    }
    
    std::cout << "Исходная матрица: " << std::endl;
    for(int i = 0; i < rows; ++i) {
        for(int j = 0; j < cols; ++j)
            std::cout << matrix[i][j] << " ";
            
        std::cout << std::endl;
    }
    
    for(int k = 0; k < rows * cols; ++k) {
        for(int i = 0; i < rows; ++i) {
            for(int j = 0; j < cols; ++j) {
                if(j != cols - 1) {  
                    if(matrix[i][j+1] < matrix[i][j]) {
                        int tmp = matrix[i][j+1];
                        matrix[i][j+1] = matrix[i][j];
                        matrix[i][j] = tmp;
                    }
                }
                else {
                    if((matrix[i+1][0] < matrix[i][j]) && (i != rows - 1)) {
                        int tmp = matrix[i+1][0];
                        matrix[i+1][0] = matrix[i][j];
                        matrix[i][j] = tmp;
                    }
                }
            }
        }
    }
    
    std::cout << "Отсортированная матрица: " << std::endl;
    for(int i = 0; i < rows; ++i) {
        for(int j = 0; j < cols; ++j)
            std::cout << matrix[i][j] << " ";
            
        std::cout << std::endl;
    }
}
chesser
17 / 17 / 1
Регистрация: 02.08.2010
Сообщений: 44
11.09.2010, 22:59     Отсортировать матрицу по возрастанию #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот еще один вариант. Работаем с матрицей как с одномерным массивом. Сортировка методом пузырька.
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
#include <cstdlib>
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{ const int rows = 4;
  const int cols = 4;
  int matrix[rows][cols];
  int i, j, i1, j1, i2, j2, tmp;  
  int n, k;
  bool f;
  
  srand(time(NULL)); 
  for(i=0; i<rows; i++)
    for(j=0; j<cols; j++)
      matrix[i][j]=rand()%25 - rand()%10;
  cout<<"Matrix: "<<endl;
  for(i=0; i<rows; i++) 
   {for(j=0; j<cols; j++)
     cout <<matrix[i][j]<< "  ";
     cout <<endl;
    }
  n=rows*cols;
  f=true;
  while (f)
  {f=false;  
   for(k=0; k<n-1; k++)
   {i1=k/cols;
    j1=k%rows;
    i2=(k+1)/cols;
    j2=(k+1)%rows;
    if(matrix[i1][j1]>matrix[i2][j2])
     {tmp=matrix[i1][j1];
      matrix[i1][j1]=matrix[i2][j2];
      matrix[i2][j2] = tmp;
      f=true;
     }
    }
  }  
 cout<<"Sorted out matrix: "<<endl;
  for(i=0; i<rows; i++) 
   {for(j=0; j<cols; j++)
     cout <<matrix[i][j]<< " ";
     cout <<endl;
    }   
    
 system("pause");
 return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 00:17     Отсортировать матрицу по возрастанию
Еще ссылки по теме:

C++ Отсортировать по возрастанию элементы массива
C++ Отсортировать строки матрицы по возрастанию
Отсортировать по возрастанию 3 переменные C++

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

Или воспользуйтесь поиском по форуму:
Chainik!
1 / 1 / 1
Регистрация: 10.11.2008
Сообщений: 43
16.10.2012, 00:17     Отсортировать матрицу по возрастанию #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "iomanip"
#include "ctime"
using namespace std;
//----------------------------------------------
void rand(int **arr, int n, int m)
{
    srand(time(NULL));
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            *(*(arr + i) + j) = rand() % 9 + 0;
    }
}
//---------------------------------------------
void print(int **arr, int n, int m)
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            cout << setw(3) << *(*(arr + i) + j);
        cout << "\n\n";
    }
}
//---------------------------------------------
void swap(int *x, int *y)
{
    int t = 0;
    t = *x;
    *x = *y;
    *y = t;
}
//---------------------------------------------
void sort(int **arr, int n, int m)
{
    for(int k = 0; k < n; k++)
    {
        for(int l = 0; l < m; l++)
        {
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < m; j++)
                {
                    if((j != m - 1) && (arr[i][j] > arr[i][j + 1]))
                        swap(&arr[i][j],&arr[i][j + 1]);
                    else
                    {
                        if((i != n - 1) && (arr[i][j] > arr[i + 1][0]))
                            swap(&arr[i][j],&arr[i + 1][0]);
                    }
                }
            }
        }
    }
}
//---------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
    int n = 0, m = 0, **arr;
    cout << "Vvedite razmer strok: ";
    cin >> n;
    cout << "\n\nVvedite razmer stolbcov: ";
    cin >> m;
    arr = new int*[n];
    for(int i = 0; i < n; i++)
        *(arr + i) = new int[m];
    cout << "\n\nMatrica imeet vid: \n\n";
    rand(arr,n,m);
    print(arr,n,m);
    sort(arr,n,m);
    cout << "\n\nPosle sortirovki imeem: \n\n";
    print(arr,n,m);
    for(int i = 0; i < n; i++)
        delete []arr[i];
    delete []arr;
    _getch();
    return 0;
}
Yandex
Объявления
16.10.2012, 00:17     Отсортировать матрицу по возрастанию
Ответ Создать тему
Опции темы

Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru