Создать квадратную матрицу размера 8 на 8. Матрица заполняется случайными целыми числами в диапазоне от 1 до 100. На матрицу накладывается разметка, соответствующая шахматной доске. Пользователь выбирает на мат- рице диагональ, задавая координаты двух клеток (ее начала и конца). Например, А5-Е1. Требуется упорядочить элементы матрицы, принадлежащие заданной диагонали, а остальные элементы обнулить. Результаты преобразований вывести на экран.
Написать в консольном приложении C++
Для начала, нам понадобится библиотека `
```cpp
#include
#include
```
Затем создадим функцию `printMatrix`, которая будет выводить матрицу на экран. Функция получает двумерный массив и размер матрицы в качестве аргументов. Вот его реализация:
```cpp
void printMatrix(int matrix[][8]) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
std::cout << matrix[i][j] << "\t";
}
std::cout << std::endl;
}
}
```
Далее создадим функцию `fillMatrix`, которая будет заполнять матрицу случайными целыми числами в заданном диапазоне. Функция получает двумерный массив и размер матрицы в качестве аргументов. Вот его реализация:
```cpp
void fillMatrix(int matrix[][8]) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
matrix[i][j] = rand() % 100 + 1; // генерируем случайное число от 1 до 100
}
}
}
```
Теперь создадим функцию `orderDiagonal`, которая будет упорядочивать элементы матрицы, принадлежащие заданной диагонали, и обнулять остальные элементы. Функция получает двумерный массив, размер матрицы и координаты начала и конца диагонали в качестве аргументов. Вот его реализация:
```cpp
void orderDiagonal(int matrix[][8], int startRow, int startCol, int endRow, int endCol) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if ((i - j >= startRow - startCol) && (i - j <= endRow - endCol)) { // проверяем, принадлежит ли элемент диагонали
// упорядочиваем элементы диагонали по возрастанию
for (int k = i + 1; k < 8; k++) {
for (int l = j + 1; l < 8; l++) {
if ((k - l >= startRow - startCol) && (k - l <= endRow - endCol)) { // проверяем, принадлежит ли элемент диагонали
if (matrix[i][j] > matrix[k][l]) {
// меняем элементы местами
int temp = matrix[i][j];
matrix[i][j] = matrix[k][l];
matrix[k][l] = temp;
}
}
}
}
} else {
matrix[i][j] = 0; // обнуляем остальные элементы
}
}
}
}
```
Теперь создадим функцию `main`, в которой мы будем вызывать описанные выше функции и выводить результат на экран. Вот его реализация:
```cpp
int main() {
int matrix[8][8]; // объявляем матрицу размером 8x8
fillMatrix(matrix); // заполняем матрицу случайными числами
std::cout << "Исходная матрица:" << std::endl;
printMatrix(matrix); // выводим исходную матрицу на экран
std::cout << std::endl << "Введите координаты начала диагонали (например, A5): ";
int startRow, startCol;
char colChar;
std::cin >> colChar >> startRow;
startCol = colChar - 'A'; // переводим букву столбца в число
std::cout << "Введите координаты конца диагонали (например, E1): ";
int endRow, endCol;
std::cin >> colChar >> endRow;
endCol = colChar - 'A'; // переводим букву столбца в число
orderDiagonal(matrix, startRow - 1, startCol, endRow - 1, endCol); // упорядочиваем элементы матрицы
std::cout << std::endl << "Результат:" << std::endl;
printMatrix(matrix); // выводим результат на экран
return 0;
}
```
Теперь, когда программу запустят, она предложит пользователю ввести координаты начала и конца диагонали. После этого программа упорядочит элементы матрицы, принадлежащие диагонали, и обнулит остальные элементы. В итоге будут выведены исходная матрица и результат преобразований.
Надеюсь, это решение понятно и поможет вам в выполнении задачи! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.