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

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

Войти
Регистрация
Восстановить пароль
 
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
#1

Сортировка выбором - C++

04.01.2013, 14:07. Просмотров 760. Ответов 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;
}
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 14:07     Сортировка выбором
Посмотрите здесь:

сортировка выбором - C++
нужно сделать вместо сортировки пузырьком, сортировку выбором, помогите пожалуйста void bubble(int a) { for (int i = 0; i&lt;70;...

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

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

Сортировка выбором - C++
Помогите тут сделать сортировку выбором for (i = 0; i&lt;n; i++) { for (j = 0; j&lt;n; j++) { if (arr&gt;arr) { ...

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

Массивы. Сортировка выбором (на С) - C++
Выбирается минимальный элемент в массиве, переносится в выходной массив на очередную позицию. Во входном массиве все элементы от следующего...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.01.2013, 00:22     Сортировка выбором #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
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;
}
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 00:26     Сортировка выбором #3
Если тс, не знает где на форуме описаны сортировки, то они описаны здесь Алгоритмы сортировок
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
05.01.2013, 12:22  [ТС]     Сортировка выбором #4
Цитата Сообщение от 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;
}
В том то и печаль,что вид сортировки указан, так бы я тоже пузырьком делал(
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 12:24     Сортировка выбором #5
Lotus34 Что конкретно, не понятно, сортировка очень простая.Имею ввиду конкретно в процессе.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.01.2013, 12:47     Сортировка выбором #6
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;
}
Croessmah
05.01.2013, 13:55
  #7

Не по теме:

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

Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
06.01.2013, 16:40  [ТС]     Сортировка выбором #8
Цитата Сообщение от 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;
}
Все более чем прекрасно выполнено, но можно ли использовать мой код просто вставив сортировку, и реально ли её реализовать без флагов? Или мой код изначально ошибочен?
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
06.01.2013, 17:35     Сортировка выбором #9
Lotus34, в этом коде сделано пузырьком, метод выбора реализован в посте 6. Ну мне кажется, что мой код понятней, а флаги для того, чтобы знать какое выводить сообщение, можно конечно было сделать переменную(целочисленную), сделать ее равной 0, а при не выполнении условия увеличивать на единицу, после проверять, если эта переменная равна количеству элементов матрицы, то совпадающих элементов нет Но все же, с флагами лучше.
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
07.01.2013, 17:25  [ТС]     Сортировка выбором #10
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Lotus34, в этом коде сделано пузырьком, метод выбора реализован в посте 6. Ну мне кажется, что мой код понятней, а флаги для того, чтобы знать какое выводить сообщение, можно конечно было сделать переменную(целочисленную), сделать ее равной 0, а при не выполнении условия увеличивать на единицу, после проверять, если эта переменная равна количеству элементов матрицы, то совпадающих элементов нет Но все же, с флагами лучше.
Огромное спасибо, я разобрался с флагом, реально понятней, но до меня туго доходит смысл этой строки
cout << setw(3) << setiosflags(ios::left) << mas[i][j] << " ";
Я поинмаю, что это вывод эл-в массива , но что нам дает это "setw(3) << setiosflags(ios::left)"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 17:33     Сортировка выбором
Еще ссылки по теме:

Сортировка простым выбором - C++
дан одномерный масив, и мне его нужно сортирывать простым вибором. спасибо.) Добавлено через 17 минут спасибо,уже не надо,...

Сортировка выбором по возрастанию - C++
Провести сортировку элементов массива больших числа С по возрастанию методов сортировки с выбором. Элементы удовлетворяющие условию должны...

Сортировка выбором. Рекурсия - C++
Дичайше туплю... Нужна сортировка выборкой одномерного массива. Рекурсией. Итерацией могу сделать. Рекурсией - никак... Застопорило что-то....

Сортировка структуры выбором - C++
Есть структура фамилий. нужно реализовать сортировку фамилий методом выбора по алфовиту. Помогите пожайлусто. Чтото не выходит немогу...


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

Или воспользуйтесь поиском по форуму:
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
07.01.2013, 17:33     Сортировка выбором #11
Lotus34, setw задает ширину столбца а setiosflags(ios::left) выравнивает по левому краю, это параметризованные манипуляторы, чтобы вывод был красивым
Yandex
Объявления
07.01.2013, 17:33     Сортировка выбором
Ответ Создать тему
Опции темы

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