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

Удалить столбец, содержащий минимальный элемент матрицы (как сократить код?)

30.03.2018, 17:18. Показов 7749. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Подскажите, можно ли как-то сократить код? Мне он кажется громоздким, или это норм? Без использования векторов. И да, что можно улучшить в плане в плане оформления кода? То есть раньше была проблема, что писал "using ,,,, .. ". Теперь её нет, что дальше?

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
#include <iostream>
#include <ctime>
 
int main () {
    srand(time(NULL)); 
    int n, m, minMass, min, stolbik; 
    std::cout <<"Введите число строк N: "; std::cin >> n;
    std::cout <<"Введите число столбцов M: "; std::cin >> m;
    int mass[n][m];
   
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m ; j++) {
            mass[i][j] = rand() % 10;
            std::cout << mass[i][j] << "\t"; 
        }
        std::cout << std::endl;
    }
    
    minMass = mass[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (mass[i][j] < minMass) {
                minMass = mass[i][j];
                min = j;
            }
        }
    }
    std::cout <<"\nСтолбик с минимальным элементом = " 
        << min+1 << std::endl; //спросить, как правильно показывать номер столбца без прибавления единицы в выводе ответа
    
    stolbik = m - 1;
    for (int i = 0; i < n; ++i) {
        for (int j = min; j < stolbik; ++j) {
            mass[i][j] = mass [i][j+1];
        }
    }
    
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < stolbik; ++j) {
            std::cout << mass[i][j] << "\t";
        }
        std::cout << std::endl;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2018, 17:18
Ответы с готовыми решениями:

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

Сформировать одномерный массив как столбец матрицы,содержащий минимальный элемент на побочной диагонали
2. Сформировать одномерный массив как столбец матрицы, содержащий минимальный элемент на побочной диагонали.

Дан двумерный целочисленный массив A размерностью NxM. Удалить столбец, содержащий минимальный элемент
помогите

24
0 / 0 / 1
Регистрация: 03.03.2018
Сообщений: 64
31.03.2018, 14:14  [ТС]
Студворк — интернет-сервис помощи студентам
zss, во, спасиб за ссылочку, увидел для себя полезную инфу
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
31.03.2018, 14:46
Enflamed, в курсе же, что это не C# и new int[n, m]; выделяет m элементов?
0
 Аватар для Enflamed
3 / 3 / 1
Регистрация: 12.04.2015
Сообщений: 74
31.03.2018, 14:57
Цитата Сообщение от Croessmah Посмотреть сообщение
в курсе же, что это не C# и new int[n, m]; выделяет m элементов?
Ну теперь я точно в курсе)). В общем, с поинтерами всё заработало.

Странно, что он выделяет m элементов. А не n*m... Странно, что такой синтаксис вообще корректен, если выделяется всего m элементов.

Или имеется в виду, что как бы указатель создаётся, а память при этом не выделяется?
Это имеете в виду?

А. Я, похоже, доехал. Мы не можем просто так взять и сказать, что у нас указатель указывает на двумерный массив...
Надо именно выделять массив указателей. Как бы, я так понимаю, мы единовременно не можем выделить больше, чем одномерный массив данных.
И поочерёдно нужно выделять под каждый указатель по единичному массиву (одномерному).
Ну да, теперь понял, спасибо.)

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

В любом случае, мы на форуме новичков, поэтому какие откровения только можно здесь не встретить.

Заехал помочь новичку, а помог сам себе, ахах.

Заработало всё так:
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
int main() {
    // чтобы корректно отображались русские символы в консоли
    setlocale(LC_ALL, "russian");
 
    srand(time(NULL));
 
    int n,
        m,
        minElem = INT32_MAX, // минимальный элемент (вместо minMass)
        countOfNewColumns = -1,
        minColumn = INT32_MAX; // столбец с минимальным значением
    cout << "Введите число строк N: "; cin >> n;
    cout << "Введите число столбцов M: "; cin >> m;
 
    int **mass = new int*[n];
 
    for (int i = 0; i < n; i++)
    {
        mass[i] = new int[m];
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            *(mass[i]+j) = rand() % 10;
            cout << *(mass[i] + j) << "\t";
        }
        cout << endl;
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (*(mass[i]+j) < minElem) {
                minElem = *(mass[i] + j);
                minColumn = j;
            }
        }
    }
 
    cout << "\nСтолбик с минимальным элементом = "
        << minColumn + 1 << endl;
 
    countOfNewColumns = m - 1;
 
    int **newMass = new int*[n];
    for (int i = 0; i < n; i++)
    {
        newMass[i] = new int[countOfNewColumns];
    }
 
    if (minColumn != INT32_MAX && minElem != INT32_MAX)
    {
        int rw = 0, newCl = 0, oldCl = 0;
        while (rw < n)
        {
            while (oldCl < m)
            {
                if (oldCl != minColumn)
                {
                    *(newMass[rw] + newCl) = *(mass[rw]+oldCl);
                    newCl++;
                }
                oldCl++;
            }
            rw++;
            oldCl = 0;
            newCl = 0;
        }
    }
 
 
    int* elemPtr;
    if (newMass != nullptr) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < countOfNewColumns; ++j) {
                elemPtr = (newMass[i]+j);
                std::cout << std::to_string(*elemPtr) << "\t";
            }
            cout << endl;
        }
    }
 
    // удаляем выделенную из кучи память 
    // ибо в C++ делается много что вручную
 
    for (int i = 0; i < n; i++)
    {
        delete[] mass[i];
    }
 
    for (int i = 0; i < n; i++)
    {
        delete newMass[i];
    }
 
    delete[] mass;
    delete[] newMass;
    system("pause");
}
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
31.03.2018, 16:04
Цитата Сообщение от Enflamed Посмотреть сообщение
Странно, что он выделяет m элементов.
Ничего странного, так и должно быть.
Цитата Сообщение от Enflamed Посмотреть сообщение
Странно, что такой синтаксис вообще корректен, если выделяется всего m элементов.
Ничего странного, так и должно быть.
0
 Аватар для Enflamed
3 / 3 / 1
Регистрация: 12.04.2015
Сообщений: 74
31.03.2018, 19:35
Не знаю сокращу я Вам код или не сокращу, но я за Вас перепишу кусок кода (чтобы он работал), переименую переменные, можете комментарии оставить или замечания.

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
#include <iostream>
#include <ctime>
#include <string>
#include <vector>
 
using std::cout;
using std::endl;
using std::cin;
using std::vector;
 
int main() {
    // чтобы корректно отображались русские символы в консоли
    setlocale(LC_ALL, "russian");
 
    srand(time(NULL));
 
    int rowCount,
        columnCount,
        minElem = INT32_MAX, // минимальный элемент (вместо minMass)
        minColumn = INT32_MAX; // столбец с минимальным значением
    cout << "Введите число строк N: "; cin >> rowCount;
    cout << "Введите число столбцов M: "; cin >> columnCount;
 
    vector<vector<int>> massive = vector<vector<int>>();
 
    for (int row = 0; row < rowCount; row++) {
        massive.push_back(vector<int>());
 
        for (int column = 0; column < columnCount; column++) {
            massive[row].push_back(rand() % 10);
            cout << (massive[row])[column] << "\t";
        }
        cout << endl;
    }
    
    for (vector<int> &row : massive) {
        for (int column = 0; column < row.size(); column++) {
            if (row[column] < minElem) {
                minElem = row[column];
                minColumn = column;
            }
        }
    }
 
    cout << "\nСтолбик с минимальным элементом = "
        << minColumn + 1 << endl;
 
    if (minColumn != INT32_MAX && minElem != INT32_MAX) {
        for (vector<int>& row : massive) {
            row.erase(row.begin()+minColumn);
        }
    }
 
    for (vector<int>& row : massive) {
        for (int& cell : row) {
            cout << cell << "\t";
        }
        cout << endl;
    }
 
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2018, 19:35

Удалить столбец, содержащий максимальный элемент матрицы
Дана матрица размера M х N. Удалить столбец, содержащий максимальный элемент матрицы Помоги плиз, плохо в c++ соображаю Заранее...

Удалить столбец, содержащий максимальный элемент матрицы.
Дана матрица размера M × N. Удалить столбец, содержащий максимальный элемент матрицы.

Удалить столбец, содержащий максимальный элемент матрицы
Дана матрица размера M × N. Удалить столбец, содержащий максимальный элемент матрицы

Дана матрица размера M × N. Продублировать столбец матрицы, содержащий ее минимальный элемент.
Дана матрица размера M × N. Продублировать столбец матрицы, содержащий ее минимальный элемент. Помогите пожалуйста!!!

Удалить столбец матрицы, в котором находится минимальный элемент.
Удалить столбец, в котором находится минимальный элемент.


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru