Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1

В каждом столбце матрицы поменять местами Min и Max элементы

15.03.2018, 23:45. Показов 2414. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Вводится с клавиатуры размерность матрицы, заполнение рандомом и в каждом столбце переставить Min и Max элементы -> Результат на экран.
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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int max= 0, min = 0, tmp;
    int indx1 = 0;
    int indx2 = 0;
    int n = 0; 
    cin >> n;
    int **a = new int* [n];
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [n];
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100;
            cout << a[i][j] << " "; 
        }
        cout << endl;
 
        for(int j = 0; j < n; j++)
        {
            if (a[j][i] > max)
            {
                max = a[j][i];
                indx1 = j;
            }
            if (a[j][i] < min)
            {
                min = a[j][i];
                indx2 = j;
            }
            tmp = a[indx1][i];
            a[indx1][i] = a[indx2][i];
            a[indx2][i] = tmp;
        }
 
    system("pause");
    
    for (int i = 0; i < n; i++)
    {
        delete[]a[i];
    }
        delete [] a;
        return 0;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2018, 23:45
Ответы с готовыми решениями:

В каждом столбце прямоугольной матрицы обменять местами min и max элементы
хелп, товарищи)

Найти min и max элементы на главной диагонали матрицы и поменять местами соответствующие столбцы
Составить программу поиска минимального и максимального элементов массива расположенных на главной диагонали с дальнейшей переменой местами...

Найти в каждом столбце матрицы max и min элементы матрицы и вывести новую матрицу на экран
S (3,3) найти в каждом столбце матрицы max и min элементы матрицы и вывести новую матрицу на экран

16
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
15.03.2018, 23:52
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100;
            cout << a[i][j] << " "; 
        }
        cout << endl;
Не хватает }
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
16.03.2018, 00:46  [ТС]
Это я понял
Вот в этом месте проблема
Говорит, что: Идентификатор "i" не определён
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int j = 0; j < n; j++)
        {
            if (a[i][j] > max)
            {
                max = a[j][i];
                indx1 = j;
            }
            if (a[j][i] < min)
            {
                min = a[j][i];
                indx2 = j;
            }
            tmp = a[indx1][i];
            a[indx1][i] = a[indx2][i];
            a[indx2][i] = tmp;
        }
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
16.03.2018, 02:34
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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    size_t n, m;
    cout <<"Enter n: "; cin >>n;
    cout <<"Enter m: "; cin >>m;
    
      double **a = new double*[n]; 
    for (size_t i = 0; i < n; i++)
      a[i]=new double[m];
    
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
        a[i][j]=rand()%9 + 1;
        cout <<a[i][j]<<" ";
        }
    cout << endl;
    }
    cout << endl;
 
    for (size_t j = 0; j < m; j++)
    {
        double min=0, max=0;   
        for (size_t i = 0; i < n; i++)
        {
        if (i == 0 || a[i][j] <= min) min=a[i][j];
        if (i == 0 || a[i][j] >= max) max=a[i][j];
        }
        for (size_t i = 0; i < n; i++)
        {
        if (a[i][j] == min) a[i][j]=max;
        else if (a[i][j] == max) a[i][j]=min;
        }   
    }
    
    for (size_t i = 0; i < n; i++) 
    {
    for (size_t j = 0; j < m; j++)  
    cout <<a[i][j]<<" ";    
    cout << endl;    
    }
    
    delete[]a;
system("pause");
return 0;
}
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
23.03.2018, 21:37  [ТС]
Ваша программа не совсем корректно работает, при маленьком рандоме (10 чисел) большая вероятность в матрице 5х5, что элементы будут совпадать, поэтому когда они записаны подряд (5515) перестановка не корректно работает.
Думаю, так будет лучше.
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
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "locale.h"
#include <limits.h>
#include "ctime"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    srand((int)time(0));
    size_t n, m;
    cout << "Enter n: "; cin >> n;
    cout << "Enter m: "; cin >> m;
    double **a = new double*[n];
    for (size_t i = 0; i < n; i++)
        a[i] = new double[m];
 
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
            a[i][j] = rand() % 9 + 1;
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
 
    for (size_t j = 0; j < m; j++)
    {
        double min = std::numeric_limits<double>::max(), max = 0;
        for (size_t i = 0; i < n; i++)
        {
            if (a[i][j] <= min) min = a[i][j];
            if (a[i][j] >= max) max = a[i][j];
        }
        for (size_t i = 0; i < n; i++)
        {
            if (a[i][j] == min) a[i][j] = max;
            else if (a[i][j] == max) a[i][j] = min;
        }
    }
 
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
            cout << a[i][j] << " ";
        cout << endl;
    }
 
    for (size_t i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
    system("pause");
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
24.03.2018, 01:19
Цитата Сообщение от N1x0n Посмотреть сообщение
Ваша программа не совсем корректно работает
N1x0n, можно конкретный пример матрицы с некорректной работой
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
28.03.2018, 23:54  [ТС]
Вот пример некорректной работы.
Миниатюры
В каждом столбце матрицы поменять местами Min и Max элементы  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.03.2018, 00:00
Цитата Сообщение от N1x0n Посмотреть сообщение
Вот пример некорректной работы.
и что здесь некорректного ? минимальные значения каждого столбца поменялись местами с максимальными - разве Вы не это просили сделать ?
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
29.03.2018, 00:06  [ТС]
Заменяются все минимальные на 1 максимальный(в 3 столбце 3 одинаковых числа и они все были заменены на 7).
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.03.2018, 00:08
Цитата Сообщение от N1x0n Посмотреть сообщение
Заменяются все минимальные на 1 максимальный(в 3 столбце 3 одинаковых числа и они все были заменены на 7).
правильно что так заменяются. а как с Вашей точки зрения должно быть ???
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
29.03.2018, 19:05
Yetty, Поменять - не есть Заменить
Первый (если с равенством то или последний) встречный max, меняется местами с первый(последний) встречный min

Добавлено через 2 минуты
N1x0n,
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
#include "iostream"
#include "ctime"
 
#define Min_Value 10
#define Max_Value 99
 
using namespace std;
 
int main()
{
    srand(time(NULL));
    int n, m;
    
    cout << "Enter n: "; cin >> n;
    cout << "Enter m: "; cin >> m;
    
    int **arr = new int*[n];
    for (int i = 0; i < n; i++)
    {
        arr[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            arr[i][j] = Min_Value + rand() % (Max_Value - Min_Value + 1);;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    
    cout << endl;
 
    for (int j = 0; j < m; j++)
    {
        int min = arr[0][j], mini = 0,
            max = arr[0][j], maxi = 0;
        for (int i = 0; i < n; i++)
        {
            if (arr[i][j] < min)
            {
                min = arr[i][j];
                mini = i;
            }
            if (arr[i][j] > max)
            {
                max = arr[i][j];
                maxi = i;
            }
        }
        swap(arr[mini][j], arr[maxi][j]);
    }
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << arr[i][j] << " ";
        cout << endl;
    }
 
    for (int i = 0; i < n; i++)
        delete[]arr[i];
    delete[]arr;
 
    system("pause");
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.03.2018, 22:23
Цитата Сообщение от SuperKir Посмотреть сообщение
Поменять - не есть Заменить
что Вы хотите сказать ?
Цитата Сообщение от N1x0n Посмотреть сообщение
переставить Min и Max элементы
что было и сделано в моём коде

А Вашем коде как я понимаю происходит перестановка первого min и первого max (замечаем что в условии не идёт речь ни о первом min ни о первом max), с таким же успехом можно переставить например вторые и двадцать пятые (если они будут) min и max - только всё это не будет иметь никакого отношения к условию задачи.
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
30.03.2018, 00:10
Yetty, а то, что происходит в Вашем - является разрушением того, что было.
Цитата Сообщение от Yetty Посмотреть сообщение
что Вы хотите сказать ?
Что поменять местами двух людей на местах 1 и 2, не значит, что заменить этих людей другими.
Цитата Сообщение от Yetty Посмотреть сообщение
что было и сделано в моём коде
В Вашем коде элементы не переставляются, а заменяются, в этом существенное отличие
Цитата Сообщение от Yetty Посмотреть сообщение
А Вашем коде как я понимаю происходит перестановка первого min и первого max (замечаем что в условии не идёт речь ни о первом min ни о первом max), с таким же успехом можно переставить например вторые и двадцать пятые (если они будут) min и max - только всё это не будет иметь никакого отношения к условию задачи.
Да, именно перестановка. Первый/Последний определяется различием поставленного условия нахождения этого минимума/максимума. А то, что можно переставить - нужно точно знать условие. Если у меня несколько максимумов и 1 минимум, это не значит, что я все максимумы должен заменить на минимум. Это значит, что один из этих максимумов, поменяется местами с этим минимумом. Однако, как Вы заметили, у меня происходит конкретно перестановка Первого с Первым, это так, т.к. ТС не оговорил то, как будет происходить последующая перестановка если имеется более 1 пары чисел.

И да, условие задачи Переставить. Не заменить
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.03.2018, 01:14
SuperKir, Вы воспринимаете условие по своему. работайте хоть с первыми, хоть со вторыми, хоть с двадцать пятыми - или ещё что-нибудь себе придумайте и затем реализуйте это в коде. Если бы min и max было поровну и вопрос бы у Вас не появился - все max и min соответственно переставились (Ваш код конечно тут немного, а точнее совсем не справляется с поставленной задачей). Если их не поровну, например min больше возникает вопрос на что их заменить. Я выбрал самый логичный с моей точки зрения вариант - замену их на max. Это всё равно что решить задачу: переставьте числа 1, 1, 1, c числом 5. Я за вариант 5, 5, 5, и 1.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
30.03.2018, 01:38
А ещё можно кинуть исключение, когда количество max и min неравно.
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
30.03.2018, 01:49
New man, как вариант) остается Ждать ТС и гадать, что ему все таки надо в итоге)
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
31.03.2018, 00:10  [ТС]
Можно, но эта вероятность при рандоме, очень мала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2018, 00:10
Помогаю со студенческими работами здесь

Поменять местами max и min элементы матрицы, с учетом повторяемости
Добрый день, столкнулся с такой проблемой описанной в названии темы. Вот код всей программы #include &lt;stdio.h&gt; #include...

Поменять местами элементы главной диагонали матрицы содержащие min и max
Здраствуйте, может кто-нибудь помочь с задачкой: Среди элементов главной диагонали матрицы H(8x8) найти min и max элементы. Строки в...

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru