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

В матрице M x N переставить строки таким образом, чтобы... - C++

Восстановить пароль Регистрация
 
JOKER DIMA
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 4
09.12.2011, 03:49     В матрице M x N переставить строки таким образом, чтобы... #1
В матрице M x N переставить строки таким образом, чтобы получилась последовательность q1>=q2>=…>=qm, где qi – минимальное значение среди всех элементов i – ой строки.
Программа должна выполнять ввод и вывод матрицы и дополнительных данных, выполнять необходимые действия и выводить результаты.

Добавлено через 2 часа 46 минут
Разработка и отладка алгоритмов и программ с использованием указателей
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2011, 03:49     В матрице M x N переставить строки таким образом, чтобы...
Посмотрите здесь:

В данном натуральном числе переставить цифры таким образом, чтобы образовалось наименьшее число, записанное этими цифрами C++
C++ В данном натуральном числе переставить цифры таким образом, чтобы получилось наименьшее число записанное этими же цифрами
C++ Преобразовать матрицу А(mxn) таким образом чтобы строки с нечетным индексом были упорядочены по убыванию, а четные по возрастанию.
Переставить числа в массиве таким образом что бы слева от границы стояли числа меньшие или равные b C++
C++ Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2.
В данном натуральном числе переставить цифры таким образом, чтобы образовалось наименьшее число C++
C++ Реализовать процедуру таким образом, чтобы она возвращала 2 значения
C++ Переставить числа в массиве таким образом, чтобы сначала шли элементы меньше a[b], затем равные a[b], и потом большие

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
09.12.2011, 06:25     В матрице M x N переставить строки таким образом, чтобы... #2
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
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
#include <functional>
 
typedef std::vector<double> Row;
typedef std::vector<Row> Matrix;
 
struct min
{
    bool operator () (const Row& op1, const Row& op2) const
    {
        return *std::min_element( op1.begin(), op1.end() ) > *std::min_element( op2.begin(), op2.end() );
    }
};
 
std::ostream& operator << (std::ostream& out, const Row& r)
{
    for (Row::const_iterator it =  r.begin(), end = r.end(); it != end; ++it)
    {
        out << *it << ' ';
    }
    return out;
}
std::ostream& operator << (std::ostream& out, const Matrix& m)
{
    for (Matrix::const_iterator it = m.begin(), end = m.end(); it != end; ++it)
    {
        out << *it << std::endl;
    }
    return out;
}
 
void generate ( Matrix& m, Matrix::size_type M, Matrix::size_type N )
{
    srand( static_cast<unsigned> ( time(0) ) );
    m.resize( N );
    for (Matrix::iterator it = m.begin(), end = m.end(); it  != end; ++it)
    {
        it->reserve( N );
        for (Matrix::size_type i = N; i; --i)
        {
            it->push_back( static_cast<double> ( rand() ) / 32767 * 10 * ( rand() % 2 ? -1 : 1 ) );
        }
    }
}
 
void main ()
{
    Matrix m;
 
    generate(m, 5, 5);
 
    std::cout << m << "=============================" << std::endl;
 
    std::sort(m.begin(), m.end(), min() );
 
    std::cout << m;
}
Добавлено через 1 час 2 минуты
Ещё так можно...
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
#include <stdio.h>
 
#define M 5
#define N 5
 
void printMatrix(double m[M][N], unsigned width, unsigned height)
{
    for (int i = 0; i != height; ++i)
    {
        for (int j = 0; j != width; ++j)
        {
            printf("%lf ", m[i][j]);
        }
        printf("\n");
    }
}
 
double min(double r[N], unsigned size)
{
    double minimum = *r;
    for (unsigned i = 1; i != size; ++i)
        minimum = r[i] < minimum ? r[i] : minimum;
    return minimum;
}
 
void swapRows(double r1[N], double r2[], unsigned w)
{
    double cnt;
    for ( int i = 0; i != w; ++i)
    {
        cnt = r1[i];
        r1[i] = r2[i];
        r2[i] = cnt;
    }
}
 
unsigned maxRow(double m[M][N], unsigned height, unsigned width)
{
    unsigned max = 0;
    for (int i = 1; i != height; ++i)
    {
        max = min( m[i], width ) > min( m[max], width ) ? i : max;
    }
    return max;
}
 
void sort(double m[M][N], unsigned height, unsigned width)
{
    int i = 0;
    while ( height - i > 1 )//Пока в неотсортированной части осталось больше одного элемента
    {
        unsigned max = maxRow(m + i, height - i, width) + i;//Получаем указатель на максимальный элемент
        printf("stroka s naibolshim minimalnim elementom: %d (minimum: %lf)\n", max + 1, min(m[max], width));
        if( i != max )
        {
            swapRows(m[i], m[max], width);//Меняем его с первым
            printf("stroki %d i %d pomeneni mestami.\n", i + 1, max + 1);
        }
 
        ++i;//Двигаемся дальше
    }
}
void generate(double matrix[M][N], unsigned height, unsigned width)
{
    for (int i = 0; i != height; ++i)
    {
        for ( int j = 0; j != width; ++j)
        {
            printf("Vvedite element [%d][%d]: ", i + 1, j + 1);
            scanf("%lf", matrix[i] + j);
        }
    }
}
 
void main ()
{
    double matrix[M][N];
 
    generate(matrix, M, N);
    printf("sgenerirovana matrica\n");
    printMatrix(matrix, M, N);
    sort(matrix, M, N);
    printf("rezultat preobrazovani:\n");
    printMatrix(matrix, M, N);
}
Добавлено через 57 секунд
но второй вариант, конечно, для наркоманов...
Yandex
Объявления
09.12.2011, 06:25     В матрице M x N переставить строки таким образом, чтобы...
Ответ Создать тему
Опции темы

Текущее время: 00:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru