Skip to content

Instantly share code, notes, and snippets.

@hellyet
Created December 10, 2020 03:54
Show Gist options
  • Select an option

  • Save hellyet/5ee0a2ae4596d0472dc2f4332676b986 to your computer and use it in GitHub Desktop.

Select an option

Save hellyet/5ee0a2ae4596d0472dc2f4332676b986 to your computer and use it in GitHub Desktop.
ПР5, Задание 6
#define arraySize 16 // размер массива
#define newARM false // пересчитывать ср. арифм. каждый раз после изменения массива
#define MAX_newARM 20 // максимальное кол-во итераций пересчёта
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
void log(bool rs){
if (rs) {
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "[ ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN);
cout << "OK";
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << " ] ";
}
else {
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "[ ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED );
cout << "!!";
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << " ] ";
}
}
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
int arr[arraySize], num = 1;
long int arm = 0;
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << "Исходный массив" << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
// Заполнение массива и его вывод
for (int i = 0; i < size(arr); i++) {
arr[i] = rand() % 100;
cout << '\t' << i << ": " << arr[i] << endl;
arm += arr[i];
} cout << endl;
arm = arm / size(arr);
// Вывод информации
log(true); cout << "Размер массива: ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << arraySize << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
log(true); cout << "Среднее арифмитическое ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << arm << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
log(true); cout << "Пересчет среднего арифмитического ";
if(newARM) SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
else SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
cout << boolalpha << newARM << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
log(true); cout << "Максимальное кол-во итераций пересчёта ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << MAX_newARM << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
// Создание и заполнение массива измененных символов отрицательными числами
int changed[arraySize];
for (int i = 0; i < size(changed); i++) changed[i] = -1;
cout << endl;
start:
// Вычисления
int d = 0;
for (int i = 0; i < size(arr); i++) {
if (arr[i] > arm) {
arr[i] = arr[i] * arm;
changed[d] = i;
d++;
}
if (newARM) {
for (int j : arr) {
arm += j;
} arm = arm / size(arr);
log(true); cout << "Среднее арифмитическое пересчитано: ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << arm << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
num++;
if (num > MAX_newARM) {
log(false); cout << "Превышено максимальное кол-во пересчёта ср. арифметического!" << endl;;
break;
}
goto start;
}
}
// Вывод массива
if (d == 0) { log(false); cout << "Ячейки не были изменены: "; }
else {
log(true); cout << "Изменены ячейки: ";
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
for (int j = 0; j < d; j++) cout << changed[j] << ' '; cout << endl << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout << endl << "Изменённый массив массив #" << num << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for (int i = 0; i < size(arr); i++) {
bool nw = true; // костыль чтобы выделяемые ячейки не выводились по 2 раза
for (int j : changed) {
if (i == j) {
SetConsoleTextAttribute(hStdOut, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY);
cout << '\t' << i << ": " << arr[i] << endl;
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
nw = false;
}
}
if(nw) cout << '\t' << i << ": " << arr[i] << endl;
}
cout << endl;
log(false); system("pause");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment