зеркально отразить заданную матрицу по вертикальной оси
int col = 0, row = 0,tmp = 0;
Random r = new Random();
while(row <= 0)
{
Console.Write("строк N = ");
row = Convert.ToInt32(Console.ReadLine());
}
while (col <= 0)
{
Console.Write("столбов M = ");
col = Convert.ToInt32(Console.ReadLine());
}
a = new int[row, col];
Console.WriteLine("Исходная матрица");
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
a[i, j] = r.Next(10);
Console.Write("{0} ",a[i,j]);
}
Console.WriteLine();
}```
Ответы (1 шт):
Нужно запустить два цикла по количеству столбцов и строк и если номер столбца больше половины количества столбцов, заменить данный элемент на соответствующий из этой же строки. Если а - это матрица:
for (int i = 0; i < n; i++) {
for (int j = 0; i < m; j++) {
if (j > m / 2) {
a[i][j] = a[i][n / 2 - (j - n / 2) - 1]
}
}
}
Условие внутри блока if означает что строка (i) в которой находится новый (копируемый) элемент, остается та же, а столбец меняется на зеркальный. Чтобы составить условие, полезно расписать несколько итераций цикла на листочке.
EDIT: Поняла, что нужно отразить по вертикали всю матрицу а не только вторую половину. В таком случае код циклов с использованием разменного стола table будет следующим:
for (int i = 0; i < n; i++) {
for (int j = 0; i < m / 2; j++) {
table = a[i][j];
a[i][j] = a[i][n / 2 - (j - n / 2) - 1];
a[i][n / 2 - (j - n / 2) - 1] = table;
}
}
Первый элемент сохраняется в переменную. Ему присваивается значение последнего в строке. Затем, последнему присваивается значение переменной table и тд. В данном случае, второй цикл идет только до половины матрицы по столбцам чтобы не допустить повторного переставления.