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

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

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

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

04.01.2013, 14:07. Просмотров 765. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 14:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка выбором (C++):

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

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

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

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

Сортировка выбором - C++
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого...

Сортировка выбором - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace std; void SetRussianLocale() {...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
}
1
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 00:26 #3
Если тс, не знает где на форуме описаны сортировки, то они описаны здесь Алгоритмы сортировок
0
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;
}
В том то и печаль,что вид сортировки указан, так бы я тоже пузырьком делал(
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.01.2013, 12:24 #5
Lotus34 Что конкретно, не понятно, сортировка очень простая.Имею ввиду конкретно в процессе.
0
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;
}
1
Croessmah
05.01.2013, 13:55
  #7

Не по теме:

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

0
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;
}
Все более чем прекрасно выполнено, но можно ли использовать мой код просто вставив сортировку, и реально ли её реализовать без флагов? Или мой код изначально ошибочен?
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
06.01.2013, 17:35 #9
Lotus34, в этом коде сделано пузырьком, метод выбора реализован в посте 6. Ну мне кажется, что мой код понятней, а флаги для того, чтобы знать какое выводить сообщение, можно конечно было сделать переменную(целочисленную), сделать ее равной 0, а при не выполнении условия увеличивать на единицу, после проверять, если эта переменная равна количеству элементов матрицы, то совпадающих элементов нет Но все же, с флагами лучше.
1
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)"?
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
07.01.2013, 17:33 #11
Lotus34, setw задает ширину столбца а setiosflags(ios::left) выравнивает по левому краю, это параметризованные манипуляторы, чтобы вывод был красивым
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 17:33
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.01.2013, 17:33
Ответ Создать тему
Опции темы

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