С // отобразить сектора матрицы относительно горизонтальной оси
нужно отобразить симметрично относительно горизонтальной оси сектора матрицы, которые лежат выше и ниже главной и побочного диагоналей, но увы знаю как отображать относительно горизонтальной оси сектора которые лежат правее и левее главной и побочного диагоналей. может кто помочь?
for (i = 0; i < N; i++)
{
if (i < (N / 2))
j_end = i;
else
j_end = N - 1 - i;
for (j = 0; j <= j_end; j++)
{
tmp = arr[i][j];
arr[i][j] = arr[i][N - 1 - j];
arr[i][N - 1 - j] = tmp;
}
}
полный код
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 7
int main(void)
{
srand((unsigned)time(NULL));
int arr[N][N];
int MIN = 0, MAX = 100;
int i, j, j_end, tmp;
printf("Initial matrix;\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = rand() % (MAX - MIN + 1) + MIN;
printf("%d\t", arr[i][j]);
}
printf("\n");
}
for (i = 0; i < N; i++)
{
if (i < (N / 2))
j_end = i;
else
j_end = N - 1 - i;
for (j = 0; j <= j_end; j++)
{
tmp = arr[i][j];
arr[i][j] = arr[i][N - 1 - j];
arr[i][N - 1 - j] = tmp;
}
}
printf("\n\nModified matrix:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Отражение относительно горизонтальной оси подразумевает, что меняются местами строки i и N - 1 - i. Как для верхнего и нижнего, так и для правого и левого секторов. Если сами диагонали нужно оставить на месте - проверять только на i==j, i+j==N-1
В Вашем же коде меняются столбцы, а не строки (т.е. отражение относительно вертикальной оси).
Для верхнего и нижнего секторов:
for (i = 0; i < N/2; i++)
{
for (j = i; j <= N - 1 - i; j++) //здесь диагонали включены
{
tmp = arr[i][j];
arr[i][j] = arr[N - 1 - j][j];
arr[N - 1 - j][j] = tmp;
}
}