Задать вопрос
@turchik2808

Как покрасить цветом значения в консоли С++?

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

Я покрасил только максимальную разность например если у нас есть такие числа: 1 3 2 6 - максимальная разность будет 4. Как мне покрасить два числа где находится это разность, в данном случае 2 и 6 -их и нужно покрасить.
Вот код:
#include <iostream>
#include <ctime>
#include <Windows.h>
using namespace std;

void massiv(int* x, int n)//функция заполнения и изменения 
{
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

	for (int i = 0; i < n; i++)//заполнение массива
	{
		x[i] = rand() % 10;
		cout << x[i] << " ";
	}
	int id = 0; // id - первый элемент пары, дающей максимальную разность
	
	for (int i = 1; i < n - 1; i++)
		if (abs(x[i] - x[i + 1]) > abs(x[id] - x[id + 1]))
		{
			id = i;

		}
	SetConsoleTextAttribute(hConsole, (WORD)((0 << 4) | 4)); // покраска максимальной разности
	cout << endl;
	cout << abs(x[id + 1] - x[id]);

}


int main()
{
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	srand(time(NULL));
	int n;
	while (!(cin >> n)) //проверка на число
	{
		cin.clear();
		while (cin.get() != '\n');
		cout << "NEVERNII VVOD" << endl;
	}
	if (n <= 0 || n == 1)
	{
		cout << "Vvedite zanogo";
		cin >> n;
	}
	int* x = new int[n]; //динамическая переменная выделение памяти


	massiv(x, n);//вызов функции
	cout << "\n";
	SetConsoleTextAttribute(hConsole, (WORD)((0 << 8) | 15));
	cout << endl;
	system("pause");
	return 0;
};
  • Вопрос задан
  • 1571 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Напиши функцию вывода массива на печать, чтобы не дублировать код.
Добавь в нее параметр, (назовем его pos со значением по умолчанию -1) который будет обозначать начальную позицию элементов для выделения красным цветом;
Дальше в функции выводишь массив до этой позиции, выводишь свои a[pos] a[pos + 1] символы, потом оставшиеся.

Я бы все по-другому сделал, но
это твой код

void print(int* a, int size, int pos = -1)
{
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  int i = 0;

  SetConsoleTextAttribute(hConsole, (WORD)((0 << 8) | 15));

  for(; i < pos; ++i) cout << a[i] << " ";
  if(pos != -1)
  {
    SetConsoleTextAttribute(hConsole, (WORD)((0 << 4) | 4));
    cout << a[i] << " " << a[i + 1] << " ";
    SetConsoleTextAttribute(hConsole, (WORD)((0 << 8) | 15));
    i += 2;
  }
  for(; i < size; ++i) cout << a[i] << " ";

  cout << endl;
}

void massiv(int* x, int n)//функция заполнения и изменения 
{
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  for(int i = 0; i < n; i++)//заполнение массива
  {
    x[i] = rand() % 10;
  }

  print(x, n);

  int id = 0; // id - первый элемент пары, дающей максимальную разность

  for(int i = 0; i < n - 1; i++)
  {
    if(abs(x[i] - x[i + 1]) > abs(x[id] - x[id + 1]))
    {
      id = i;
    }
  }
    
  SetConsoleTextAttribute(hConsole, (WORD)((0 << 4) | 4));
  cout << abs(x[id + 1] - x[id]) << "\n";

  print(x, n, id);
}



И это
int* x = new int[n]; //динамическая переменная выделение памяти

delete[] x; забыл, тут это не страшно, но это не правильно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы