Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
53 / 57 / 34
Регистрация: 14.03.2014
Сообщений: 785
1

Поменять местами первую строку и строку с минимальным элементом

12.01.2017, 21:30. Просмотров 1009. Ответов 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
#include<iostream>
using namespace std;
 
void show_array(int *m[], unsigned rows, unsigned cols)
{
    cout << endl;
    for (size_t i = 0; i < rows; i++)
    {
        for (size_t j = 0; j < cols; j++)
            cout << m[i][j] << " ";
        cout << endl;
    }
        
}
 
void swap_min(int *m[], unsigned rows, unsigned cols)
{
    int min_elem = m[0][0];
    int min_str = 0;
    for (size_t i = 0; i < rows; i++)
        for (size_t j = 0; j < cols; j++)
        {
            if (m[i][j] < min_elem)
            {
                min_elem = m[i][j];
                min_str = i;
            }
                
        }
    //
    
    int** col = m;
    m = m + min_str;
    (m + min_str) = col;
 
    show_array(m, rows, cols);
    
}
 
int main()
{
    unsigned rows, cols;
    cin >> rows; cin >> cols;
    int** M = new int* [rows];
    for (size_t i = 0; i < rows; i++)
        M[i] = new int[cols];
 
    for (size_t i = 0; i < rows; i++)
        for (size_t j = 0; j < cols; j++)
            cin >> M[i][j];
 
    swap_min(M, rows, cols);
    //Delete
    for (int i = 0; i < rows; i++)
        delete[] M[i];
    delete[] M;
    system("pause");
    return 0;
}
Ругается на это: (m + min_str) = col;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2017, 21:30
Ответы с готовыми решениями:

Поменять местами строку с максимальный элемент и строку с минимальным элементом матрицы
привет!я хотел бы попросить знающих людей написать программу на языке С!надо поменять местами рядок...

Поменять местами строку матрицы с максимальным и минимальным элементом
Проблема такова: программа меняет местами строку с максимальным и минимальным элементом. Когда я...

Поменять местами строку с максимальным и минимальным элементом матрицы
Задана матрица размером NxN. Поменять местами строку с максимальным элементом матрицы и строку с...

Поменять местами строку с минимальным элементом на главной диагонали со строкой с заданным номером t.
Задана квадратная матрица, размерности n, где n=2z. Поменять местами строку с минимальным...

3
1471 / 935 / 809
Регистрация: 30.04.2016
Сообщений: 3,251
12.01.2017, 22:31 2
Senarist, не знаю нужно ли оно вам, но вот еще одно решение без указателей

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
#include <iostream>
 
using namespace std;
 
void MatrixInput(int** X, int N, int M)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cin >> X[i][j];
        }
    }
}
 
void MatrixOutput(int** X, int N, int M)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout << X[i][j] << " ";
        }
        cout << endl;
    }
}
 
int main()
{
    int N, M, num, min;
    cout << "Введите размеры матрицы:" << endl;
    cout << "N = ";
    cin >> N;
    cout << "M = ";
    cin >> M;
    int** A = new int*[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[M];
    }
    cout << "Введите матрицу:" << endl;
    MatrixInput(A, N, M);
    min = A[0][0];
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            if (A[i][j] < min)
            {
                min = A[i][j];
                num = i;
                break;
            }
        }
    }
    for (int j = 0; j < M; j++)
    {
        swap(A[0][j], A[num][j]);
    }
    cout << "Матрица после обмена:" << endl;
    MatrixOutput(A, N, M);
    for (int i = 0; i < N; i++)
    {
        delete[] A[i];
    }
    system("pause");
    return 0;
}
0
53 / 57 / 34
Регистрация: 14.03.2014
Сообщений: 785
13.01.2017, 11:52  [ТС] 3
Fixer_84 разобрался вроде с указателями. А ваш вариант не верно работает, break там не нужен )
0
1471 / 935 / 809
Регистрация: 30.04.2016
Сообщений: 3,251
13.01.2017, 16:47 4
Senarist, да. Вы правы. Я поставил break по ошибке.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2017, 16:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Поменять местами первую строку и строку сумма элементов которой минимальна
Дан двумерный массив размера NxM. Поменять местами первую строку и строку сумма элементов которой...

Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент
1)В матрице поменять местами 1 строку и строку содержащие последнее вхождение элемента...

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

Поменять местами первую строку матрицы и строку, содержащую максимальный отрицательный элемент
:cry: Ребята выручайте. Без вас мне край. У меня не было С++ ,но мне надо сделать задачку и...


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

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

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