Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 13
1

Упорядочить строки матрицы по возрастанию суммы их элементов

15.11.2015, 16:50. Показов 7311. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите сделать задание. Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов. Выдает ошибку error C2440: =: невозможно преобразовать "int" в "int *".
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
int main()
{
    int **mas1, **mas2, n, m, i, j,t;
 
    cout << "vvedite N:"<<endl;
    cin>>n;
    cout << "vvedite M:"<<endl;
    cin>>m;
 
 
        mas1 = new int *[n];
    for (i=0; i<n; i++)
        mas1[i] = new int[m];
 
        mas2 = new int *[n];
    for (i=0; i<n; i++)
        mas2[i] = new int[m];
 
    for (i=0; i<n; i++) {
    cout << "Vvedite stroku["<<i+1<<"] "<<endl;
    for (j=0; j<m; j++) 
        cin >> mas1[i][j];
    }
 
     for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++) 
              cout<<mas1[i][j]<<" ";
         cout<<endl;
    }
     //сама прога 
 
        for (i=0; i<n; i++)    
    {
        for (j=0; j<m; j++)
            mas2[i]+=mas1[i][j];
    }
   
        for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++)
        {
        if (mas2[i]>mas2[j])
        {
            
            mas2[i]=t;
            mas2[i]=mas2[j];
            mas2[j]=t;
            
        }
}
 
    for (i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << mas1[i][j] << " ";
        cout << endl;
    }
 
        for (i = 0; i < n; i++)
        {
            delete[]mas1[i];
            delete[]mas1;
            mas1 = NULL;
        }
 
 
system ("pause");
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2015, 16:50
Ответы с готовыми решениями:

Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов
Дана матрица Х. Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию...

Упорядочить строки матрицы по возрастанию суммы их элементов
Я в принципе почти все понимаю, программа работает, но объяснить этот участок кода я не могу я...

Упорядочить строки матрицы по возрастанию суммы их элементов
Кому не сложно. Задание:Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их...

Упорядочить строки матрицы по возрастанию суммы их элементов
В матрице размером N×M упорядочить строки по возрастанию суммы их элементов.

5
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
15.11.2015, 19:48 2
Конечно будет ошибка: mas2[i]+=mas1[i][j], где mas2[i] - это int*, а mas1[i][j] - это int, нужно mas2 объявить как int*, и прежде чем начать увеличивать значения его элементов, их нужно инициализировать нулями:
C++
1
2
3
4
5
6
7
8
9
10
//так, перед входом в цикл
for (i=0; i<n; i++)    
{
    mas2[i] = 0;
    for (j=0; j<m; j++)
        mas2[i]+=mas1[i][j];
}
 
//или так, во время выделения памяти
mas2 = new int[n]();
И это ещё не всё! Далее вы сортируете массив с суммами строк матрицы... и всё, а как же упорядочить строки матрицы? Достаточно вместе с перестановкой элементов mas2 переставлять так же элементы (указатели на строки) массива mas1:
C++
1
2
3
4
5
6
7
8
9
for (i = 0; i < n - 1; i++)
    for (j = i + 1; j < n; j++)
    {
        if (mas2[i]>mas2[j])
        {
            swap(mas2[i], mas2[j]);  //функция STL - меняет между собой значения двух переменных
            swap(mas1[i], mas1[i]);
        }
}
Дальше вы выводите матрицу, всё ок, но вот далее вы якобы освобождаете память, выделенную под матрицу, на деле же вы освобождаете первую строку матрицы, затем освобождаете массив указателей (которые указывают каждый на свою строку матрицы), обнуляете указатель и следующим циклом попытаетесь разыменовать нулевой указатель mas1[i]. Ах да, кто будет освобождать память, выделенную под mas2?
C++
1
2
3
4
5
6
for (i = 0; i < n; i++)
{
    delete []mas1[i];
}
delete []mas1;
delete []mas2;
0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 13
16.11.2015, 18:13  [ТС] 3
Блин выручай,можешь написать всю прогу? Я что-то запутался.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
16.11.2015, 18:58 4
Так уже всё написано считай, исправить указанные ошибки так как указал.
пара минут и вот:
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
int main()
{
    int **mas1, *mas2;
    size_t n, m;
 
    cout << "vvedite N:" << endl;
    cin >> n;
    cout << "vvedite M:" << endl;
    cin >> m;
 
 
    mas1 = new int*[n];
    for (size_t i = 0; i < n; ++i)
        mas1[i] = new int[m];
 
    mas2 = new int[n]();
 
    for (size_t i = 0; i < n; ++i) {
        cout << "Vvedite stroku[" << i + 1 << "] " << endl;
        for (size_t j = 0; j < m; ++j)
            cin >> mas1[i][j];
    }
 
    cout << endl;
    for (size_t i = 0; i < n; ++i)
    {
        for (size_t j = 0; j < m; ++j)
            cout << mas1[i][j] << " ";
        cout << endl;
    }
 
    for (size_t i = 0; i<n; i++)
        for (size_t j = 0; j < m; ++j)
            mas2[i] += mas1[i][j];
 
    for (size_t i = 0; i < n - 1; i++)
        for (size_t j = i + 1; j < n; j++)
            if (mas2[i]>mas2[j]) {
                swap(mas2[i], mas2[j]);
                swap(mas1[i], mas1[j]);
            }
 
    cout << endl << "Resultat:\n";
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j)
            cout << mas1[i][j] << " ";
        cout << endl;
    }
 
    for (size_t i = 0; i < n; ++i)
        delete[]mas1[i];
    delete[]mas1;
    delete[]mas2;
 
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 13
17.11.2015, 06:48  [ТС] 5
Спасибо большое,выручил
0
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 19
18.09.2017, 14:06 6
Помогите пожалуйста, напишите комментарий к коду, что с чем меняется, что то не очень поняла как программа работает, буду очень благодарна
0
18.09.2017, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2017, 14:06
Помогаю со студенческими работами здесь

Упорядочить строки матрицы по возрастанию суммы их элементов
Помогите сделать задание. Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их...

Упорядочить строки матрицы по возрастанию суммы модулей их элементов (сортировка не происходит)
там по сути 3 варианта сортировки я нашел, но не сортирует (мож кто знает почему)? я только учусь,...

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

В матрице размером NM упорядочить строки по возрастанию суммы их элементов
Написать программу по обработке динамических массивов. Размеры массивов вводить с клавиатуры В...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru