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

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

Восстановить пароль Регистрация
 
random7
1 / 1 / 0
Регистрация: 18.09.2009
Сообщений: 24
18.06.2010, 17:02     Сортировка участка матрицы #1
Помогите пожалуйста, надо на С++ написать такую прогу: пользователь вводит размерность квадратной матрицы, она рандомно заполняется элементами от 0 до 99, выводится на экран. Затем ее участок (на рисунке) сортируется: столбцы по возрастанию, а все остальное заполняется нулями.
Отсортированная матрица выводится на экран. Сделать все надо через подпрограммы, т. е. раздел main должен содержать только их вызовы.
Сортировка участка матрицы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2010, 17:02     Сортировка участка матрицы
Посмотрите здесь:

Сортировка матрицы C++
Сортировка матрицы C++
сортировка матрицы C++
Сортировка матрицы C++
C++ Сортировка матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
random7
1 / 1 / 0
Регистрация: 18.09.2009
Сообщений: 24
18.06.2010, 18:42  [ТС]     Сортировка участка матрицы #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
43
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    int n;
    cout << "Vvedite razmer: " << endl;
    cin >> n;
    int m[n][n];
    for (int x=0; x<n; ++x)
        for (int y=0; y<n; ++y)
           m[x][y]=rand() & 100 - 1;
    //Вывод матрицы:
    for (int x=0; x<n; ++x)
    {
        for (int y=0; y<n; ++y)
        cout << setw(2)<< m[x][y] << " ";
        cout << endl;
        cout << endl;
    }
    //Сортировка далее:
        cout << endl;
        cout << endl;
    for (int x=0; x<n; ++x)
        for (int y=0; y<n; ++y)
        {
            if (y>x-1 && y<=n-x-1 && y>=n/2)
                m[x][y]=77;
            else m[x][y]=0;
        }
    //Вывод матрицы:
    for (int x=0; x<n; ++x)
    {
        for (int y=0; y<n; ++y)
        cout << setw(2)<< m[x][y] << " ";
        cout << endl;
        cout << endl;
    }
}
Здесь нет собственно сортировки. В принципе сортировку я делать умею, но если точно по заданию то мне нужна "обменная сортировка с флагом перестановки", а вот как ее делать хз
И еще вопрос: Мне надо сделать оконный интерфейс: 4 окна: информационное, диалоговое для ввода данных и два окна с матрицами. Как бы попроще их сделать. Делаю в CodeBlocks.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
18.06.2010, 20:06     Сортировка участка матрицы #3
Цитата Сообщение от random7 Посмотреть сообщение
Мне надо сделать оконный интерфейс: 4 окна: информационное, диалоговое для ввода данных и два окна с матрицами. Как бы попроще их сделать. Делаю в CodeBlocks.
Хороший вопрос, +1.
random7
1 / 1 / 0
Регистрация: 18.09.2009
Сообщений: 24
21.06.2010, 18:04  [ТС]     Сортировка участка матрицы #4
Помогите пожалуйста разобраться... Эта прога должна заполнять белую область нулями (см 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
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
int main()
{
    int n;
    cout << "Vvedite razmer: " << endl;
    cin >> n;
    int m[n][n];
    for (int x=0; x<n; ++x)
        for (int y=0; y<n; ++y)
           m[x][y]=rand() & 100 - 1;
    //Вывод матрицы:
    for (int x=0; x<n; ++x)
    {
        for (int y=0; y<n; ++y)
        cout << setw(2)<< m[x][y] << " ";
        cout << endl;
        cout << endl;
    }
        //Сортировка матрицы:
        cout << endl;
        cout << endl;
        for (int x=0; x<n; ++x) {
        for (int y=0; y<n; ++y) {
          if (x>n/2 || y<n/2 || y>n-x-1)
              m[x][y]=0;
        }
        }
        for (int x=0; x<n; ++x) {
        for (int y=0; y<n; ++y) {
          if (y>x-1 && y<=n-x-1 && y>=n/2)
              {
                for (int y=0; y<n; ++y) {
                 for (int c=n; c>=1; --c) {
                  for (int x=0; x<c; ++x) {
                        if (m[x-1][y]<m[x][y])
                          {
                              int z=m[x-1][y];
                              m[x-1][y]=m[x][y];
                              m[x][y]=z;
                          }
                        }
                      }
                    }
               }
 
        }
        }
    //Вывод матрицы:
    for (int x=0; x<n; ++x)
    {
        for (int y=0; y<n; ++y)
        cout << setw(2)<< m[x][y] << " ";
        cout << endl;
        cout << endl;
    }
}
И еще пара вопросов:
1) Как сделать чтобы матрица заполнялась числами от 1 до 99?
2) Как вынести например вывод матрицы в отдельную функцию?
Yandex
Объявления
21.06.2010, 18:04     Сортировка участка матрицы
Ответ Создать тему
Опции темы

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