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

Программа, меняющая местами столбцы заданной матрицы в зависимости от суммы элементов столбца

09.12.2015, 23:03. Показов 2076. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте , помогите , пожалуйста :/

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

Было:
1 2 3
3 6 5
8 9 1


Получится:
3 1 2
5 3 6
1 8 9

Формулировка задачи из учебника:
Сформировать из столбцов матрицы B матрицу C, в которой столбцы расположены в порядке возрастания сумм их элементов.

Помогите мне с моим кодом, просто хочу разобраться. Можно только по-простому , через цикл for и условие if?
И у меня почему-то сумма элементов в моем коде выдается с ошибкой, помогите, с ней тоже пожалуйста
Как лучше сделать: поменять уже заданный массив, или записать все в другой, новый массив?
Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2015, 23:03
Ответы с готовыми решениями:

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

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

Функция меняющая местами первый и последний столбцы матрицы
Создать функцию,которая меняет местами первый и последний столб квадратной матрицы и находит сумму...

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

9
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 34
10.12.2015, 00:29  [ТС] 2
Добавьте в шапку, что Задание 2.6 на фотографии.

Добавлено через 1 час 19 минут
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
// SSS.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int mas[100][100];
    int m, n;
    int i;
    int j;
    int *sum;
    
    do {
        cout << "Enter number of Lines (2...100): ";
        cin >> m;
    } while ( m < 2 || m > 100 );
 
    do {
        cout << "Enter number of Columns (2...100): ";
        cin >> n;
    } while ( n==m );
 
    cout << "Massive with  " << m << " Lines and " << n << " Columns" << endl;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << "a[" << i << "][" << j << "]=";
            cin >> mas[i][j];
        }
    }
 
    for(i=0;i< m;i++)                                            // Вывод заданной пользователем матрицы
    {
       cout<< "\n" << endl;
       for(j=0;j< n;j++)
       {
           cout << setw(5)<< mas[i][j];
       }
    }
 
    cout << "\n\n\n";
 
    for ( i = 0; i < m; i++)                                     // Суммирую элементы столбцов
    {
        sum = new int [i];
        sum[i]=0;
        for ( j=0 ; j < n; j++)
        {
            sum[i]=sum[i]+mas[i][j];
        }
    }
 
    for ( i=0 ; i < n; i++)                                  // Вывод на экран суммы
    {
        cout << sum[i];
    }
 
    cout << "\n\n";
    int a;
 
    for ( i=0; i < m; i++)                                    // Пытаюсь сделать придумать цикл, переставляющий местами элементы столбцов , только столбцов.
    { 
        for ( j=0; j < n; j++)
        {   if ( sum[i] < sum [i+1])
 
            a=mas[i+1][j+1];
            mas[i+1][j+1]=mas[i][j];
            mas[i][j]=a;
        }
    }
 
    cout << "\n\n";
 
    for(i=0;i< m;i++)                             // Вывод на экран изменненной матрицы 
    {
       cout<< "\n" << endl;
       for(j=0;j< n;j++)
       {
           cout << setw(5)<< mas[i][j];
       }
    }
 
    system("pause");A
    return 0;
}
Забыл свой код выложить...) . Модераторы - добавьте в шапку пожалуйста
0
130 / 70 / 25
Регистрация: 20.03.2014
Сообщений: 261
10.12.2015, 01:09 3
C++
1
2
3
4
5
for ( i = 0; i < m; i++)                                     // Суммирую элементы столбцов
    {
        sum = new int [i];
        sum[i]=0;
........................
sum = new int[i]; - каждую итерацию создаёте новый массив, сначала длиной 0 потом 1 и т.д.
тут нужно исправить так
C++
1
2
3
4
5
    sum = new int [m];
    for ( i = 0; i < m; i++)                                     // Суммирую элементы столбцов
    {        
        sum[i]=0;
........................
// Пытаюсь сделать придумать цикл, переставляющий местами элементы столбцов , только столбцов.
C++
1
2
3
4
5
6
7
8
9
    for ( i=0; i < m; i++)
    { 
        for ( j=0; j < n; j++)
        {   if ( sum[i] < sum [i+1])
 
            a=mas[i+1][j+1];
            mas[i+1][j+1]=mas[i][j];
            mas[i][j]=a;
...........................................
Тут не стал до конца разбираться, сразу вижу что a=mas[i+1][j+1]; это бред. То есть вы например в элемент с индексом 1 1 запишите значение с индексом 2 2, значение которое находится по диагонали от текущего.

Перед return 0; следует удалить выделенную оператором new память, delete[] num;

Добавлено через 7 минут
Вот правильный код который переставляет столбцы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const int n = 10;
const int m = 5;
int ar[n][m];
//.....тут массив заполнили......
//переставляем 2-й столбец с 5-м
int from = 1; //т.к. счёт с 0-ля то 2-й столбец имеет индекс 1
int to = 4; // а 5-й столбец имеет индекс 4
for(int i = 0; i < n; i++)
{
    int tmp = ar[i][to];
    ar[i][to] = ar[i][from];
    ar[i][from] = tmp;
}
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
10.12.2015, 01:42 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
#include <bits/stdc++.h>
using namespace std;
int main() {
    const int n = 2, m = 5;
    int a[n][m];
    for (int i = 0;i < n;i++) {
        for (int j = 0;j < m;j++)
            a[i][j] = rand() % 10,cout << a[i][j] << " ";
        cout << endl;
    }
    int sum[m] = { 0 };
    for (int i = 0;i < m;i++)
        for (int j = 0;j < n;j++)
            sum[i] += a[j][i];
    for (int i = 0;i < m - 1;i++)
        for (int j = 0;j < m - 1 - i;j++)
            if (sum[j]>sum[j + 1]) {
                swap(sum[j], sum[j + 1]);
                for (int k = 0;k < m;k++)
                    swap(a[k][j], a[k][j + 1]);
            }
    cout << endl;
    for (int i = 0;i < n;i++) {
        for (int j = 0;j < m;j++)
            cout << a[i][j] << " ";
        cout << endl;
    }
    cin.get(), cin.get();
    return 0;
}
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 34
10.12.2015, 22:06  [ТС] 5
Спасибо большое

Добавлено через 14 часов 8 минут
Можно вопрос? Не очень разбираюсь в rand и swap... Как без них, или они не такие сложные в использовании? А если пользователь вводит размер массива, то есть изначально неизвестен размер массива? То как тогда будет выглядеть ваш код?
Можно вопрос? Не очень разбираюсь в rand и swap... Как без них, или они не такие сложные в использовании? А если пользователь вводит размер массива, то есть изначально неизвестен размер массива? То как тогда будет выглядеть ваш код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const int n = 10;
const int m = 5;
int ar[n][m];
//.....тут массив заполнили......
//переставляем 2-й столбец с 5-м
int from = 1; //т.к. счёт с 0-ля то 2-й столбец имеет индекс 1
int to = 4; // а 5-й столбец имеет индекс 4
for(int i = 0; i < n; i++)
{
    int tmp = ar[i][to];
    ar[i][to] = ar[i][from];
    ar[i][from] = tmp;
}
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
10.12.2015, 22:20 6
если пользователь сам хочет ввести данные ,убрать ранд и добавить cin , если размер тоже сам ,то сделать массив динамическим
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 34
14.12.2015, 10:52  [ТС] 7
Не очень могу разобраться с перестановкой , Я хочу ввести условие, что если сумма столбца j-ого превосходит сумму j+1 столбца, то переставить их элементы. То есть у меня пользователь может ввести ведь любой размер, например, 5х6 и 7х8 и т.д. Перестановка не очень понимаю как сделать... Через ваш цикл понятно, когда знаем какие переставить стззолбцы нужно, а у меня заранее неизвестно какие столбцы и сколько столбцов поменять местами, ведь все зависит от их суммы. Какой вид должен иметь этот код, для динамического массива?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const int n = 10;
const int m = 5;
int ar[n][m];
//.....тут массив заполнили......
//переставляем 2-й столбец с 5-м
int from = 1; //т.к. счёт с 0-ля то 2-й столбец имеет индекс 1
int to = 4; // а 5-й столбец имеет индекс 4
for(int i = 0; i < n; i++)
{
    int tmp = ar[i][to];
    ar[i][to] = ar[i][from];
    ar[i][from] = tmp;
}
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
14.12.2015, 11:49 8
такой же как и раньше ,только создать динамические массивы
0
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 34
14.12.2015, 13:07  [ТС] 9
Вам не сложно объяснить как это ?) Я вообще не могу понять, я просто хочу разобраться во всем на будущее
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
14.12.2015, 21:35 10
в книге по с++ хорошо объяснено
0
14.12.2015, 21:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2015, 21:35
Помогаю со студенческими работами здесь

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

Вычислить сумму элементов каждого столбца матрицы и поменять местами столбцы с наибольшей и наименьшей суммой
Пожалуйста помогите решить, кому не трудно.. Дана целочисленная матрица A(N,M), где N=5 и M=5....

Определить количество элементов заданной матрицы, больших суммы остальных элементов своего столбца
Здравствуйте! Задана матрица размером N×M, N,M&lt;50. Определить k – количество “особых” элементов...

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


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

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