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

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

07.02.2018, 10:40. Показов 1056. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Выполнить перестановку столбцов и строк двумерного массива так, чтобы минимальный
элемент приобрел индекс 1.1 (левый верхний). Выводить массив на экран на каждом шаге с
комментариями действий.

Сам код:
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 "stdafx.h"
#include <iostream>
//#include <cstdlib>
int main()
{
    const int n = 5;
    const int m = 7;
    int i, j, mat[n][m];
    for (i = 0; i < n; ++i) {
        for (j = 0; j < m; ++j) {
            mat[i][j] = std::rand() % 10;
            
            std::cout << mat[i][j] << ' ';      
        }
          std::cout << std::endl;   
    }
    std::cout << std::endl;
    int row = 1, col = 1;
    int i1 = 0, j1 = 0;
    for (i = 0; i < n; ++i) {
        for (j = 0; j < m; ++j) {
            if (mat[i][j] < mat[i1][j1]) {
                i1 = i;
                j1 = j;
            }
        }
    }
 
    //переставить столбцы
    int dx = (j1 > col) ? -1 : 1;
    for (j = j1; j != col; j += dx) {
        for (i = 0; i < n; ++i) {
            std::swap(mat[i][j], mat[i][j + dx]);
        }
    }
 
    //переставить строки
    int dy = (i1 > row) ? -1 : 1;
    for (i = i1; i != row; i += dy) {
        for (j = 0; j < m; ++j) {
            std::swap(mat[i][j], mat[i + dy][j]);
        }
    }
 
    //вывести
    for (i = 0; i < n; ++i) {
        for (j = 0; j < m; ++j) {
            std::cout << mat[i][j] << '  ';
        }
        std::cout << std::endl;
        //cout << endl;
    }
    getchar();
    return 0;
}

Выводит в консоль:
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2018, 10:40
Ответы с готовыми решениями:

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

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

Найти наибольший элемент 1-го столбца матрицы и переставить строки так, чтобы он оказался в левом верхнем углу
ооооооочень нужно...заранее спасибо! 4. Дана матрица целых чисел А (mхn). Найти наибольший элемент...

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

2
7 / 8 / 1
Регистрация: 09.12.2017
Сообщений: 140
07.02.2018, 14:17  [ТС] 2
Странно, перенес все на новый проект, все заработало как надо. Похоже глюк VS

Добавлено через 3 часа 22 минуты
Проблема была в строке 48, кому интересно)
0
308 / 271 / 220
Регистрация: 14.11.2016
Сообщений: 1,049
07.02.2018, 14:43 3
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream>
#include <stdexcept>
#include <cstdlib>
#include <ctime>
 
class Matrix2D
{
public:
    Matrix2D(void) = delete;
    Matrix2D(const Matrix2D&) = delete;
    Matrix2D(const Matrix2D&&) = delete;
    Matrix2D& operator=(const Matrix2D&) = delete;
 
    struct Coord
    {
        int x;
        int y;
    };
 
    enum class RotateTo { Up, Down, Left, Right };
 
    template<typename T, typename U>
    static void Rotate(T **Matrix, const U &Rows, const U &Cols, const RotateTo &Key)
    {
        switch (Key)
        {
        case RotateTo::Up:
        {
            for (U j = 0; j < Cols; ++j)
            {
                T tmp = std::move(Matrix[0][j]);
                for (U i = 0; i < (Rows - 1); ++i)
                {
                    Matrix[i][j] = std::move(Matrix[i + 1][j]);
                }
                Matrix[Rows - 1][j] = std::move(tmp);
            }
            break;
        }
        case RotateTo::Down:
        {
            for (U j = 0; j < Cols; ++j)
            {
                T tmp = std::move(Matrix[Rows - 1][j]);
                for (U i = Rows - 1; i > 0; --i)
                {
                    Matrix[i][j] = std::move(Matrix[i - 1][j]);
                }
                Matrix[0][j] = std::move(tmp);
            }
            break;
        }
        case RotateTo::Left:
        {
            for (U i = 0; i < Rows; ++i)
            {
                T tmp = std::move(Matrix[i][0]);
                for (U j = 0; j < (Cols - 1); ++j)
                {
                    Matrix[i][j] = std::move(Matrix[i][j + 1]);
                }
                Matrix[i][Cols - 1] = std::move(tmp);
            }
            break;
        }
        case RotateTo::Right:
        {
            for (U i = 0; i < Rows; ++i)
            {
                T tmp = std::move(Matrix[i][Cols - 1]);
                for (U j = Cols - 1; j > 0; --j)
                {
                    Matrix[i][j] = std::move(Matrix[i][j - 1]);
                }
                Matrix[i][0] = std::move(tmp);
            }
            break;
        }
        default:
            throw std::invalid_argument("You can use only Up/Down/Left/Right!");
        }
    }
 
    template<typename T, typename U>
    static void Print(T **Matrix, const U &Rows, const U &Cols)
    {
        for (U i = 0; i < Rows; ++i)
        {
            for (U j = 0; j < Cols; ++j)
            {
                std::cout << Matrix[i][j] << ' ';
            }
            std::cout << std::endl;
        }
    }
 
    template<typename T, typename U>
    static void MoveElemWith(T **Matrix, const U &Rows, const U &Cols, const Coord &From, const Coord &To)
    {
        Coord resPoint{ From.x - To.x, From.y - To.y };
        while (resPoint.x || resPoint.y)
        {
            if (resPoint.x)
            {
                if (resPoint.x < 0)
                {
                    Rotate(Matrix, SIZE_ROWS, SIZE_COLS, RotateTo::Down);
                    ++resPoint.x;
                }
                else if (resPoint.x > 0)
                {
                    Rotate(Matrix, SIZE_ROWS, SIZE_COLS, RotateTo::Up);
                    --resPoint.x;
                }
            }
            if (resPoint.y)
            {
                if (resPoint.y < 0)
                {
                    Rotate(Matrix, SIZE_ROWS, SIZE_COLS, RotateTo::Right);
                    ++resPoint.y;
                }
                else if (resPoint.y > 0)
                {
                    Rotate(Matrix, SIZE_ROWS, SIZE_COLS, RotateTo::Left);
                    --resPoint.y;
                }
            }
        }
    }
};
 
const unsigned SIZE_ROWS{ 4 };
const unsigned SIZE_COLS{ 4 };
const unsigned MAX_RAND{ 10 };
const Matrix2D::Coord point{ 1,1 };
 
typedef unsigned uint;
 
int main()
{
    std::srand(uint(std::time(0)));
    Matrix2D::Coord pMinElem{ 0,0 };
    int **Matrix{ new int*[SIZE_ROWS] };
    {
        int min{ MAX_RAND };
        for (uint i{ 0 }; i < SIZE_ROWS; ++i)
        {
            Matrix[i] = new int[SIZE_COLS];
            for (uint j{ 0 }; j < SIZE_COLS; ++j)
            {
                Matrix[i][j] = rand() % MAX_RAND;
                if (min > Matrix[i][j])
                {
                    min = Matrix[i][j];
                    pMinElem = { static_cast<int>(i), static_cast<int>(j) };
                }
            }
        }
    }
 
    Matrix2D::Print(Matrix, SIZE_ROWS, SIZE_COLS);
    std::cout << std::endl;
    
    Matrix2D::MoveElemWith(Matrix, SIZE_ROWS, SIZE_COLS, pMinElem, point);
 
    Matrix2D::Print(Matrix, SIZE_ROWS, SIZE_COLS);
    std::cout << std::endl;
 
    for (uint i = 0; i < SIZE_ROWS; delete[] Matrix[i++]);
    delete[] Matrix;
}
0
07.02.2018, 14:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2018, 14:43
Помогаю со студенческими работами здесь

Матрица. Найти наибольший элемент 1-го столбца и переставить строки так, чтобы он оказался в левом верхнем углу
Дана матрица целых чисел A(m*n). Найти наибольший элемекнт 1-го столбца и переставить строки так,...

Добиться того, чтобы наибольший элемент данной матрицы оказался в верхнем левом углу
Дана вещественная матрица размером N x M . Переставляя ее строки и столбцы, добиться того,...

Переставляя строки и столбцы матрицы, добиться, чтобы наибольший элемент оказался в верхнем левом углу
Дана вещественная матрица A размером 7*4. Переставляя ее строки и столбцы,добиться того,чтобы...

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

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

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


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

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