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

Матрица, метод пузырька - C++

Восстановить пароль Регистрация
 
YamateH
9 / 8 / 1
Регистрация: 13.09.2012
Сообщений: 141
13.05.2013, 19:12     Матрица, метод пузырька #1
Доброе время суток всем. Задали сделать данную задачку. Дана матрица, j-столбцы, i-элементы. Вывести первоначальную, затем вторую для сравнения. Вообще без понятия как делать( С С++ знаком весьма прозаично, прошу помочь состряпать и разобраться в примере. Заранее спасибо за Ваше внимание к теме. На скриншоте представлен мой вариант матрицы.
Миниатюры
Матрица, метод пузырька  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 19:12     Матрица, метод пузырька
Посмотрите здесь:

Метод пузырька C++
Метод обратного пузырька(камешка) C++
C++ Обратный метод пузырька
Как работает метод Пузырька? C++
Метод пузырька C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YamateH
9 / 8 / 1
Регистрация: 13.09.2012
Сообщений: 141
14.05.2013, 07:38  [ТС]     Матрица, метод пузырька #2
Ап, помогите пожалуйста(
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
14.05.2013, 08:40     Матрица, метод пузырька #3
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 <stdio.h>
#include <conio.h>
 
#define N 5
 
bool sorted(int A[N][N]);
void swap(int& n1, int& n2);
 
int main(int argc, char* argv[])
{
    int A[N][N] = { { 3, 4, 5, 6, 1 },
                    { 2, 3, 9, 6, 5 },
                    { 7, 1, 4, 3, 8 },
                    { 6, 5, 3, 2, 9 },
                    { 1, 7, 8, 5, 4 } };
 
    for (int t1 = 0; t1 < N; t1++)
    {
        for (int t2 = 0; t2 < N; t2++)
            printf("%d ",A[t1][t2]);
 
        printf("\n");
    }
 
    printf("\n\n");
 
    do {
            int i = 0, j = 0;
            while (i < N)
            {
                if (j >= N) { j = 0; i++; }
 
                if (j == N-1 && i != N-1 && A[i][j] > A[i+1][0]) 
                    swap(A[i][j],A[i+1][0]);
                else if (i < N && j != N-1 && A[i][j] > A[i][j+1]) 
                    swap(A[i][j],A[i][j+1]);
 
                j++;
            }
 
    } while(!sorted(A));
 
    for (int q = 0; q < N; q++)
        for (int m = 0, n = N-1; m < N/2 && (q % 2) != 0; m++, n--)
            swap(A[q][m],A[q][n]);
            
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",A[z1][z2]);
 
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
 
bool sorted(int A[N][N])
{
    int i = 0, j = 0;
    while (i < N)
    {
        if (j >= N) { j = 0; i++; }
 
        if (j == N-1 && i != N-1 && A[i][j] > A[i+1][0]) 
            return false;
        else if (i < N && j != N-1 && A[i][j] > A[i][j+1]) 
            return false;
 
        j++;
    }
 
    return true;
}
http://codepad.org/zaLSi7Aj
Миниатюры
Матрица, метод пузырька  
YamateH
9 / 8 / 1
Регистрация: 13.09.2012
Сообщений: 141
14.05.2013, 10:15  [ТС]     Матрица, метод пузырька #4
zitxbit, Спасибо огромное Вам!
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
15.05.2013, 08:26     Матрица, метод пузырька #5
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <stdio.h>
#include <conio.h>
 
#define N 5
 
bool sorted(int A[N][N]);
void swap(int& n1, int& n2);
 
int main(int argc, char* argv[])
{
    // Объявляем квадратную матрицу A размером NxN (N = 5)
    int A[N][N] = { { 3, 4, 5, 6, 1 },
                    { 2, 3, 9, 6, 5 },
                    { 7, 1, 4, 3, 8 },
                    { 6, 5, 3, 2, 9 },
                    { 1, 7, 8, 5, 4 } };
 
    // Выводим на экран элементы исходной матрицы:
    // В цикле изменяем значение счетчика строк матрицы t1 от 0 до N-1
    for (int t1 = 0; t1 < N; t1++)
    {
        // Для каждого значения t1 от 0 до N-1 выполняем цикл:
        // В цикле изменяем значение счетчика элементов каждой строки
        // t2 от 0 до N-1. 
        for (int t2 = 0; t2 < N; t2++)
            // Для каждого значения t2 выполняем операцию получения 
            // значения элемента матрицы A[t1][t2]. Далее выводим
            // выводим полученный элемент массива на экран:
            printf("%d ",A[t1][t2]);
 
        // После вывода каждого элемента заданной строки выполняем
        // печать символа перехода на другую строку (LF).
        printf("\n");
    }
 
    printf("\n\n");
 
    // Сортировка методом пузырька:
 
    do {
            // Объявляем две переменные-счетчика i - счетчик строк,
            // j - счетчик элементов каждой строки (столбцов).
            int i = 0, j = 0;
            // Выполняем цикл до тех пор пока значение i < N.
            // В цикле изменяем значение переменной j от 0 до N-1
            while (i < N)
            {
                // При каждой итерации цикла выполяем проверку: 
                // если j приняло значение j >= N, то счетчик
                // j присвается значение 0, а счетчик i увеличивает значение на 1.
                if (j >= N) { j = 0; i++; }
 
                // Выполняем проверку: если j принимает значение индекса последнего
                // элемента i-й строки и данная строка не является последней (i != N-1), 
                // то этот элемент A[i][j] сравнивается с первым элементом следующей строки
                // A[i+1][0]. Если элемент A[i][j] больше элемента A[i+1][0], то выполняется
                // обмен данных элементов (элементы меняются местами).
                if (j == N-1 && i != N-1 && A[i][j] > A[i+1][0]) 
                    swap(A[i][j],A[i+1][0]);
                // В противном случае выполняем проверку оба рядом стоящих элемента одной строки
                // Аналогично если элемент A[i][j] > A[i][j+1], то выполняем обмен элементов
                else if (i < N && j != N-1 && A[i][j] > A[i][j+1]) 
                    swap(A[i][j],A[i][j+1]);
 
                j++; // при каждой итерации увеличиваем значение счетчика j на 1
            }
    // Далее выполняем с помощью функции bool sorted(int A[N][N]) выполняем проверку
    // отсортирована ли матрица (функция sorted(A) после выполнения возвращает значение
    // sorted(A) == false <=> !sorted(A), если нет возвращаемя в начало цикла.
    } while(!sorted(A));
 
    // В цикле изменяем значение переменной-счетчика строк q от 0 до N-1
    // При каждой итерации проверяем если q не делится на два нацело q % 2 != 0,
    // то значение индекса текущей строки является нечетным (1,3,5,7,...).
    // В таком случае выполняется цикл, в цикле изменяем значения счетчиков
    // m от 0 до N/2 и n от N-1 до N/2. Значениями данных счетчиков являются
    // элементы q-той строки, которые берутся по одному элементу с начала и с конца
    // строки соответственно (A[0],A[N-1]), (A[1],A[N-2]), (A[2],A[N-3]),...
    for (int q = 0; q < N; q++)
        for (int m = 0, n = N-1; m < N/2 && (q % 2) != 0; m++, n--)
            // Выполняется обмен (пары элементов меняются местами).
            swap(A[q][m],A[q][n]);
            
 
    // Выводим на экран элементы полученной матрицы:
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",A[z1][z2]);
 
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
 
bool sorted(int A[N][N])
{
    // !!! Функция sorted работает аналогично фрагменту кода сортировки !!!
    
    // Объявляем две переменные-счетчика i - счетчик строк,
    // j - счетчик элементов каждой строки (столбцов).
    int i = 0, j = 0;
    // Выполняем цикл до тех пор пока значение i < N.
    // В цикле изменяем значение переменной j от 0 до N-1
    while (i < N)
    {
        // При каждой итерации цикла выполяем проверку: 
        // если j приняло значение j >= N, то счетчик
        // j присвается значение 0, а счетчик i увеличивает значение на 1.
        if (j >= N) { j = 0; i++; }
 
        // Выполняем проверку: если j принимает значение индекса последнего
        // элемента i-й строки и данная строка не является последней (i != N-1), 
        // то этот элемент A[i][j] сравнивается с первым элементом следующей строки
        // A[i+1][0]. Если элемент A[i][j] больше элемента A[i+1][0], то выполняется
        // функция возвращает значение false
        if (j == N-1 && i != N-1 && A[i][j] > A[i+1][0]) 
            return false;
        // В противном случае выполняем проверку оба рядом стоящих элемента одной строки
        // Аналогично если элемент A[i][j] > A[i][j+1], то функция возвращает значение false
        else if (i < N && j != N-1 && A[i][j] > A[i][j+1]) 
            return false;
 
        j++; // при каждой итерации увеличиваем значение счетчика j на 1
    }
 
    return true;
}
Yandex
Объявления
15.05.2013, 08:26     Матрица, метод пузырька
Ответ Создать тему
Опции темы

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