Отразить элементы NxN массива относительно центрального элемента - C (СИ)
Формулировка задачи:
Добрый день. Задача заключается в том, что бы отразить элементы квадратной матрицы относительно центрального элемента.
Ввод и вывод данных в порядке. Я использовал константу равную пяти и заполнение массива случайными элементами.
Проблема в теле программы. (Так же ниже будет приведён код рабочей программы, но написанной на Паскале, надеюсь это поможет). Заранее благодарю людей готовых помочь.
Рабочая программа на паскале:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int n=5;
void main(void)
{
int i,j,mas[n][n], temp, m_min, m_max, x;
printf("\nEnter input data:");
printf("\n Minimal element is ");
scanf("%d", &m_min);
printf("\n Maximal element is ");
scanf("%d", &m_max);
srand(time(NULL));
printf("Initial massive:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
mas[i][j]=m_min-1 + rand() % m_max+1 ;
printf("%5d",mas[i][j]);
}
printf("\n");
}
for (i=0; i<n/2; i++)
for (j=0; j<n; j++)
{
x=mas[i][j];
mas[i][j]=mas[n-i+1][n-j+1];
mas[n-i+1][n-j+1]=x;
}
for (i=0; i<n/2; i++)
{
x=mas[n/2+1][i];
mas[n/2+1][i]=mas[n/2+1][n-i+1];
mas[n/2+1][n-i+1]=x;
}
printf("Resulting massive:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%5d",mas[i][j]);
printf("\n");
}
return;
}var a:array[1..20,1..20] of integer;
n,i,j,x:integer;
begin
repeat
write('3<=n<=15 n=');
readln(n);
until n in [3..15];
writeln('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=(i-1)*n+j;
write(a[i,j]:4);
end;
writeln;
end;
for i:=1 to n div 2 do
for j:=1 to n do
begin
x:=a[i,j];
a[i,j]:=a[n-i+1,n-j+1];
a[n-i+1,n-j+1]:=x;
end;
//переставим элементы средней строки
for i:=1 to n div 2 do
begin
x:=a[n div 2+1,i];
a[n div 2+1,i]:=a[n div 2+1,n-i+1];
a[n div 2+1,n-i+1]:=x;
end;
writeln('Зеркальное отражение относительно центра:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end.Решение задачи: «Отразить элементы NxN массива относительно центрального элемента»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int n=5;
void main(void)
{
int i,j,mas[n][n], temp, m_min, m_max, x;
printf("\nEnter input data:");
printf("\n Minimal element is ");
scanf("%d", &m_min);
printf("\n Maximal element is ");
scanf("%d", &m_max);
srand(time(NULL));
printf("Initial massive:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
mas[i][j]=m_min-1 + rand() % m_max+1 ;
printf("%5d",mas[i][j]);
}
printf("\n");
}
for (i=0; i<n/2; i++)
for (j=0; j<n; j++)
{
x=mas[i][j];
mas[i][j]=mas[n-i-1][n-j-1];
mas[n-i-1][n-j-1]=x;
}
for (i=0; i<n/2; i++)
{
x=mas[n/2][i];
mas[n/2][i]=mas[n/2][n-i-1];
mas[n/2][n-i-1]=x;
}
printf("Resulting massive:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%5d",mas[i][j]);
printf("\n");
}
return;
}
Объяснение кода листинга программы
Код выполняет следующие действия:
- Задаёт размерность массива NxN и выводит приглашение для ввода данных.
- Запрашивает у пользователя минимальный и максимальный элементы массива.
- Инициализирует массив случайными числами, удовлетворяющими условиям.
- Выводит начальный массив.
- Делит массив пополам на две равные части относительно центрального элемента.
- Меняет местами элементы правой и левой половин массива.
- Выводит полученный массив.