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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Перемещение курсора по матрице http://www.cyberforum.ru/cpp-beginners/thread863777.html
дана матрица 3х3 из букв a, b, c for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { m=rand()%3; cout.width(3); switch(m) { case 0:cout<<"a";break;
C++ Не могу подключить файлы из BGI для <graphics.h> На этапе линка, компилятор (Borland C++ 6.0) выдает ошибку: Fatal: expected a ':' or '=': bgi Компилирую через cmd: bcc32 -lbgi CAL.CPP В программе сначала пробовал указать в initgraph(..) путь к файлу "EGAVGA.BGI", потом ставил просто путь к папке BGI досовской версии. P.S Код программы - рабочий, запустил свой старый курсовик еще с первого курса с дос графикой. P.S.S. ОС: Win XP... http://www.cyberforum.ru/cpp-beginners/thread863759.html
Выход за пределы вектора C++
Проблэм: запускается, но после записи символов выдает ошибку, мол, вектор вышел за пределы... Как исправить кто знает? #include "stdafx.h" #include <iostream> #include <conio.h> #include <string.h> #include <sstream> #include <vector> #include "function_prog.h" #pragma comment(lib, "fmodex_vc.lib")
Создание DLL и EXE в одном проекте C++
Привет всем, я хочу создать большой проект и встала одна очень маленькая проблема, я чтобы не запутаться создал такую систему несколько фалов main.cpp основной код программы classMap.сpp функции класса карты classMap.h - хидер чтобы подключить .cpp содержит конструкцию класса и небольшие структуры Draw.cpp имеет функцию отрисовки на экран (для OpenGL glut) Draw.h хидер для Draw.cpp ... ...
C++ Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел http://www.cyberforum.ru/cpp-beginners/thread863747.html
Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.
C++ Составить алгоритм и программу рисование простейших фигуры Написать программу, которая вычерчивает на экране узор из 100 окружностей случайного диаметра и цвета. подробнее

Показать сообщение отдельно
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
15.05.2013, 08:26     Матрица, метод пузырька
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;
}
 
Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru