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

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

07.02.2018, 10:40. Показов 1085. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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
309 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
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
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2018, 14:43
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru