Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:c++ 2 курс / 685
.txt#include<iostream>
using namespace std;
int main()
{
int n = 0; // размерность матрицы
int maxElem = 0; // переменная для хранения значения максимального элемента
int middleElem = 0; // переменная для хранения значения элемента, на пересечении диагоналей
int colIndex = 0; // храним индексы максимального элемента по строке
int rowIndex = 0; // по столбцу
printf("Enter matrix dimension: ");
if (scanf("%d", &n)) { // ввод значений
int** matrix = new int*[n]; // проинициализировали динамический массив размера n
for (int i = 0; i < n; i++)
matrix[i] = new int[n];
for (int i = 0; i < n; i++) //заполнение матрицы случайными числами и вывод её на печать
{
for (int j = 0; j < n; j++)
{
matrix[i][j] = rand() % 10;
printf("%d ", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if ((i == j) || ((i + j) == (n - 1)) ) // учитываем только элемаенты на главной и побочной диагоналях
{
if (maxElem < matrix[i][j]) // находим максимальный элемент и запоминаем его индексы
{ // если максимальный элемент меньше текущего,
maxElem = matrix[i][j]; // то мы присваиваем ему значение элемента
colIndex = i; // и запоминаем его индексы
rowIndex = j;
}
}
}
}
printf("\nMax element is: %d with coordinates (%d, %d)\n", maxElem, colIndex, rowIndex);
if (n % 2 == 1) { // если кол-во элементов в строке и столбце - четное, то диагонали не пересекутся на определенном элементе
printf("Middle element is: %d, coordinates (%d, %d)\nPrinting new matrix...\n", matrix[n/2][n/2], n/2, n/2);
int buf = matrix[n/2][n/2]; //замена значений
matrix[n/2][n/2] = maxElem;
matrix[colIndex][rowIndex] = buf;
}
else {
printf("\nThere is no element on diagonals\n");
}
for (int i = 0; i < n; i++) // вывод на печать новой матрицы
{
for (int j = 0; j < n; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
else {
printf("\nError!");
}
system("pause");
return 0;
}