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

Обнулить элементы матрицы стоящие после максимального элемента - C++

Восстановить пароль Регистрация
 
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
24.01.2014, 19:55     Обнулить элементы матрицы стоящие после максимального элемента #1
Здравствуйте! Помогите пожалуйста обнулить элементы матрицы стоящие после максимального элемента и выполнить сортировку элементов стоящих до максимального по возрастанию.

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
#include <iostream>
#include <conio.h>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    const int N = 7;
    int Matrix[N][N];
    
    cout << "Матрица заполняется произвольными числами в интервале от 10 до 99" << endl;
    cout << "Получена матрица" << endl;
    // заполнение и вывод матрицы
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            Matrix[i][j] = rand() % (99 - 10 + 1) + 10;
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
    
    cout << "\n\n";
 
    // поиск максимального элемента
    int max = Matrix[0][0], index_i(0), index_j(0);
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            
            if(Matrix[i][j] > max)
            {
                max = Matrix[i][j];
                index_i = i;
                index_j = j;
            }
            
        }
    }
    
    cout << "\n\nМаксимальный элемент [" << index_i <<"]["<< index_j <<"]="<< max << "\n\n";
    
    // обнуление элементов матрицы стоящих после максимального (работает)
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j <N; j++)
        {
            if(i > index_i)
                Matrix[i][j] = 0;
            
        }
    }
    // вывод обработанной матрицы
    cout << "Матрица в обработанном виде\n\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
 
    _getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 19:55     Обнулить элементы матрицы стоящие после максимального элемента
Посмотрите здесь:

Обнулить элементы матрицы C++
Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. Определить индексы максимального C++
Все элементы, равные нулю, поставить сразу после максимального элемента данного массива C++
Обнулить нечетные элементы матрицы C++
Обнулить четные элементы матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
24.01.2014, 21:10     Обнулить элементы матрицы стоящие после максимального элемента #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
86
87
#include <iostream>
#include <conio.h>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    const int N = 7;
    int Matrix[N][N];
    
    cout << "ГЊГ*òðèöГ* Г§Г*ïîëГ*ГїГҐГІГ±Гї ïðîèçâîëüГ*ûìè Г·ГЁГ±Г«Г*ìè Гў ГЁГ*òåðâГ*ëå îò 10 äî 99" << endl;
    cout << "Ïîëó÷åГ*Г* Г¬Г*òðèöГ*" << endl;
    // Г§Г*ïîëГ*ГҐГ*ГЁГҐ ГЁ âûâîä Г¬Г*òðèöû
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            Matrix[i][j] = rand() % (99 - 10 + 1) + 10;
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
    
    cout << "\n\n";
 
    // ïîèñê Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî ýëåìåГ*ГІГ*
    int max = Matrix[0][0], index_i(0), index_j(0);
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            
            if(Matrix[i][j] > max)
            {
                max = Matrix[i][j];
                index_i = i;
                index_j = j;
            }
            
        }
    }
    
    cout << "\n\nГЊГ*ГЄГ±ГЁГ¬Г*ëüГ*ûé ýëåìåГ*ГІ [" << index_i <<"]["<< index_j <<"]="<< max << "\n\n";
    
    // îáГ*óëåГ*ГЁГҐ ýëåìåГ*òîâ Г¬Г*òðèöû ñòîÿùèõ ïîñëå Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî (Г°Г*áîòГ*ГҐГІ)
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j <N; j++)
        {
            if(i > index_i || j > index_j) // Добавил условие чтобы и дальше не отображалось
                Matrix[i][j] = 0;
            
        }
    }
    
    int j = 0;
    
    while(j < N)
    {
        for(int i = 0; i < N; i++)
        {
            if(Matrix[j][i] > Matrix[j][i + 1] && Matrix[j][i + 1] != 0) 
            {
                int temp = Matrix[j][i];
                Matrix[j][i] = Matrix[j][i + 1];
                Matrix[j][i + 1] = temp;
            }
        }
        j++;
    }
    
    // âûâîä îáðГ*áîòГ*Г*Г*îé Г¬Г*òðèöû
    cout << "ГЊГ*òðèöГ* Гў îáðГ*áîòГ*Г*Г*îì âèäå\n\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
 
    system("pause");
    return 0;
}
Добавлено через 6 минут
Не, что-то не так...
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
24.01.2014, 22:27  [ТС]     Обнулить элементы матрицы стоящие после максимального элемента #3
Ваш вариант не работает(
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
24.01.2014, 22:31     Обнулить элементы матрицы стоящие после максимального элемента #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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <conio.h>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    //srand(time(0));
    const int N = 7;
    int Matrix[N][N];
    
    cout << "ГЊГ*òðèöГ* Г§Г*ïîëГ*ГїГҐГІГ±Гї ïðîèçâîëüГ*ûìè Г·ГЁГ±Г«Г*ìè Гў ГЁГ*òåðâГ*ëå îò 10 äî 99" << endl;
    cout << "Ïîëó÷åГ*Г* Г¬Г*òðèöГ*" << endl;
    // Г§Г*ïîëГ*ГҐГ*ГЁГҐ ГЁ âûâîä Г¬Г*òðèöû
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            Matrix[i][j] = rand() % (99 - 10 + 1) + 10;
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
    
    cout << "\n\n";
 
    // ïîèñê Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî ýëåìåГ*ГІГ*
    int max = Matrix[0][0], index_i(0), index_j(0);
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            
            if(Matrix[i][j] > max)
            {
                max = Matrix[i][j];
                index_i = i;
                index_j = j;
            }
            
        }
    }
    
    cout << "\n\nГЊГ*ГЄГ±ГЁГ¬Г*ëüГ*ûé ýëåìåГ*ГІ [" << index_i <<"]["<< index_j <<"]="<< max << "\n\n";
    
    // îáГ*óëåГ*ГЁГҐ ýëåìåГ*òîâ Г¬Г*òðèöû ñòîÿùèõ ïîñëå Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî (Г°Г*áîòГ*ГҐГІ)
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            if(i > index_i)
                Matrix[i][j] = 0;
            if(Matrix[i][j] == max)
            {
                while(j < N)
                {
                    Matrix[i][j + 1] = 0;
                    j++;
                }
            }
        }
    }
    
//Сортировка
    for(int i = 0; i < N * N; i++)
    {
        for(int i = 0; i < N - 1; i++)
        {
            for(int j = 0; j < N; j++)
            {
                if(Matrix[i][j + 1] == 0)
                    break;
                if(Matrix[i][j] > Matrix[i][j + 1])
                {
                    int temp = Matrix[i][j];
                    Matrix[i][j] = Matrix[i][j + 1];
                    Matrix[i][j + 1] = temp;
                }
            }
        }
        for(int i = 0; i < N; i++)
        {
            for(int j = 0; j < N - 1; j++)
            {
                if(Matrix[i][j + 1] == 0)
                    break;
                if(Matrix[i][j] > Matrix[i][j + 1])
                {
                    int temp = Matrix[i][j];
                    Matrix[i][j] = Matrix[i][j + 1];
                    Matrix[i][j + 1] = temp;
                }
            }
        }
    }
    
    // âûâîä îáðГ*áîòГ*Г*Г*îé Г¬Г*òðèöû
    cout << "ГЊГ*òðèöГ* Гў îáðГ*áîòГ*Г*Г*îì âèäå\n\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << setw(4) << Matrix[i][j];    
        }
        cout << "\n\n";
    }
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от templas Посмотреть сообщение
Ваш вариант не работает(
Да, там я отписался.
Этот вариант рабочий.
Yandex
Объявления
24.01.2014, 22:31     Обнулить элементы матрицы стоящие после максимального элемента
Ответ Создать тему
Опции темы

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