Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126

Сортировка выбором

04.01.2013, 14:07. Показов 1665. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте товарищи. Есть к вам одни вопрос.
Есть задание-
. Дана целочисленная квадратная матрица. Определить:
• номер строки, в которой содержится более одного заданного числа;
• упорядочить элементы побочной диагонали массива по возрастанию методом выбора.


Я осилил все кроме сортировки.Я понимаю сам метод, как сортировать и до меня дошло, как подвергнуть сортировке только побочную диагональ, НО я не могу понять саму реализацию. В одномерном массиве все более менее понятно, но в матрице я теряюсь, помогите пожалуйста.

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
#include <iostream>
using namespace std;
#include <math.h>
#include <conio.h>
#include <windows.h>  
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int n=3;
    int mas[n][n],i,j,k,imax;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            cin>>mas[i][j];
    cout<<"Введите число";
    cin>>k;
    int s;
for(i=0;i<n;i++)
{   
s=0;
    for(j=0;j<n;j++)
    
        if(mas[i][j]==k)
        
            s++;
    
            if(s>1)
            {
                imax=i+1;
                cout<<imax;
            }
for(j=n-1, i=0; i<n; i++, j--)
{
 
    
 
 
 
 
 
}
_getch();
return 0;
}
Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.01.2013, 14:07
Ответы с готовыми решениями:

Сортировка выбором
Сортировка выбором. Дана последовательность чисел а1, а2,..., аn. Требуется переставить элементы так, чтобы они были расположены по...

Сортировка выбором
Добрый день, я заметил, что при сортировке массива из N элементов по алгоритму сортировки &quot;Выбором&quot;, количество смены местами...

Сортировка выбором
Выбираeтся минимaльный элeмeнт в мaссивe и пeрeнoсится в нoвый массив. 3aтем нa его местo записывается последний элемент исходного массива.

10
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.01.2013, 00:22
Вот подправил твою программу, второе задание сделал методом пузырька, уже вечер, мозги думать не хотят, думаю там уже сам сможешь, если нет, то пиши, помогу чем смогу

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>  
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int const n = 3;
    int mas[n][n], k, imax;
 
    cout << "Введите матрицу: \n";
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i+1 << "][" << j+1 << "]: ";
            cin >> mas[i][j];
        }
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
 
    cout << "\n\nВведите число: ";
        cin >> k;
 
    int s;
    bool flag;
    for(int i = 0; i < n; i++)
    {   
        s = 0;
        flag = false;
        for(int j = 0; j < n; j++)
        {
            if(mas[i][j] == k)
            {    
                s++;
                if(s > 1)
                {
                    imax = i + 1;
                    flag = true;
                }
            }
        }
 
        if(flag == true)
            cout << "\nНомер строки: " << imax;
 
    }
 
    int t, g = 1;
    for(int j = 0, f = n-g; j < n; j++, f--)
    {
 
        for(int i = j+1, l = n-(g+1); i < n; i++, l--)
        {
            if(mas[f][j] < mas[l][i])
            {
                t = mas[l][i];
                mas[l][i] = mas[f][j];
                mas[f][j] = t;
            }
        }
 
        g++;
    }
 
    cout << "\nОтсортированная матрица:\n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
        
    cout << "\n\n";
    return 0;
}
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 00:26
Если тс, не знает где на форуме описаны сортировки, то они описаны здесь Алгоритмы сортировок
0
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
05.01.2013, 12:22  [ТС]
Цитата Сообщение от David Sylva Посмотреть сообщение
Если тс, не знает где на форуме описаны сортировки, то они описаны здесь Алгоритмы сортировок
Поверь, знаю,смотрел, да и у меня есть такой материал. Я ж говорю, я понимаю сам процесс, но не могу его правильно реализовать(

Добавлено через 1 минуту
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Вот подправил твою программу, второе задание сделал методом пузырька, уже вечер, мозги думать не хотят, думаю там уже сам сможешь, если нет, то пиши, помогу чем смогу

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>  
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int const n = 3;
    int mas[n][n], k, imax;
 
    cout << "Введите матрицу: \n";
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i+1 << "][" << j+1 << "]: ";
            cin >> mas[i][j];
        }
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
 
    cout << "\n\nВведите число: ";
        cin >> k;
 
    int s;
    bool flag;
    for(int i = 0; i < n; i++)
    {   
        s = 0;
        flag = false;
        for(int j = 0; j < n; j++)
        {
            if(mas[i][j] == k)
            {    
                s++;
                if(s > 1)
                {
                    imax = i + 1;
                    flag = true;
                }
            }
        }
 
        if(flag == true)
            cout << "\nНомер строки: " << imax;
 
    }
 
    int t, g = 1;
    for(int j = 0, f = n-g; j < n; j++, f--)
    {
 
        for(int i = j+1, l = n-(g+1); i < n; i++, l--)
        {
            if(mas[f][j] < mas[l][i])
            {
                t = mas[l][i];
                mas[l][i] = mas[f][j];
                mas[f][j] = t;
            }
        }
 
        g++;
    }
 
    cout << "\nОтсортированная матрица:\n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
        
    cout << "\n\n";
    return 0;
}
В том то и печаль,что вид сортировки указан, так бы я тоже пузырьком делал(
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 12:24
Lotus34 Что конкретно, не понятно, сортировка очень простая.Имею ввиду конкретно в процессе.
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.01.2013, 12:47
Lotus34, ну вот посмотри:

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>  
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int const n = 3;
    int mas[n][n], k, imax;
 
    cout << "Введите матрицу: \n";
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i+1 << "][" << j+1 << "]: ";
            cin >> mas[i][j];
        }
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
 
    cout << "\n\nВведите число: ";
        cin >> k;
 
    int s;
    bool flag;
    for(int i = 0; i < n; i++)
    {   
        s = 0;
        flag = false;
        for(int j = 0; j < n; j++)
        {
            if(mas[i][j] == k)
            {    
                s++;
                if(s > 1)
                {
                    imax = i + 1;
                    flag = true;
                }
            }
        }
 
        if(flag == true)
            cout << "\nНомер строки: " << imax;
 
    }
 
    int t, g = 1;
    for(int j = 0, f = n-g; j < n; j++, f--)
    {
        int pos_str = f, pos_stb = j; 
        t = mas[f][j];
        for(int i = j+1, l = n-(g+1); i < n; i++, l--)
        {
            if (mas[l][i] > t) 
            {
                 pos_str = l;
                 pos_stb = i;
                 t = mas[l][i]; 
            }
        }
 
        mas[pos_str][pos_stb] = mas[f][j]; 
        mas[f][j] = t; // меняем местами наименьший с a[i]
        g++;
    }
 
    cout << "\nОтсортированная матрица:\n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
        
    cout << "\n\n";
    return 0;
}
1
05.01.2013, 13:55

Не по теме:

Цитата Сообщение от Lotus34 Посмотреть сообщение
Я ж говорю, я понимаю сам процесс, но не могу его правильно реализовать(
Значит не да конца понимаете. Листочек, ручку и вперед прогонять.

0
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
06.01.2013, 16:40  [ТС]
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Вот подправил твою программу, второе задание сделал методом пузырька, уже вечер, мозги думать не хотят, думаю там уже сам сможешь, если нет, то пиши, помогу чем смогу

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>  
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int const n = 3;
    int mas[n][n], k, imax;
 
    cout << "Введите матрицу: \n";
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i+1 << "][" << j+1 << "]: ";
            cin >> mas[i][j];
        }
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
 
    cout << "\n\nВведите число: ";
        cin >> k;
 
    int s;
    bool flag;
    for(int i = 0; i < n; i++)
    {   
        s = 0;
        flag = false;
        for(int j = 0; j < n; j++)
        {
            if(mas[i][j] == k)
            {    
                s++;
                if(s > 1)
                {
                    imax = i + 1;
                    flag = true;
                }
            }
        }
 
        if(flag == true)
            cout << "\nНомер строки: " << imax;
 
    }
 
    int t, g = 1;
    for(int j = 0, f = n-g; j < n; j++, f--)
    {
 
        for(int i = j+1, l = n-(g+1); i < n; i++, l--)
        {
            if(mas[f][j] < mas[l][i])
            {
                t = mas[l][i];
                mas[l][i] = mas[f][j];
                mas[f][j] = t;
            }
        }
 
        g++;
    }
 
    cout << "\nОтсортированная матрица:\n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
        }
    }
        
    cout << "\n\n";
    return 0;
}
Все более чем прекрасно выполнено, но можно ли использовать мой код просто вставив сортировку, и реально ли её реализовать без флагов? Или мой код изначально ошибочен?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
06.01.2013, 17:35
Lotus34, в этом коде сделано пузырьком, метод выбора реализован в посте 6. Ну мне кажется, что мой код понятней, а флаги для того, чтобы знать какое выводить сообщение, можно конечно было сделать переменную(целочисленную), сделать ее равной 0, а при не выполнении условия увеличивать на единицу, после проверять, если эта переменная равна количеству элементов матрицы, то совпадающих элементов нет Но все же, с флагами лучше.
1
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
07.01.2013, 17:25  [ТС]
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Lotus34, в этом коде сделано пузырьком, метод выбора реализован в посте 6. Ну мне кажется, что мой код понятней, а флаги для того, чтобы знать какое выводить сообщение, можно конечно было сделать переменную(целочисленную), сделать ее равной 0, а при не выполнении условия увеличивать на единицу, после проверять, если эта переменная равна количеству элементов матрицы, то совпадающих элементов нет Но все же, с флагами лучше.
Огромное спасибо, я разобрался с флагом, реально понятней, но до меня туго доходит смысл этой строки
cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
Я поинмаю, что это вывод эл-в массива , но что нам дает это "setw(3) << setiosflags(ios::left)"?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
07.01.2013, 17:33
Lotus34, setw задает ширину столбца а setiosflags(ios::left) выравнивает по левому краю, это параметризованные манипуляторы, чтобы вывод был красивым
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2013, 17:33
Помогаю со студенческими работами здесь

Сортировка выбором
Что не так с сортировкой простого выбора????((( #include &lt;iostream&gt; using namespace std; int ND(int number) { int i; ...

Сортировка выбором
#include &quot;stdafx.h&quot; #include&quot;iostream&quot; #include&quot;time.h&quot; using namespace std; int main() {srand(time(0)); int a, n, k, q,j; ...

Сортировка выбором
Обьясните вот эту строчку min = ( a &lt; a ) ? j : min; #include &lt;iostream&gt; using namespace std; int main() { int c=0; ...

Сортировка выбором на с++
Сортировка выбором. Выбрать минимальный элемент в массиве, перенести в выходной массив на очередную позицию. Во входном массиве все...

сортировка выбором
помогите пожалуйста, алгоритм не работает то есть не сортирует #ifndef FUNC #define FUNC #include &quot;vibor.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru