Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
1

Динамические матрицы: расположить строки в порядке невозрастания сумм модулей их отрицательных элементов

02.05.2018, 18:51. Просмотров 457. Ответов 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <stdlib.h>
 
using namespace std;
 
int main() {
setlocale(LC_ALL, "Russian");
 
void show_arr (int **, int , int );
void show_arr (int *, int );
//--------------------------------------------
int rows, columns;
 
int B[100];
        int i, j, k;
        cout << " Количество строк (0<t < 100) " << endl;
        cin >> rows;
 
        cout << " Количество столбцов в 1 строке (0<t < 100) " << endl;
        B[i] = columns;
        cin >> columns;
 
 
        cout << " Элементы " << endl;
        columns++;
        k = 2;
        int **a = new int *[rows];
        for (int i = 0; i < rows; i++)
        {
            a[i] = new int[columns];
            for (j = 1; j < columns ; j++)
                cin >> a[i][j];
            a[i][0] = columns;
 
            if (rows != (i + 1))
            {
                cout << " Количество столбцов в  строке " << k << " (0<t < 100)" << endl;
                cin >> columns;
                columns++;
                cout << " Элементы " << k << "  stroky " << endl;
                k++;
            }
        }
 
cout << "Матрица " << endl;
        for (i = 0; i < rows; i++)
        {
            for (j = 1; j < a[i][0]; j++)
            {
                if (a[i][j]<0)
                    cout << a[i][j] << " ";
                else
                    cout << " " << a[i][j] << " ";
 
            }
            cout << " " << endl;
        }
 
//--------------------------------------------
// Суммируем элементы в строке.
int *pointer_arr1 = new int [rows];
for(int i = 0; i < rows; i++)
{
    pointer_arr1[i] = 0;
        for(int j = 0; j < columns; j ++)
        {
          if(a[i][j]<=0)  pointer_arr1[i] += abs( a[i][j]);
        }
}
cout << "Сумма модулей отримца элементов, : \n";
show_arr (pointer_arr1, rows);
cout << "\n";
 
// Определим буферную матрицу.
int **b;
b = new int *[rows];
for (int i = 0; i < rows; i++) {b[i] = new int [columns];}
 
int buffer = 0; // Буферная переменная.
int *ptr_buffer; // Буферный поинтер.
 
int *buffer2;
for (int counter1 = 0; counter1 < rows-1; counter1++)
{
    for (int counter2 = counter1+1; counter2 < rows; counter2++)
    {
        if (pointer_arr1[counter1]<pointer_arr1[counter2])
        {
            buffer = pointer_arr1[counter1];
            pointer_arr1[counter1] = pointer_arr1[counter2];
            pointer_arr1[counter2] = buffer;
 
            buffer2 = a[counter1];
            a[counter1] = a[counter2];
            a[counter2] = buffer2;
        }
    }
}
 
cout << "Сумма модулей отриц элементов, расположенная в порядке невозрастания: \n";
show_arr (pointer_arr1, rows);
 
cout << "Измененная матрица: \n";
 
show_arr (a, rows, columns);
 
for (int i=0; i<rows; i++)
//освобождение памяти для каждого элемнта a[i]
delete [] a[i];
//освобождение памяти для а
delete []a;
for (int i=0; i<rows; i++)
//освобождение памяти для каждого элемнта b[i]
delete [] b[i];
//освобождение памяти для b
delete [] b;
 
system ("pause");
return 0;
}
 
void show_arr (int **a, int rows, int columns){
 
 
 
 
for (int i=0; i<rows; cout<<"\n", i++)
for (int j=1; j<(columns); j++){
  
cout<<a[i][j]<<"\t";
}
}
void show_arr (int *pointer_arr1, int arr_length) {
for (int counter = 0; counter < arr_length; counter++)
{
    cout << pointer_arr1[counter] << "  ";
}
cout << "\n";
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 18:51
Ответы с готовыми решениями:

Расположить строки матрицы в порядке невозрастания сумм модулей нечетных элементов строк
Дана матрица действительных чисел размера m x n. Переформировать матрицу таким образом, чтобы ее...

Расположить строки матрицы в порядке невозрастания сумм модулей нечетных элементов строк
Здравствуйте. Задача: Дана матрица действительных чисел размера n x m. Переформировать матрицу...

Расположить столбцы матрицы по возрастанию сумм модулей их отрицательных нечетных элементов
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных...

Расположить столбцы матрицы по возрастанию сумм модулей их отрицательных нечетных элементов
Дано целочисленную прямоугольную матрицу. 1). Расположите колонки заданной матрицы по возрастанию...

9
823 / 553 / 260
Регистрация: 26.02.2015
Сообщений: 2,513
02.05.2018, 19:15 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
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <random>
 
void fillMatrix( int ** matrix, std::size_t rows, std::size_t cols );
void printMatrix( int ** matrix, std::size_t rows, std::size_t cols );
unsigned int getSumOfRowElements( int * row, std::size_t cols );
void sortMatrix( int ** matrix, std::size_t rows, std::size_t cols );
void swapRowMatrix( int *& firstRow, int *& secondRow, std::size_t cols );
 
int main() {
 
    std::size_t cols = 0, rows = 0;
 
    std::cout << "Please, enter the number of rows and cols: ";
    std::cin >> rows >> cols;
 
    if ( rows == 0 || cols == 0 ) {
 
        std::cerr << "The number of rows or cols cannot be equals to zero\n";
        return 1;
 
    }
 
    int ** matrix = new int*[rows];
 
    for ( std::size_t i = 0; i < rows; ++i ) {
 
        matrix[i] = new int[cols];
 
    }
 
    fillMatrix( matrix, rows, cols );
    printMatrix( matrix, rows, cols );
    sortMatrix( matrix, rows, cols );
    printMatrix( matrix, rows, cols );
 
    for ( std::size_t i = 0; i < rows; ++i ) {
 
        delete[] matrix[i];
 
    }
 
    delete[] matrix;
 
    return 0;
 
}
 
void fillMatrix( int ** matrix, std::size_t rows, std::size_t cols ) {
 
    std::random_device rd;
    std::mt19937 gen( rd( ) );
    std::uniform_int_distribution<int> dist(-50, 50);
 
    for ( std::size_t i = 0; i < rows; ++i ) {
 
        for ( std::size_t j = 0; j < cols; ++j ) {
 
            matrix[i][j] = dist( gen );
 
        }
 
    }
 
}
 
void printMatrix( int ** matrix, std::size_t rows, std::size_t cols ) {
 
    for ( std::size_t i = 0; i < rows; ++i ) {
 
        for ( std::size_t j = 0; j < cols; ++j ) {
 
            std::cout << matrix[i][j] << " ";
 
        }
 
        std::cout << "\n";
 
    }
 
    std::cout << "\n";
 
}
 
unsigned int getSumOfRowElements( int * row, std::size_t cols ) {
 
    unsigned int sum = 0;
 
    for ( std::size_t i = 0; i < cols; ++i ) {
 
        if ( row[i] < 0 ) {
 
            sum += -row[i];
 
        }
 
    }
 
    return sum;
 
}
 
void sortMatrix( int ** matrix, std::size_t rows, std::size_t cols ) {
 
    for ( std::size_t i = 0; i < rows - 1; ++i ) {
 
        for ( std::size_t j = i + 1; j < rows; ++j ) {
 
            if( getSumOfRowElements( matrix[i], cols ) < getSumOfRowElements( matrix[j], cols ) ) {
 
                swapRowMatrix( matrix[i], matrix[j], cols );
 
            }
 
        }
 
    }
 
}
 
void swapRowMatrix( int *& firstRow, int *& secondRow, std::size_t cols ) {
 
    int * temp = firstRow;
    firstRow = secondRow;
    secondRow = temp;
 
    /*int temp = 0;
 
    for ( std::size_t i = 0; i < cols; ++i ) {
 
        temp = firstRow[i];
        firstRow[i] = secondRow[i];
        secondRow[i] = temp;
 
    }*/
 
}
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
02.05.2018, 19:59  [ТС] 3
не работает
0
823 / 553 / 260
Регистрация: 26.02.2015
Сообщений: 2,513
02.05.2018, 20:01 4
Vald000, что не работает?

Добавлено через 1 минуту
Код
Please, enter the number of rows and cols: 5 5
10 -32 39 37 9
-33 11 32 50 45
-5 -40 -20 -14 23
-50 15 -50 -23 -22
45 15 -49 -17 -31

-50 15 -50 -23 -22
45 15 -49 -17 -31
-5 -40 -20 -14 23
-33 11 32 50 45
10 -32 39 37 9
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
02.05.2018, 20:14  [ТС] 5
Смотри во вложениях
0
Миниатюры
Динамические матрицы: расположить строки в порядке невозрастания сумм модулей их отрицательных элементов  
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
02.05.2018, 20:15  [ТС] 6
Кампилятор не поддерживает(использую CodeBlocks)
0
823 / 553 / 260
Регистрация: 26.02.2015
Сообщений: 2,513
02.05.2018, 20:43 7
Vald000, ну, "не работает" и "компилятор не поддерживает" - совершенно разное. Я полагаю, что Вы просто некомпетентны в том, что делаете. Так же советую рассказать об этом Вашему преподавателю. Чтобы разрешить Вашу проблему, почитайте, как включать поддержку разных стандартов в IDE, которой вы пользуетесь.
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
02.05.2018, 21:01  [ТС] 8
Извиняюсь , за то , что ввел вас в заблуждение , но и ваша программа не соответствует заданию , ибо количество элементов в строке может быть разное
0
823 / 553 / 260
Регистрация: 26.02.2015
Сообщений: 2,513
02.05.2018, 21:10 9
Цитата Сообщение от Vald000 Посмотреть сообщение
количество элементов в строке может быть разное
Совершенно верно. Поэтому-то в ней и фигурируют такие переменные, как cols и rows (строки и столбцы), обозначающие количество столбцов и строк матрицы, соответственно. При входе в программу пользователя просят ввести количество строк и количество столбцов, после чего происходят основные вычисления, поэтому с точки зрения задания, программа соответствует.

Добавлено через 1 минуту
Цитата Сообщение от Vald000 Посмотреть сообщение
Кампилятор не поддерживает(использую CodeBlocks)
Посмотрите внимательно на скриншот, который вы мне показали. Там написано, какой ключ компилятора нужно использовать, чтобы включить поддержку C++11.
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 17
02.05.2018, 22:08  [ТС] 10
Вот запуск моей программы , но с некими изменениями, которых в работе быть не должно ( показано , как должно выглядеть)
0
Миниатюры
Динамические матрицы: расположить строки в порядке невозрастания сумм модулей их отрицательных элементов  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2018, 22:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Расположить столбцы матрицы в соответствии с ростом сумм модулей их отрицательных нечетных элементов
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных...

Переставить строки матрицы в порядке невозрастания модулей разностей их максимальных и минимальных элементов
Помогите написать программку на с++ пожалуйста, оч буду благодарен)) Такое вот задание: Составить...

Расположить строки матрицы в порядке возрастания сумм их элементов
Двумерный массив из 5 строк и 5 столбцов заполняется случайными числами,расположить строки в...

Расположить строки матрицы в порядке убывания сумм значений их элементов
Превратить произвольную матрицу XN1 (m * n), расположив ее строки в порядке убывания сумм значений...


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

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

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