Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
1

Изменение цвета фона строк матрицы по заданному условию

12.05.2018, 01:59. Просмотров 816. Ответов 13
Метки нет (Все метки)

Здравствуйте! Будьте добры, помогите разобраться с таким нюансом:
у меня многофайловый проект, в тексте одной из задач есть код для вывод матрицы x[m][N] с выделением цветом минимальных и максимальных элементов, выглядит вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Show(int x[][N], int m, int min, int max, const char caption[])
{
    WORD color; // цвет для вывода символов
    cout << "\n";
    cout << caption;
 
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < N; j++) {
            color = 0b00011111;
            if (x[i][j] == min) color = 0b00111100;
            if (x[i][j] == max) color = 0b00111010;
            SetConsoleTextAttribute(h, color);
            cout << setw(7) << x[i][j];
            SetConsoleTextAttribute(h, 0b00011111);
        } // for j
        cout << "\n";
    } // for i
    cout << "\n";
    SetConsoleTextAttribute(h, 0b00011111);
} // Show
вопрос: как мне изменить цвет фона строки/строк, которая/ые содержит/ат min и max элементы? Если я сравниваю с min или max, то выделение начинается именно с этого элемента, а не с начала строки. Мне нужно сравнивать "i" max или min с "i" матрицы и при совпадении изменять фон?..
Заранее благодарю за любую помощь. Сдавать сегодня...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2018, 01:59
Ответы с готовыми решениями:

Изменение цвета букв и фона в консоле
Подскажите какие функции нужно использовать чтобы можно было закрашивать...

Изменение цвета текста и фона в консольном приложении
Вопросик есть какая библиотека используется для подключения цвета в с++ цвет...

Изменение цвета текста/фона при консольном выводе
Доброго времени суток. Как изменить цвет фона/текста в консоли с++ в формате...

Изменение цвета текста и фона при консольном выводе
Всем привет. Помогите решить мою проблему. Как менять цвет текста и фона при...

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

13
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 02:07 2
Так что ли?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Show(int x[][N], int m, int min, int max, const char caption[])
{
    WORD color; // цвет для вывода символов
    cout << "\n";
    cout << caption;
 
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < N; j++) {
            color = 0b00011111;
            if (x[i][j] == min) color = 0b00111100;
            if (x[i][j] == max) color = 0b00111010;
            SetConsoleTextAttribute(h, color);
        } // for j
        for (int j = 0; j < N; j++)
            cout << setw(7) << x[i][j];
        cout << "\n";
    } // for i
    cout << "\n";
    SetConsoleTextAttribute(h, 0b00011111);
} // Show
0
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 02:16  [ТС] 3
что это даёт? может я чего-то не пойму... выделение даже то, что у меня было, пропало
0
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 02:19 4
А так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Show(int x[][N], int m, int min, int max, const char caption[])
{
    WORD color; // цвет для вывода символов
    cout << "\n";
    cout << caption;
 
    for (int i = 0; i < m; i++) {
        color = 0b00011111;
        for (int j = 0; j < N; j++) {
            if (x[i][j] == min && color != 0b00111010) color = 0b00111100;
            if (x[i][j] == max) color = 0b00111010;
            SetConsoleTextAttribute(h, color);
        } // for j
        for (int j = 0; j < N; j++)
            cout << setw(7) << x[i][j];
        cout << "\n";
    } // for i
    cout << "\n";
    SetConsoleTextAttribute(h, 0b00011111);
} // Show
1
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 02:23  [ТС] 5
QuakerRUS, Вы мой кумир а Вы могли бы прокомментировать свои изменения в 10-й строке и почему сделали отдельный цикл для вывода строки?
0
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 02:27 6
kuks707, Перед тем как выводить на экран строку, вам надо узнать есть ли в ней минимальные и максимальные элементы. Поэтому первым вложенным циклом вы ищете сами элементы и меняете цвет, а только во втором вложенном цикле уже выводите значения на экран. В 10й строке я добавил дополнительную проверку, чтобы приоритет цвета максимального элемента был выше, чем у минимального. То есть, если у вас будет строка 1 2 3 5 1, где 1 и 5 минимальные и максимальные элементы, то последняя единица не перекрасит строку в цвет минимума, так как уже был найден максимальный элемент.
1
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 02:35  [ТС] 7
QuakerRUS, с этим "чтобы приоритет цвета максимального элемента был выше, чем у минимального" у меня тоже была проблема. Я Вас понял.
Премного благодарен! Всего Вам наилучшего, как можно больше и чаще!
0
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 09:56  [ТС] 8
QuakerRUS, ночью сонный не доглядел... теперь в выделенных фоном строках все цифры таких же цветов, как min и max...
0
Миниатюры
Изменение цвета фона строк матрицы по заданному условию  
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 14:55 9
Лучший ответ Сообщение было отмечено kuks707 как решение

Решение

Так что ли хотите?

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
void Show(int x[][N], int m, int min, int max, const char caption[])
{
    WORD color, bgcolor; // цвет и цвет фона для вывода символов
    cout << "\n";
    cout << caption;
 
    for (int i = 0; i < m; i++) {
        bgcolor = 1;
        for (int j = 0; j < N; j++)
            if (x[i][j] == min || x[i][j] == max) bgcolor = 3;
        for (int j = 0; j < N; j++)
        {
            color = 15;
            if (x[i][j] == min) color = 12;
            if (x[i][j] == max) color = 10;
            SetConsoleTextAttribute(h, bgcolor * 16 + color);
            cout << setw(7) << x[i][j];
        } // for j
        cout << "\n";
    } // for i
    cout << "\n";
    bgcolor = 1;
    color = 15;
    SetConsoleTextAttribute(h, bgcolor * 16 + color);
} // Show
1
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 20:24  [ТС] 10
QuakerRUS, да, благодарю Вас за помощь! а я пробовал такое условие (10я строка) ставить после 7й строки, теперь до меня дошло насчет фона, но не соображу, что даёт "bgcolor * 16 + color"? 1*16+какой из color в цикле for?
А результат, что и требовался (прикрепил).
0
Миниатюры
Изменение цвета фона строк матрицы по заданному условию  
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 21:31 11
Цитата Сообщение от kuks707 Посмотреть сообщение
не соображу, что даёт "bgcolor * 16 + color"?
Чтобы задать цвет, нужно цвет фона умножить на 16 и прибавить цвет текста.

Цитата Сообщение от kuks707 Посмотреть сообщение
1*16+какой из color в цикле for?
1 - синий цвет.
3 - голубой.
10 - ярко-красный.
12 - ярко-зеленый.
15 - ярко-белый.
0
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 21:36  [ТС] 12
вот здесь
C++
1
2
3
4
5
            color = 15;
            if (x[i][j] == min) color = 12;
            if (x[i][j] == max) color = 10;
            SetConsoleTextAttribute(h, bgcolor * 16 + color);
            cout << setw(7) << x[i][j];
bgcolor * 16 + color равен 1*16+15, если ==мин, то 1*16+12, сели макс то 1*16+10, так?
0
QuakerRUS
470 / 427 / 204
Регистрация: 30.10.2017
Сообщений: 1,370
Завершенные тесты: 3
12.05.2018, 21:40 13
1 * 16 + 15 - ярко-белый текст на синем фоне (обычный вывод)
3 * 16 + 15 - ярко-белый текст на голубом фоне (если в этой строке есть минимум или максимум)
3 * 16 + 10 - ярко-красный текст на голубом фоне (минимум)
3 * 16 + 12 - ярко-зеленый текст на голубом фоне (максимум)
0
kuks707
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 12
12.05.2018, 21:42  [ТС] 14
а, "if (x[i][j] == min || x[i][j] == max) bgcolor = 3;" тут bgcolor пропустил, увидел уже. Понял. Благодарю Вас за помощь!
0
12.05.2018, 21:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2018, 21:42

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

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

Подсчитать количество строк матрицы, удовлетворяющих условию
Уважаемые программисты помогите, пожалуйста!!! нужно решить задачу на С++, а то...


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

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

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