Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
#1

Поменять местами строки в массиве - C++

16.11.2010, 23:17. Просмотров 4941. Ответов 4
Метки нет (Все метки)

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

Моя идея в том,чтобы найти все минимальные элементы строк и записать их в одномерный массив,потом отсортировать.Это легко.А вот что потом..Чтобы поменять строки в двумерном массиве местами,нужно начиная с первого индекса одномерного массива проверить,в какой строке двумерного есть значение.Но может быть и так,что в строке может находиться два значения из двумерного массива.Если не трудно,помогите с реализацией этой части.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2010, 23:17     Поменять местами строки в массиве
Посмотрите здесь:

Поменять местами строки в двумерном массиве - C++
Пользователь вводит элементы двумерного массива. Необходимо поменять местами две строки, индексы которых также вводятся с клавиатуры и...

Поменять местами строки в массиве структурных переменных - C++
A- массив структурных переменных. Нужно поменять местами строки A и A struct Q { int N; char H; }; int main() ...

Функция и двухмерный массив (Поменять в массиве местами строки) - C++
Дан массив действительных чисел размера m на n, где m и n – натуральные числа. Поменять в массиве местами строку с наибольшим и строку с...

В двумерном массиве A[N][M] поменять местами строки,в которых сумма элементов максимальна и минимальна. - C++
Помогите пожалуйста..

В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки - C++
В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки.

В двухмерном массиве целых чисел поменять местами строки, симметричные относительно середины массива - C++
В двухмерном массиве целых чисел поменять местами строки, симметричные относительно середины массива (горизонтальной линии)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 23:30     Поменять местами строки в массиве #2
Код
    запустить цикл для всех элементов первой строки
        создать временный элемент, присвоить ему значение элемента первой строки
        элементу первой строки присвоить значение элемента второй строки
        элементу второй строки присвоить значение временного элемента
ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
16.11.2010, 23:45  [ТС]     Поменять местами строки в массиве #3
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.11.2010, 04:44     Поменять местами строки в массиве #4
Вам надо к массиву применить обычную пузырьковую сортировку с двумя нюансами:
1. В обычном пузырьке сравниваются два соседних элемента массива (т.е. if (a[i - 1] > a[i])), вам же надо написать функцию поиска минимума в строке двумерного массива и сравнивать как if (min(a[i - 1] > min(a[i]))).
2. В пузырьке происходит обмен элементов массива обычным, всем известным способом, через темповую переменную. Вам же надо написать функцию, которая обменивает элементы двух строк массива (по сути тот же способ, через темп, но запускается в цикле для всех элементов строки) и в самом пузырьке вместо обмена элементов массива между собой вызывать эту функцию.

Добавлено через 17 минут
В общем-то вот...

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
#include <iostream>
#include <iomanip>
 
double min(double *a, int M);
void swap(double *a1, double *a2, int M);
void sort(double **matrix, int N, int M);
 
int main()
{
    double **matrix;
    int N, M;
 
    std::cout << "Enter N: ";
    std::cin >> N;
    std::cout << "Enter M: ";
    std::cin >> M;
 
    matrix = new double *[N];
 
    for (int i = 0; i < N; i++)
        matrix[i] = new double [M];
    
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            std::cout << "matrix[" << i << "][" << j << "] = ";
            std::cin >> matrix[i][j];
        }
    }
 
    std::cout << std::endl << std::endl << "Before sorting:" << std::endl << std::endl;
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << std::setw(3) << matrix[i][j] << " ";
 
        std::cout << std::endl;
    }
 
    sort(matrix, N, M);
 
    std::cout << std::endl << std::endl << "After sorting:" << std::endl << std::endl;
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << std::setw(3) << matrix[i][j] << " ";
 
        std::cout << std::endl;
    }
 
    for (int i = 0; i < N; i++)
        delete [] matrix[i];
 
    delete [] matrix;
 
    std::cin.get();
    return 0;
}
 
double min(double *a, int M)
{
    double m = a[0];
 
    for (int i = 0; i < M; i++)
        if (m > a[i])
            m = a[i];
 
    return m;
}
 
void swap(double *a1, double *a2, int M)
{
    for (int i = 0; i < M; i++)
    {
        double temp = a1[i];
        a1[i] = a2[i];
        a2[i] = temp;
    }
}
 
void sort(double **matrix, int N, int M)
{
    for (int i = 0; i < N; i++)
        for (int j = N - 1; j > i; j--)
            if (min(matrix[j - 1], M) > min(matrix[j], M))
                swap(matrix[j - 1], matrix[j], M);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2010, 05:07     Поменять местами строки в массиве
Еще ссылки по теме:

В двумерном массиве поменять местами максимальный и минимальный элемент местами - C++
Написать фрагмент программы для решения следующей задачи.В двумерном массиве поменять местами максимальный и минимальный элемент местами....

Поменять местами элементы в массиве - C++
Народ не могу понять допустим у меня есть массив #include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string...

Поменять местами столбцы в массиве - C++
Дан массив размером nxn, насколько я понял динамический. Если количество стобцов четное то поменять столбцы по правилу: первый со вторым,...

Поменять элементы местами в массиве - C++
swap (myArray,myArray); swap (myArray,myArray); swap (myArray,myArray); Это пытался привести через цикл. Подскажите где...

Поменять местами элементы в массиве - C++
Решаю задачу из учебника С. Праты Нужно заполнить массив значениями, а затем кроме первого и последнего вывести их в обратном порядке. ...

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


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.11.2010, 05:07     Поменять местами строки в массиве #5
Цитата Сообщение от ol4ik Посмотреть сообщение
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
это вот ответ на это
Цитата Сообщение от ol4ik
Чтобы поменять строки в двумерном массиве местами
любые две строки можно поменять местами поэлементно, можно ещё через memcpy()
Yandex
Объявления
17.11.2010, 05:07     Поменять местами строки в массиве
Ответ Создать тему
Опции темы

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