Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
#1

Почему не сортируется массив? - C++

07.06.2017, 15:02. Просмотров 162. Ответов 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
int main(){
//объявление
int i,j,t,dl,m,max,num1,num2,stec,mass[60][60];
//вводим длину массива
    cin>>t;
    cin>>m;
    dl=m; // переменная, используемая в сортировке
//заполняем массив
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            mass[i][j]=0 + rand() % 9;  
        }
    }
cout<<endl;
//сортировка
for (i = 0; i <= t ; i++){
j=m;
max=mass[i][0];
while(dl!=0){
    
    if(max<mass[i][j]){
        max=mass[i][j];
        num1=i;
        num2=j;
        stec=mass[i][m];
        mass[i][m]=max;
        mass[num1][num2]=stec;
        }
        dl--;
    }
}
//вывод массива для проверки
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            cout<<mass[i][j]<<",";  
        }
        cout<<endl;
    }
    system("pause");
return 0;
}
Добавлено через 32 минуты
ошибка вышла, 26-27 строка за место m должно быть dl
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2017, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не сортируется массив? (C++):

Почему не сортируется массив? - C++
using namespace std; void scan(int * mass) { for( int i = 0; i &lt; 10; i++) { cin &gt;&gt; mass ; } } void print ( int * mass...

Почему не сортируется массив? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Rus&quot;); ...

Почему не сортируется массив? - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(){ int s = 9; ...

Почему не сортируется вектор структур? - C++
Выводится ошибка c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_algo.h:89: error: passing 'const Task' as 'this' argument...

Почему данная реализация связного списка не сортируется по убыванию? - C++
Сформировать список из вещественных чисел. Упорядочить список по убыванию. почему не сортирует по убыванию? Помогите, пожалуйста. ...

Массив не сортируется - C++
Здравствуйте. Программа не сортирует массив, не могу разобраться в чем проблема. Сортировка вставкой. (Да, я знаю,что она достаточно...

7
lawr
367 / 261 / 124
Регистрация: 09.05.2014
Сообщений: 769
07.06.2017, 15:06 #2
а какой именно алгоритм сортировки вы хотели применить? ну и маленькое замечание- итераторы не могут быть равными размерностям, иначе происходит выход за рамки массива.
0
jurok_85
241 / 225 / 78
Регистрация: 21.02.2013
Сообщений: 520
Завершенные тесты: 1
07.06.2017, 15:10 #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
#include <iostream>
using namespace std;
 
int main(){
    int i,j,t,dl,m,max,num1,num2,stec,mass[60][60],k;
//вводим длину массива
    cin>>t;
    cin>>m;
    dl=m; // переменная, используемая в сортировке
//заполняем массив
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            mass[i][j]=0 + rand() % 9;
        }
    }
cout<<endl;
//сортировка
for (i = 0; i <= t ; i++){
   for(j = 0; j <= m; j++){
        for(k = j+ 1; k <= m; k++){
                if(mass[i][j]> mass[i][k]){
                    stec = mass[i][j];
                    mass[i][j] = mass[i][k];
                    mass[i][k] = stec;
                }
        }
   }
}
//вывод массива для проверки
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            cout<<mass[i][j]<<",";
        }
        cout<<endl;
    }
    //system("pause");
return 0;
 
}
вот так попробуй. сильно код твой не разбирал. стиль в циклах плоховат - for (i = 0; i <= t ; i++), обычно если t это размер и отсчет с нуля начинаешь то лучше for (i = 0; i < t ; i++). а то в твоей программе заполняешь массив на 3 элемента а заполнится на 4
1
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:15  [ТС] #4
я не знаю как он называется, но сейчас объясню.
допустим есть одномерный массив, в котором 4 элемента, в нем мы ищем максимум и меняем его с последним местами, затем ищем максимум среди 3 элементов и перемещаем, затем в 2, получается после перемещения я беру все кроме последнего и так после каждого перемещения.
писал программу на эту сортировку с одномерным массивом, работает, затем хотел сделать тоже самое, но с 2-ым массивом, но он не сортирует.
на счет итераторов не совсем понял, это вы по поводу dl и m?
0
anapshy
136 / 140 / 57
Регистрация: 14.11.2016
Сообщений: 560
Завершенные тесты: 2
07.06.2017, 15:17 #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
#include <iostream>
#include <ctime>
#include <cstdlib>
int main(void) {
    int t , m, mass[60][60];            // Объявления
    srand(time(NULL));
    std::cin >> t >> m;                 // Размеры матрицы
    for (size_t i = 0; i <= t; i++)     // Заполняем матрицу
        for (size_t j = 0; j <= m; j++)
            mass[i][j] = 0 + rand() % 9;
    std::cout << std::endl;             // Выводим матрицу
    for (size_t i = 0; i <= t; i++) {
        for (size_t j = 0; j <= m; j++)
            std::cout << mass[i][j] << ",";
        std::cout << std::endl;
    }
    std::cout << std::endl;
    for(size_t n(0); n <= t; n++)       // Сортировка
        for(size_t i(0); i <= m; i++)
            for(size_t j(i+1); j <= m; j++)
                if (mass[n][i] > mass[n][j]) {
                    mass[n][j] += mass[n][i];
                    mass[n][i] = mass[n][j] - mass[n][i];
                    mass[n][j] -= mass[n][i];
 
                }
    for (size_t i = 0; i <= t; i++) {   // Вывод матрицы для проверки
        for (size_t j = 0; j <= m; j++)
            std::cout << mass[i][j] << ",";
        std::cout << std::endl;
    }
    system("pause");
    return 0;
}
0
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:31  [ТС] #6
спасибо большое! сортировка работает, сейчас буду исправлять свои ошибки.

Добавлено через 10 минут
конечно ваш вариант работает, но почему мой косячный ?
0
jurok_85
241 / 225 / 78
Регистрация: 21.02.2013
Сообщений: 520
Завершенные тесты: 1
07.06.2017, 15:36 #7
Цитата Сообщение от Мертон_69 Посмотреть сообщение
конечно ваш вариант работает, но почему мой косячный ?
Цитата Сообщение от Мертон_69 Посмотреть сообщение
j=m;
max=mass[i][0];
while(dl!=0){
if(max<mass[i][j]){
max=mass[i][j];
num1=i;
num2=j;
stec=mass[i][m];
mass[i][m]=max;
mass[num1][num2]=stec;
}
dl--; }
в самом начале здесь j = m, потом num1=i; num2=j; и stec=mass[i][m];
mass[i][m]=max;
mass[num1][num2]=stec;
здесь ни что ни на что не меняется
0
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:58  [ТС] #8
я может и заколебал уже, но хочу сделать свой код работоспособным, не всегда же у других решение брать...вообщем поменял код, он менять начал, но не во всех строках, и не сортирует....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (i = 0; i < t ; i++){
j=m;
max=mass[i][0];
while(j!=0){
    
    if(max<mass[i][j]){
        max=mass[i][j];
        num1=i;
        num2=j;
        stec=mass[i][m];
        mass[i][m]=max;
        mass[num1][num2]=stec;
        }
        j--;
    }
}
Добавлено через 15 секунд
0
07.06.2017, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2017, 15:58
Привет! Вот еще темы с ответами:

Определить время, за которое сортируется массив - C++
Подскажите как узнать время за которое отсортировался массив (mas) Внизу программы где используется InsertSort и массив уходит на...

Неправильно сортируется массив по возрастанию и не находится минимальный элемент - C++
#include &lt;windows.h&gt; #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; template &lt;class Type&gt; void vvod(Type *a,int n); ...

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Блинная сортировка массива, не сортируется последний элемент - C++
Товарищи офицеры. Прошу посмотреть мой код блинной сортировки для одномерного массива. Дело в том что он не сортирует последний элемент....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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