0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
1

Сортировка массива

29.11.2019, 10:38. Показов 2527. Ответов 24
Метки нет (Все метки)

17. Дана матрица (N + 15) x (N + 15). Если сумма четных чисел больше суммы нечетных, тогда сортировать ее по возрастанию элементов, иначе - по убыванию. Числа генерировать случайно в интервале [-N-15; N + 15].

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
#include <iostream> 
#include <ctime>
using namespace std;
 
int** arr(int N);
void Rand(int** A, int N);
void Sort(int** A, int N);
 
int main()
{
    int temp = 0;
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int N;
    cout << "Введите размер массива" << endl;
    cin >> N;
 
    if (N <= -15)
    {
        cout << "Неверный размер" << endl;
        cout << "Введите размер больше 1" << endl;
        cin >> N;
    }
 
    int** A;
    A = arr(N); 
    Rand(A, N); // вызов функции
    Sort(A, N);
    return 0;
 
}
 
    int** arr(int N)
    {
        int** A = new int* [N + 15];
        for (int i = 0; i < N + 15; i++)
        {
            A[i] = new int[N + 15];
        }
        return A; //вернуть значение
    }
 
    void Sort(int** A, int N)
    {
        int sum1 = 0; //сумма четных чисел 
        int sum2 = 0; //сумма нечетных чисел 
        int temp = 0;
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                if (A[i][j] % 2 == 0)
                {
                    sum1 = sum1 + A[i][j]; //сумма четных чисел
                }
                else
                {
                    sum2 = sum2 + A[i][j]; //сумма нечетных чисел
                }
            }
        }
        if (sum1 > sum2)
        {
            cout << "По возрастанию" << endl;
            for (int c = 0; c < (N + 15) * (N + 15); c++)
            {
                for (int i = 0; i < N + 15; i++)
                {
                    for (int j = 0; j < N + 15; i++)
                    {
                        if (sum1 < sum2)
                        {
                            int temp = A[i][j];
                            A[i][j] = A[i][j + 1];
                            A[i][j + 1] = temp;
                        }
                    }
                }
            }
                
            if (sum1 < sum2)
            {
                cout << "По убыванию" << endl;
                for (int c = 0; c < (N + 15) * (N + 15); c++)
                {
                    for (int i = 0; i < N + 15; i++)
                    {
                        for (int j = 0; j < N + 15; i++)
                        {
                            if (A[i][j] > A[i][j + 1])
                            {
                                temp = A[i][j];
                                A[i][j] = A[i][j + 1];
                                A[i][j + 1] = temp;
                            }
                        }
                    }
                }
            }
        }
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                cout << A[i][j] << " ";
            }
            cout << endl;
        }
 
    }
    
    void Rand(int** A, int N)
    {
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                A[i][j] = rand() % 9;
                cout << A[i][j] << " ";
            }
            cout << endl;
        }
    }

Программа не видит функцию сортировки и в отладчике на ней останавливается, незнаю что делать помогите пожалуйста найти ошибку. А еще по убыванию неправильно по идеи сортирует, т.к. я просто скопировал из if (sum1 > sum2) ну мне бы хотябы сделать так чтобы работало. Запускается прога выводит случайные числа и на этом останавливается

Добавлено через 30 минут
Исправил for (int c = 0; c < (N + 15) * (N + 15); c++)
{
for (int i = 0; i < N + 15; i++)
{
for (int j = 0; j < N + 15; i++) в j цикле букву на j++ но оно не особо сортирует) (в обоих циклах исправил)

Добавлено через 3 минуты
Точнее вообще не сортирует
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2019, 10:38
Ответы с готовыми решениями:

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным...

Сортировка массива по сумме цифр элементов массива в порядке возрастания(неубывания)
Мне нужно написать программу, которая будет сортировать заданный массив по сумме цифр его элементов...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа...

Сортировка массива, вывести значения массива после каждого прохода цикла
Всем привет. Помогите, пожалуйста. Нужно отсортировать массив и вывести значения массива после...

24
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
29.11.2019, 10:45 2
Цитата Сообщение от basddff Посмотреть сообщение
Программа не видит функцию сортировки и в отладчике на ней останавливается
что это значит? нажми на паузу при исполнении и посмотри где находишься, наверное бесконечный цикл у тебя где то
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
29.11.2019, 10:51  [ТС] 3
Вывелось по возростанию, if (sum1 > sum2)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
            cout << "По возрастанию" << endl;
            for (int c = 0; c < (N + 15) * (N + 15); c++)
            {
                for (int i = 0; i < N + 15; i++)
                {
                    for (int j = 0; j < N + 15; j++)
                    {
                        if (A[i][j] > A[i][j + 1])
                        {
                            int temp = A[i][j];
                            A[i][j] = A[i][j + 1];
                            A[i][j + 1] = temp;
                        }
                    }
                }
            }
тут кое что изменил, но в консоли По возрастанию
-33686019 0 0 0 2 2 2 3 3 3 3 3 4 5 5 6 6 6 7 7 7
-33686019 0 0 0 1 1 1 1 2 3 3 3 3 3 4 5 5 5 6 6 8
-33686019 0 1 1 2 2 3 4 4 4 4 4 4 4 5 6 6 6 6 7 7
-33686019 0 0 0 1 1 3 3 3 4 4 5 5 5 5 5 6 6 7 7 7
-33686019 0 0 0 1 1 1 1 1 2 2 3 4 4 4 4 5 5 5 7 8
-33686019 0 1 2 2 2 2 2 3 4 4 4 4 4 4 5 6 7 8 8 8
-33686019 0 1 1 2 2 2 3 3 3 3 3 4 4 4 4 5 5 5 8 8
-33686019 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5 5 5 5 5 5
-33686019 0 0 0 0 1 1 1 2 2 2 2 3 3 3 6 6 6 6 6 7
-33686019 0 0 1 1 1 2 2 3 3 3 3 4 4 5 5 6 7 7 8 8
-33686019 0 0 0 0 0 0 1 1 1 2 4 4 5 5 5 6 7 7 7 7
-33686019 0 0 1 2 2 3 3 4 4 4 4 5 6 6 6 6 7 7 8 8
-33686019 0 0 1 1 1 1 3 4 4 4 4 5 5 6 6 6 6 7 7 7
-33686019 0 0 0 1 2 3 3 3 3 4 5 5 5 6 6 7 7 7 7 8
-33686019 0 0 0 1 1 1 1 1 2 2 2 3 4 5 6 6 6 6 6 7
-33686019 0 0 0 0 1 1 1 2 2 2 2 2 3 3 3 4 6 6 7 7
-33686019 0 1 1 1 2 2 2 2 2 2 2 3 4 4 4 6 6 7 8 8
-33686019 0 0 1 1 2 2 2 2 3 4 5 5 5 5 6 6 6 7 7 8
-33686019 0 0 1 1 1 1 2 2 3 3 3 4 4 4 5 5 6 7 7 7
-33686019 0 0 1 1 1 1 1 2 2 2 2 3 4 4 4 5 5 6 7 7
-33686019 0 0 0 1 1 1 2 3 3 3 5 5 5 7 7 8 8 8 8 8
выводится адреса какие=то спереди, как их убрать + я не могу сделать по убыванию, всегда выводится по возрастанию
0
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
29.11.2019, 10:54 4
Цитата Сообщение от basddff Посмотреть сообщение
for (int j = 0; j < N + 15; i++)
вот посмотри на это еще - условие для j < N + 15 а прибавляешь i
88 строка
а, ты исправил уже

Добавлено через 3 минуты
Я чего то не понимаю что за магия с числом 15 у тебя, вводишь N - дак и используй всегда N к чему эти +15, -15
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
29.11.2019, 10:57  [ТС] 5
Raali, Я чего то не понимаю что за магия с числом 15 у тебя, вводишь N - дак и используй всегда N к чему эти +15, -15

Такое условие задачи, на лабораторке, я не выбирал и к тому же какая разница? Ввожу число N и к нему прибавляется +15 . Все.
0
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
29.11.2019, 11:02 6
Цитата Сообщение от basddff Посмотреть сообщение
A[i][j] = A[i][j + 1];
вот в этом моменте ты выходишь за границу массива, его размер N + 15, ты доходишь до N + 14 + 1 имея условие j < N + 15, оттуда левое значение приходит неинициализированное

Добавлено через 34 секунды
Цитата Сообщение от basddff Посмотреть сообщение
Ввожу число N и к нему прибавляется +15 . Все.
Ну хотяб можно сразу прибавить +15 в начале проги и больше не дергать по всему коду 15
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
29.11.2019, 11:07  [ТС] 7
Raali, скажи как надо записать?
0
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
29.11.2019, 11:21 8
Цитата Сообщение от basddff Посмотреть сообщение
скажи как надо записать?
С виду надо просто сделать цикл до (N + 15 - 1) по j
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
29.11.2019, 11:30  [ТС] 9
Raali, понял, спасибо, теперь нормально выводит по возрастанию, но остается проблема что выводит по возрастанию всегда, и условие при котором if (sum1 < sum2) игнорируется. В общем если сумма чисел четных меньше нечетных то оно не выводит
0
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
29.11.2019, 11:49 10
посмотри как у тебя условия вложены

C++
1
2
3
4
5
6
7
8
9
10
11
12
if (sum1 > sum2)
{
   .....
   .....
 
 
 
   if(sum1 < sum2)
   {
 
   }
}
0
436 / 345 / 169
Регистрация: 08.04.2013
Сообщений: 1,487
29.11.2019, 12:50 11
намутил, чтоб запутать
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
#include <iostream> 
#include <ctime>
#include <iomanip>
using namespace std;
 
int** arr(int N);
void Rand(int** A, int N);
bool SumSh(int** A, int N); 
void Sort(int** A, int N, bool);
void PrintArr(int **,int);
 
int main()
{
    int temp = 0;
    //setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int Num;
    cout << "Введите размер массива" << endl;
    cin >> Num;
 
    if (Num <= -15)
    {
        cout << "Неверный размер" << endl;
        cout << "Введите размер больше 1" << endl;
        cin >> Num;
    }
 
    int N = Num+15; 
    int** A;
    A = arr(N); 
    Rand(A, N); // вызов функции
   // cout << SumSh(A,N) << endl;
    Sort(A, N,SumSh(A,N));
    PrintArr(A,N);
    return 0;
 
}
 
int** arr(int N)
{
    int** A = new int* [N];
    for (int i = 0; i < N; i++)
        A[i] = new int[N];
    return A; //вернуть значение
}
    
 bool SumSh(int** A, int N) 
 {
    int sum1 = 0; //сумма четных чисел 
    int sum2 = 0; //сумма нечетных чисел 
    for (int i = 0; i < N; i++)  {
       for (int j = 0; j < N; j++) {
           if (A[i][j] % 2 == 0)
                sum1+=A[i][j]; //сумма четных чисел
            else
                sum2+=A[i][j]; //сумма нечетных чисел
        }
    }
   return  (sum1 > sum2) ?  true : false;
}
 
void Sort(int** A, int N, bool tr )
{
    int temp;
    if (tr )  cout << "По убыванию " << endl;
    else cout << "По возрастанию " << endl;
    for (int c = 0; c < N  ; c++) 
        for (int i = 0; i < N ; i++) 
            for (int j = 0; j < N-1;j++) {
               if (tr) {
                    if (A[i][j] < A[i][j + 1]) 
                    {
                        temp = A[i][j];
                        A[i][j] = A[i][j + 1];
                        A[i][j + 1] = temp;
                    }   
                }
                else{
                    if (A[i][j] > A[i][j + 1])
                    {
                        temp = A[i][j];
                        A[i][j] = A[i][j + 1];
                        A[i][j + 1] = temp;
                    }
                }
            }
}
 
void PrintArr(int** A, int N)
{
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
         cout << setw(4)<< A[i][j] ;
        }
        cout << endl;
    }
}   
   
void Rand(int** A, int N)
    {
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                A[i][j] = -N + rand() % (N-(-N)+1);
                cout << setw(4)<< A[i][j] ;
            }
            cout << endl;
        }
    }
1
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
29.11.2019, 15:28 12
Лучший ответ Сообщение было отмечено basddff как решение

Решение

basddff, marat_miaki, нужна сортировка всей матрицы (не сортировка строк по возрастанию)
Цитата Сообщение от basddff Посмотреть сообщение
cout << "Введите размер массива" << endl;
    cin >> N;
N - это не размер массива, размер массива (N+15)*(N+15)

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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));    
    int N, n, sum_even=0, sum_odd=0, m=0;
    cout << "N="; cin >> N;
    n=N+15;
   
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
         a[i]=new int[n];
         
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)        
        {
            a[i][j]=rand()%(2*n+1)-n; 
            if (a[i][j]%2==0) sum_even+=a[i][j];
            else sum_odd+=a[i][j];
            cout << setw(3) << a[i][j] << " ";
        }
        cout << "\n";
    }    
    
    if (sum_even > sum_odd) m=1; 
    
    cout << "sum_even=" << sum_even << "\nsum_odd=" << sum_odd << "\n";
    
    for (int k = 0; k < n; k++) 
        for (int p = 0; p < n; p++) 
            for (int i = 0; i < n; i++) 
                for (int j = 0; j < n; j++) 
                {
                    if (m && a[i][j] > a[k][p]) swap (a[i][j],a[k][p]);
                    if (!m && a[i][j] < a[k][p]) swap (a[i][j],a[k][p]);                       
                }   
                
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)         
            cout << setw(3) << a[i][j] << " ";        
        cout << "\n";
    }                    
 
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
system("pause");
return 0;
}
1
436 / 345 / 169
Регистрация: 08.04.2013
Сообщений: 1,487
29.11.2019, 17:51 13
Yetty, к стати интересный алгоритм полной сортировки дин массива
C++
1
2
3
4
5
    for(int i = n*m-1; i; i--)
        for(int j = 0; j < i; j++)
        if(a[i/m][i%m] < a[j/m][j%m])
        
      swap(a[i/m][i%m],a[j/m][j%m]);
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
01.12.2019, 02:34  [ТС] 14
Всем спасибо за ответы, я разобрался. Моей главной ошибкой было то что я генерировал случайные числа не правильно.
Нужно было A[i][j] = rand() % (n+15)-(-n-15); А я делал A[i][j] = rand() % 9;
Вот код, если кому-то поможет кто будет гуглить ответы на свой вопрос)
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
#include <iostream> 
#include <ctime>
using namespace std;
 
int** arr(int N);
void Rand(int** A, int N);
void Sort(int** A, int N);
 
int main()
{
    int temp = 0;
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int N;
    cout << "Введите размер массива" << endl;
    cin >> N;
 
    if (N <= -15)
    {
        cout << "Неверный размер" << endl;
        cout << "Введите размер больше 1" << endl;
        cin >> N;
    }
 
    int** A;
    A = arr(N); 
    Rand(A, N); // вызов функции
    Sort(A, N);
    return 0;
 
}
 
    int** arr(int N)
    {
        int** A = new int* [N + 15];
        for (int i = 0; i < N + 15; i++)
        {
            A[i] = new int[N + 15];
        }
        return A; //вернуть значение
    }
 
    void Sort(int** A, int N)
    {
        int sum1 = 0; //сумма четных чисел 
        int sum2 = 0; //сумма нечетных чисел 
        int temp = 0;
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                if (A[i][j] % 2 == 0)
                {
                    sum1 += 1 + A[i][j]; //сумма четных чисел
                }
                else
                {
                    sum2 += A[i][j]; //сумма нечетных чисел
                }
            }
        }
        if (sum1 > sum2)
        {
            cout << "По возрастанию" << endl;
            for (int c = 0; c < (N + 15) * (N + 15); c++)
            {
                for (int i = 0; i < N + 15; i++)
                {
                    for (int j = 0; j < N + 15 - 1; j++)
                    {
                        if (A[i][j] > A[i][j + 1])
                        {
                            int temp = A[i][j];
                            A[i][j] = A[i][j + 1];
                            A[i][j + 1] = temp;
                        }
                    }
                }
            }
        }
        if (sum1 < sum2)
        {
            cout << "По убыванию" << endl;
            for (int c = 0; c < (N + 15) * (N + 15); c++)
            {
                for (int i = 0; i < N + 15; i++)
                {
                    for (int j = 0; j < N + 15; j++)
                    {
                        if (A[i][j] < A[i][j + 1])
                        {
                            temp = A[i][j];
                            A[i][j] = A[i][j + 1];
                            A[i][j + 1] = temp;
                        }
                    }
                }
            }
        }
        
 
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                cout << A[i][j] << " ";
            }
            cout << endl;
        }
 
    }
    
    void Rand(int** A, int N)
    {
        for (int i = 0; i < N + 15; i++)
        {
            for (int j = 0; j < N + 15; j++)
            {
                A[i][j] = rand() % (N + 15) - (-N - 15);
                cout << A[i][j] << " ";
            }
            cout << endl;
        }
Добавлено через 23 минуты
Только одно но: с каждой новой строчки сортируется все заново , как сделать всю матрицу сразу? Swap мне нельзя использовать( Прошу помогите сделать всю матрицу, именно по моему коду если можно, или хотя бы подсказать, как это организовать?
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
01.12.2019, 02:34 15
Цитата Сообщение от basddff Посмотреть сообщение
Моей главной ошибкой было то ...
Вашей главной ошибкой является то, что Вы не читаете, что Вам пишут, непонятно зачем Вы обращаетесь. ещё раз: отсортировать нужно не строки по возрастанию, а массив по возрастанию
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 29
01.12.2019, 02:35  [ТС] 16
Yetty, Да, только мне swap нельзя юзать
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
01.12.2019, 02:38 17
Цитата Сообщение от basddff Посмотреть сообщение
хотя бы подсказать, как это организовать?
всё уже Вам показано и рассказано. см. сообщение №12 этой темы. swap замените на три строчки.

Добавлено через 1 минуту
swap(a[i],a[i+1]) тоже самое что и
C++
1
2
3
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
0
3660 / 2997 / 828
Регистрация: 25.03.2012
Сообщений: 11,045
Записей в блоге: 1
01.12.2019, 02:42 18
Цитата Сообщение от basddff Посмотреть сообщение
Yetty, Да, только мне swap нельзя юзать
в чём проблема написать самому аналог?
если не понимаешь само слово swap, расшифрую - это перестановка двух переменных. Просто возьми и напиши программу перестановки - это три строчки, если не упарываться особо!

И да, swap это не главная твоя проблема, главная проблема то что матрица не сортируется в целом, только в рамках каждой строчки отдельно
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
01.12.2019, 03:12 19
Лучший ответ Сообщение было отмечено basddff как решение

Решение

без swap
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));    
    int N, n, sum_even=0, sum_odd=0, m=0, temp;
    cout << "N="; cin >> N;
    n=N+15;
   
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
         a[i]=new int[n];
         
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)        
        {
            a[i][j]=rand()%(2*n+1)-n; 
            if (a[i][j]%2==0) sum_even+=a[i][j];
            else sum_odd+=a[i][j];
            cout << setw(3) << a[i][j] << " ";
        }
        cout << "\n";
    }    
    
    if (sum_even > sum_odd) m=1; 
    
    cout << "sum_even=" << sum_even << "\nsum_odd=" << sum_odd << "\n";
    
    for (int k = 0; k < n; k++) 
        for (int p = 0; p < n; p++) 
            for (int i = 0; i < n; i++) 
                for (int j = 0; j < n; j++) 
                {
                    if ((m && a[i][j] > a[k][p]) || (!m && a[i][j] < a[k][p])) 
                    {
                    temp=a[i][j];    
                    a[i][j]=a[k][p];
                    a[k][p]=temp;                    
                    }
                }   
                
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)         
            cout << setw(3) << a[i][j] << " ";        
        cout << "\n";
    }                    
 
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
system("pause");
return 0;
}
1
3660 / 2997 / 828
Регистрация: 25.03.2012
Сообщений: 11,045
Записей в блоге: 1
01.12.2019, 04:00 20
мой вариант
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
#include <iostream> 
#include <ctime>
 
using namespace std;
 
int** arr(int N);
void Rand(int** A, int N);
void Print(int** A, int N);
int sumByMod(int**, int, int, int);
template <typename Comparator>
void Sort(int** A, int n, Comparator cmp);
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int N;
    cout << "Введите размер массива" << endl; N = -10;
    //cin >> N;
    N += 15;
 
    int** A;
    A = arr(N);
    Rand(A, N);
    Print(A, N);
    if (sumByMod(A, N, 2, 0) > sumByMod(A, N, 2, 1))
    {
        cout << "По возрастанию" << endl;
        Sort(A, N, isgreater<int, int>);
    }
    else 
    {
        cout << "По убыванию" << endl;
        Sort(A, N, isless<int, int>);
    }
    Print(A, N);
    return 0;
}
int sumByMod(int** data, int n, int div, int mod) {
    int sum = 0;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            if (data[i][j] % div == mod)
                sum+= data[i][j];
    return sum;
}
int** arr(int N)
{
    int** A = new int*[N];
    for (int i = 0; i < N; i++)
        A[i] = new int[N];
    return A; 
}
template <typename Comparator>
void Sort(int** A, int n, Comparator cmp)
{   
    bool sorted = false;
    while (!sorted)
    {
        sorted = true;
        int* prev = &A[0][0];
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
            {
                if (cmp(*prev, A[i][j]))
                {
                    swap(A[i][j], *prev);
                    sorted = false;
                }
                prev = &A[i][j];
            }
    }
}
 
void Rand(int** A, int N)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            A[i][j] = rand() % 10;
        }
    }
}
void Print(int** A, int N) 
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 04:00
Помогаю со студенческими работами здесь

Сортировка массива структур через сортировку массива указателей
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку -...

Сортировка массива. Ошибка после ввода размерности массива
подскажите почему после ввода размерности массива выдает ошибку #include&lt;iostream&gt;...

Сортировка массива, вместо массива выводит мусор
Здравствуйте Уважаемые жители форума! Есть рабочий код сортируем массив выбором поиск...

Указатели массива и сортировка массива
Доброго времени суток, вот бьюсь над проблемой, нужна программа которая б сортировку динамического...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru