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

В матрице отсортировать строки по возрастанию минимального элемента строки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В массивах найти максимумы и поменять их местами http://www.cyberforum.ru/cpp-beginners/thread402636.html
Собственно такие задания, прошу у Вас помощи в их решениях!) Заранее, спасибо!) 1. В массивах А(57) и В(7х5) найти максимумы, замет поменять их местами. 2. Вычислить Z=(s1+s2)\(s1-s2), где S1-...
C++ Функции. Выведение на экран четверти. Огромная просьба, помочь в решении этих задач! Буду Вам крайне благодарен и признателен! 1. q=tg-lnx-√((|sin(x\12)+e^((x^2 )-5) |)) 2.F(x,y)={(x+y,если x>0;xy,если x≤0,y<0; 5x,в остальных... http://www.cyberforum.ru/cpp-beginners/thread402635.html
Определение наименьшего среди чисел. C++
Товарищи, помогите решить эти задания!) Буду Вам крайне благодарен! 1. Составить программу для определения наименьшего среди чисел (K^3)*sin(n+(k\n),( k=1,2…n). 2. M и N- числитель и знаменатель...
C++ Странная зависимость от размерности массива
Доброго времени суток! Написал программу,которая меняет первую строку и последнюю строку массива местами,в итоге получилось что она работает только с размерностью 3*3,а 4*4 или 2*2 не...
C++ Задачка с массивом http://www.cyberforum.ru/cpp-beginners/thread402623.html
Здравствуйте, обучаясь на первом курсе ивт столкнулся с проблемной задачей =\ с массивами совсем не получается найти общего языка =\ Заранее благодарен. Программа для расчёта средних статистических...
C++ Протабулировать функцию вычислить P(x)=\frac{{2e}^{3x+1}}{3x+4} для всех х, меняющихся от -1 до 5 шагом 0.3. Вывести на экран те значения х, для которых выполняется условие P(x)<=100. Ответ вывести в виде таблицы <<Nx P>>.... подробнее

Показать сообщение отдельно
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
09.12.2011, 06:25
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 секунд
но второй вариант, конечно, для наркоманов...
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru