Создать квадратную матрицу размера 8 на 8. Матрица заполняется случайными целыми числами в диапазоне от 1 до 100. На матрицу накладывается разметка, соответствующая шахматной доске. Пользователь выбирает на мат- рице диагональ, задавая координаты двух клеток (ее начала и конца). Например, А5-Е1. Требуется упорядочить элементы матрицы, принадлежащие заданной диагонали, а остальные элементы обнулить. Результаты преобразований вывести на экран.

Написать в консольном приложении C++

Ева2208 Ева2208    2   08.12.2021 21:57    20

Ответы
IraIvan IraIvan  23.12.2023 01:11
Хорошо, вот подробное решение задачи:

Для начала, нам понадобится библиотека ``, чтобы работать с вводом и выводом данных, и ``, чтобы генерировать случайные числа. Добавьте следующие строки кода в начало программы:

```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;
}
```

Теперь, когда программу запустят, она предложит пользователю ввести координаты начала и конца диагонали. После этого программа упорядочит элементы матрицы, принадлежащие диагонали, и обнулит остальные элементы. В итоге будут выведены исходная матрица и результат преобразований.

Надеюсь, это решение понятно и поможет вам в выполнении задачи! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика