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

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

Войти
Регистрация
Восстановить пароль
 
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
#1

Сортировка матрицы - C++

26.10.2013, 16:16. Просмотров 751. Ответов 12
Метки нет (Все метки)

Всем привет! Прошу помощи в решении вот такой задачи:
Дана матрица (N+15)x(N+15) отсортировать главную диагональ, числа генерировать случайно в интервале [-N-15; N+15].
Никак не могу разобратся, особенно с сортировкой. Спасибо заранее!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 16:16     Сортировка матрицы
Посмотрите здесь:

Сортировка матрицы C++
C++ сортировка матрицы
C++ Сортировка матрицы
сортировка матрицы C++
Сортировка матрицы C++
C++ Сортировка матрицы
C++ Сортировка матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
26.10.2013, 16:29     Сортировка матрицы #2
тебе сортировать главную диагональ каким образом? элемент a[0][0] - самый маленький, элемент a[N-1][N-1] - самый большой? Пузырьковая сортировка пойдет?

Добавлено через 50 секунд
какое значение числа N? откуда его берем?

Добавлено через 4 минуты
была похожая задачка

По умолчанию Матрицы. Отсортировать четные столбцы в обратном порядке, а нечетные в прямом
Пожалуйста, помогите написать программу на С++

Программа Visual studio 2012 (Если важно)

Дана матрица (N+15)x(N+15) отсортировать четные столбцы в обратном порядке, а нечетные в прямом, числа генерировать случайно в интервале [-N-15; N+15]

Заранее большое спасибо.

Матрицы. Отсортировать четные столбцы в обратном порядке, а нечетные в прямом
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
26.10.2013, 16:38  [ТС]     Сортировка матрицы #3
Там без разницы как сортировать. Число N вводит пользователь. Спасибо, сейчас посмотрю задачку..
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
26.10.2013, 16:56     Сортировка матрицы #4
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
#include <cstdlib>
#include <stdio.h>
#include <ctime>
 
using namespace std;
 
int main()
{
    int matrix_size;
    int N;
 
    printf("Enter N: ");
    scanf("%d",&N);
    matrix_size=N+15;
 
    int matrix[matrix_size][matrix_size]; // матрица
    bool replace;    // необходимость перестановок (true - перестановки нужны)
    int per;         // переменная, которая используется при перестановки элементов
 
 
    // засеиваем ГСЧ
    srand(time(0));
 
    // заносим значения в матрицу
    for(int i=0; i<matrix_size; i++)
    {
        for(int j=0; j<matrix_size; j++)
        {
            matrix[i][j] = -matrix_size + rand()%(2*matrix_size+1);
        }
    }
 
    // вывод исходной матрицы
    printf("StArT mAtRiX:\n");
    for(int i=0; i<matrix_size; i++)
    {
        for(int j=0; j<matrix_size; j++)
        {
            printf("%3d", matrix[i][j]);
        }
        printf("\n");
    }
 
    replace=true;
    while(replace!=false)
    {
        replace=false;
        for(int i=0; i<matrix_size-1; i++)
        {
            if(matrix[i][i]>matrix[i+1][i+1])
            {
                replace = true;
                per = matrix[i][i];
                matrix[i][i] = matrix[i+1][i+1];
                matrix[i+1][i+1] = per;
            }
        }
    }
 
    // вывод измененной матрицы
    printf("\n\nReSuLt mAtRiX:\n");
    for(int i=0; i<matrix_size; i++)
    {
        for(int j=0; j<matrix_size; j++)
        {
            printf("%3d ", matrix[i][j]);
        }
        printf("\n");
    }
 
        getchar();
 
    return 0;
}
Добавлено через 50 секунд
протесть, вроде норм работает) если вопросы, пиши)
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.10.2013, 18:36     Сортировка матрицы #5
Мой вариант с динамическим массивом
C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
 
 
template <typename T>
void func()
{
    srand(time(0)); // инициализация генератора случайных чисел.
 
    int N=0; // размер квадратной матрицы
 
    cout << "Введите N от 2 до " << pow(2, 8*sizeof(T)) << ":\n"; 
 
    while(N < 2) { 
        cin >> N;
        cout << "Введите N от 2 до " << pow(2, 8*sizeof(T)) << ":\n"; 
    }
 
    // Создание двумерного динамического массива квадратной матрицы N x N
    int **a = new int*[N];
    for(int i=0; i<N; i++)
        a[i] = new int[N];
 
    // Заполнение случайными числами от 0 до 9
    for(T i = 0; i < N; i++)
    {
        for(T j = 0; j < N; j++) a[i][j] = rand()%10;
        cout << "\n";
    }
 
    // Вывод на экран исходной матрицы
    for(T i = 0; i < N; i++)
    {
        for(T j = 0; j < N; j++) cout << a[i][j] << " ";
        cout << "\n";
    }
    cout << "\n";
 
    int b;
    // Сортировка главной диагонали по возрастанию
    for(T x=0,y=0; x < N; x++,y++)
        for(T i=0,j=0; i < N; i++,j++)
            if(a[x][y] < a[i][j]) {
                b = a[x][y];
                a[x][y] = a[i][j];
                a[i][j] = b;
            }
 
 
    // Вывод на экран конечной матрицы
    for(T i = 0; i < N; i++) {
        for(T j = 0; j < N; j++) cout << a[i][j] << " ";
        cout << "\n";
    }
    cout << "\n";
 
    // Удаление двумерного динамического массива
    for (T i = 0; i < N; i++) delete [] a[i];
    delete [] a;
}
 
 
int main()
{
    func <unsigned long int> ();
}
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
28.10.2013, 19:43  [ТС]     Сортировка матрицы #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
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
//matrix2.h - файл с прототипами функций
 
int**create (int coll, int row);
int sort (int**matr, int coll, int row);
void show (int**matr, int coll, int row);
 
 
 
//matrix2.cpp - файл реализации функций
 
#include <iostream>
#include "matrix2.h"
using namespace std;
int **create (int coll, int row)
{
    // row - строки
    // coll - столбцы
 
    int **matrix;
    matrix = new int *[row]; 
    int n;
 
      for (int i=0; i<row; i++)
      {
         matrix[i] = new int [coll]; 
      }
 
        for (int i=0; i<row; i++)
            {
                for (int j=0; j<coll; j++)
                {
                    matrix[i][j] = rand()%(n+1);
 
                        if(rand()%2==0)
                            {
                                matrix[i][j]=matrix[i][j]*(-1);
                            }  
                }
    
            }
 
    return matrix;
}
 
 
int sort (int**matr, int coll, int row);
[COLOR="Red"]{[/COLOR]
    int matrix_size;
    int n, per;
    matrix_size = n+15;
 
     for(int i=0; i<matrix_size-1; i++)
                {
                    if(matrix[i][j]>matrix[i+1][j])
                    {
                        per = matrix[i][j];
                        matrix[i][j] = matrix[i+1][j];
                        matrix[i+1][j] = per;
                    }
                }
     return per;
}
    
void show (int **matrix, int coll, int row)
 
{
    for (int i=0; i<row; i++)
    {
        for (int j=0; j<coll; j++)
        {
            cout<<matrix[i][j]<<'\t';
        }
        cout<<'\n';
    }
}
 
 
// lab2.cpp - главный файл
 
#include <iostream>
#include "matrix2.h"
using namespace std;
int main ()
{
    int row, coll, n, **matr;
 
 
        cout<<"Vvedite luboe chislo N  :";
        cin>>n;
        row = n + 15;           
        coll = n + 15;          
        matr = create (coll, row);  
        cout << "Ishodnaja matrica  :"<<'\n';
        show (matr, coll, row);
        cout << "Sortirovka matricu  :"<<'\n';
        sort (matr, coll, row);
    system ("pause");
    return 0;
}

В итоге выбивает ошибки:

1.error C2447:{: отсутствует заголовок функции (возможно, используется формальный список старого типа)
2. IntelliSense: требуется обьявление (после int sort подчеркивает скобку)

Добавлено через 26 минут
Нашла ошибки, исправила. Теперь функция sort выглядит так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int sort (int**matr, int coll, int row)
{
    int matrix_size;
    int n, per;
    matrix_size = n+15;
 
     for(int i=0; i<matrix_size-1; i++)
                {
                    if(matr[row][coll]>matr[row+1][coll])
                    {
                        per = matr[row][coll];
                        matr[row][coll] = matr[row+1][coll];
                        matr[row+1][coll] = per;
                    }
                }
     return per;
}
Но опять же выбивает ошибку waring C4700: использована неинициализированная локальная переменная n.
Как можно инициализировать переменную n, если ее задает сам пользователь?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.10.2013, 19:50     Сортировка матрицы #7
Цитата Сообщение от Rokky Посмотреть сообщение
Как можно инициализировать переменную n, если ее задает сам пользователь?
Добавь это:
C++
cout << "Введите n";
cin >> n;
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
28.10.2013, 20:17  [ТС]     Сортировка матрицы #8
Добавила в int**create. Но теперь у меня число N у меня запрашивает 2 раза. Потом построилась матрица, которая по ширине на 10 элементов (хотя должна быть на 18 элементов при n=3) и сама закрылась. Выбило ошибку (смотрите скриншот).
Миниатюры
Сортировка матрицы   Сортировка матрицы  
Scythian
 Аватар для Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
28.10.2013, 20:35     Сортировка матрицы #9
В функциях переменная n неизвестна. Если она задается пользователем - пропишите ее в параметра функции

Добавлено через 7 минут
Цитата Сообщение от Rokky Посмотреть сообщение
Как можно инициализировать переменную n, если ее задает сам пользователь?
C++
1
int n=0;
Ну хоть бы вот так
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
28.10.2013, 20:59  [ТС]     Сортировка матрицы #10
Ура! С переменной n разобрались Но матрица-то всеравно какая-то странная получается. Допустим при n=4 - матрица должна быть 19х19 (т.к. matrix_size=n+15). А она вот какая... И сортироватся вовсе не хочет
Миниатюры
Сортировка матрицы  
Scythian
 Аватар для Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
28.10.2013, 21:13     Сортировка матрицы #11
Ну думаю после сортировки нужно вывести матрицу, нет? И фукция сортировки у вас на void!Так ч то думаю нужно как-то так:
Цитата Сообщение от Rokky Посмотреть сообщение
C++
1
2
3
4
matr=sort (matr, coll, row);
show(matr,coll,row);
system ("pause"); 
return 0;

Это должно помочь.. С размерностью сейчас посмотрим..Выложите ваш конечный код
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
28.10.2013, 21:36  [ТС]     Сортировка матрицы #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
93
94
95
96
97
98
99
100
101
// прототипы функций
int**create (int coll, int row);
int sort (int**matr, int coll, int row);
void show (int**matr, int coll, int row);
 
 
// реализация
#include <iostream>
#include "matrix2.h"
using namespace std;
int **create (int coll, int row)
{
    // row - строки
    // coll - столбцы
 
    int **matrix;
    matrix = new int *[row];
    int n=0;
    
    
      for (int i=0; i<row; i++)
      {
         matrix[i] = new int [coll]; 
      }
 
        for (int i=0; i<row; i++)
            {
                for (int j=0; j<coll; j++)
                {
                    matrix[i][j] = rand()%(n+15);
 
                        if(rand()%2==0)
                            {
                                matrix[i][j]=matrix[i][j]*(-1);
                            }  
                }
    
            }
 
    return matrix;
}
 
 
int sort (int**matr, int coll, int row)
{
    int matrix_size;
    int n =0;
    int per;
    matrix_size = n+15;
 
     for(int i=0; i<matrix_size-1; i++)
                {
                    for(int j=0; j<matrix_size-1; j++)
                    {
                        if(matr[row+1][coll]<matr[row][coll])
                    {
                        per = matr[row][coll];
                        matr[row][coll] = matr[row+1][coll];
                        matr[row+1][coll] = per;
                    }
                    }
                }
     return per;
}
    
void show (int **matrix, int coll, int row)
 
{
    for (int i=0; i<row; i++)
    {
        for (int j=0; j<coll; j++)
        {
            cout<<matrix[i][j]<<'\t';
        }
        cout<<'\n';
    }
}
 
 
// главный файл
#include <iostream>
#include "matrix2.h"
using namespace std;
int main ()
{
    int row, coll, n, **matr;
 
 
        cout<<"Vvedite luboe chislo N  :";
        cin>>n;
        row = n + 15;           
        coll = n + 15;
        matr = create (coll, row);  
        cout << "Ishodnaja matrica  :"<<'\n';
        show (matr, coll, row);
        cout << "Sortirovka matricu  :"<<'\n';
        matr = sort (matr, coll, row);
        show (matr, coll, row);
    system ("pause");
    return 0;
}
В строчке
C++
1
2
 matr = sort (matr, coll, row);
        show (matr, coll, row);
ошибка: error C2440: невозможно преобразовать "int" в "int **".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 22:01     Сортировка матрицы
Еще ссылки по теме:

C++ Сортировка матрицы 5*5
C++ Сортировка матрицы
Сортировка матрицы C++
Сортировка матрицы C++
Сортировка матрицы C++

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

Или воспользуйтесь поиском по форуму:
Scythian
 Аватар для Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
28.10.2013, 22:01     Сортировка матрицы #13
Я вот не пойму: какое условие сортировки? Упорядочить элементы в столбцах?
А так вот ваш код работающий(только вот что нужно я не понял)
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
// прототипы функций
int**create (int coll, int row);
int **sort (int**matr, int coll, int row);
void show (int**matr, int coll, int row);
 
 
// реализация
#include <iostream>
#include "matrix2.h"
using namespace std;
int **create (int coll, int row)
{
    // row - строки
    // coll - столбцы
 
    int **matrix;
    matrix = new int *[row];
    
    
      for (int i=0; i<row; i++)
      {
         matrix[i] = new int [coll]; 
      }
 
        for (int i=0; i<row; i++)
            {
                for (int j=0; j<coll; j++)
                {
                    matrix[i][j] = rand()%(row);
                     if(rand()%2==0)
                            {
                                matrix[i][j]=matrix[i][j]*(-1);
                            }  
                 
                }
    
            }
 
    return matrix;
}
 
 
int **sort (int**matr, int coll, int row)
{
    int matrix_size;
    int per;
    matrix_size = row;
 
     for(int i=0; i<matrix_size-1; i++)
                {
                    for(int j=0; j<matrix_size; j++)
                    {
                        if(matr[i+1][j]<matr[i][j])
                    {
                        per = matr[i][j];
                        matr[i][j] = matr[i+1][j];
                        matr[i+1][j] = per;
                    }
                    }
                }
     return matr;
}
    
void show (int **matrix, int coll, int row)
 
{
    for (int i=0; i<row; i++)
    {
        for (int j=0; j<coll; j++)
        {
            cout<<matrix[i][j]<<"  ";
        }
        cout<<'\n';
    }
}
 
 
// главный файл
#include <iostream>
#include "matrix2.h"
using namespace std;
int main ()
{
    int row, coll, n, **matr;
 
 
        cout<<"Vvedite luboe chislo N  :";
        cin>>n;
        row = n+15 ;           
        coll = n+15;
        matr = create (coll, row);  
        cout << "Ishodnaja matrica  :"<<'\n';
        show (matr, coll, row);
        cout << "Sortirovka matricu  :"<<'\n';
        matr = sort (matr, coll, row);
        show (matr, coll, row);
    system ("pause");
    return 0;
}
Yandex
Объявления
28.10.2013, 22:01     Сортировка матрицы
Ответ Создать тему
Опции темы

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