Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
1

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

15.03.2018, 23:45. Просмотров 759. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2018, 23:45
Ответы с готовыми решениями:

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

Поменять местами max и min элементы файла
Необходимо поменять местами max и min элементы файла, помогите!

В каждой строке матрицы найти min и max, поменять местами
Условие: В каждой строке матрицы A=(aij)mxn найти максимальный и минимальный элементы. Сформировать...

Ввести значения элементов массива, поменять местами min/max элементы
Помогите пожалуйста, нада написать программу которая позволяет ввести 10 елементов одного массива,...

Поменять местами max и min четных строк матрицы (без функции)
Сделать двумерный массив без функции на С++. Дана квадратная матрица. Размерность вводится....

16
SuperKir
464 / 417 / 290
Регистрация: 10.03.2015
Сообщений: 1,778
Завершенные тесты: 1
15.03.2018, 23:52 2
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
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
16.03.2018, 00:46  [ТС] 3
Это я понял
Вот в этом месте проблема
Говорит, что: Идентификатор "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
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
16.03.2018, 02:34 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
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
16.03.2018, 02:34
N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
23.03.2018, 21:37  [ТС] 5
Ваша программа не совсем корректно работает, при маленьком рандоме (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
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
24.03.2018, 01:19 6
Цитата Сообщение от N1x0n Посмотреть сообщение
Ваша программа не совсем корректно работает
N1x0n, можно конкретный пример матрицы с некорректной работой
0
N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
28.03.2018, 23:54  [ТС] 7
Вот пример некорректной работы.
0
Миниатюры
В каждом столбце матрицы поменять местами Min и Max элементы  
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
29.03.2018, 00:00 8
Цитата Сообщение от N1x0n Посмотреть сообщение
Вот пример некорректной работы.
и что здесь некорректного ? минимальные значения каждого столбца поменялись местами с максимальными - разве Вы не это просили сделать ?
0
N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
29.03.2018, 00:06  [ТС] 9
Заменяются все минимальные на 1 максимальный(в 3 столбце 3 одинаковых числа и они все были заменены на 7).
0
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
29.03.2018, 00:08 10
Цитата Сообщение от N1x0n Посмотреть сообщение
Заменяются все минимальные на 1 максимальный(в 3 столбце 3 одинаковых числа и они все были заменены на 7).
правильно что так заменяются. а как с Вашей точки зрения должно быть ???
0
SuperKir
464 / 417 / 290
Регистрация: 10.03.2015
Сообщений: 1,778
Завершенные тесты: 1
29.03.2018, 19:05 11
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
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
29.03.2018, 22:23 12
Цитата Сообщение от SuperKir Посмотреть сообщение
Поменять - не есть Заменить
что Вы хотите сказать ?
Цитата Сообщение от N1x0n Посмотреть сообщение
переставить Min и Max элементы
что было и сделано в моём коде

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

И да, условие задачи Переставить. Не заменить
0
Yetty
3350 / 2296 / 1494
Регистрация: 18.12.2017
Сообщений: 7,269
30.03.2018, 01:14 14
SuperKir, Вы воспринимаете условие по своему. работайте хоть с первыми, хоть со вторыми, хоть с двадцать пятыми - или ещё что-нибудь себе придумайте и затем реализуйте это в коде. Если бы min и max было поровну и вопрос бы у Вас не появился - все max и min соответственно переставились (Ваш код конечно тут немного, а точнее совсем не справляется с поставленной задачей). Если их не поровну, например min больше возникает вопрос на что их заменить. Я выбрал самый логичный с моей точки зрения вариант - замену их на max. Это всё равно что решить задачу: переставьте числа 1, 1, 1, c числом 5. Я за вариант 5, 5, 5, и 1.
0
New man
301 / 213 / 74
Регистрация: 23.05.2011
Сообщений: 969
Завершенные тесты: 6
30.03.2018, 01:38 15
А ещё можно кинуть исключение, когда количество max и min неравно.
0
SuperKir
464 / 417 / 290
Регистрация: 10.03.2015
Сообщений: 1,778
Завершенные тесты: 1
30.03.2018, 01:49 16
New man, как вариант) остается Ждать ТС и гадать, что ему все таки надо в итоге)
0
N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 138
Записей в блоге: 1
Завершенные тесты: 1
31.03.2018, 00:10  [ТС] 17
Можно, но эта вероятность при рандоме, очень мала.
0
31.03.2018, 00:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2018, 00:10

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

В каждом столбце матрицы поменять местами первый и последний элемент
В каждом столбце матрицы К(6,5) поменять местами первый и последний элемент Ребят как эту...

Поменять местами минимальный и максимальный элемент в каждом столбце матрицы
Дано матрицу размера 5 x 10 Преобразовать матрицу, поменяв местами минимальный и максимальный...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.