Страница 1 из 1
Заполнение матрицы
Добавлено: 24.03.2012 10:40:41
Leontev
Задача такая. Нужно сформировать динамическую матрицу, размером NxN и заполнить её по следующему принципу. В центре элемент (элементы) со значением 1. Вокруг - элементы со значением 2, далее три и т.п. Например, при n=5 матрица должна быть такой
Код: Выделить всё
5 4 3 4 5
4 3 2 3 4
3 2 1 2 3
4 3 2 3 4
5 4 3 4 5
Динамическую матрицу я сформировал, а вот с заполнением проблема. Как это сделать?
Re: Заполнение матрицы
Добавлено: 24.03.2012 12:40:05
Maxizar
Ну если примитивно:
Re: Заполнение матрицы
Добавлено: 24.03.2012 13:34:47
Oleg_D
Код: Выделить всё
var N, M : integer;
i, j : integer;
begin
Write('N= '); Readln(N);
Write('M= '); Readln(M);
for i:=1 to N do begin
for j:=1 to M do
Write(1+abs(i-1-N div 2)+abs(j-1-M div 2) : 4);
Writeln;
end;
Readln;
end.
===========
Смысл в том, что расстояние от центральной клетки до любой другой вычисляется как сумма абсолютных разностей их координат. Своего рода "теорема Пифагора" для дискретного прямоугольного пространства

Re: Заполнение матрицы
Добавлено: 27.03.2012 13:04:14
Leontev
Спасибо большое! Но все равно есть одна проблема. Этот алгоритм не подходит, если n - четное число (
Re: Заполнение матрицы
Добавлено: 27.03.2012 13:55:17
Little_Roo
Leontev писал(а):Этот алгоритм не подходит, если n - четное число (
А какой ЦЕНТР в матрице
четное х четное ???
Re: Заполнение матрицы
Добавлено: 27.03.2012 14:46:32
Widowmaker
<< А какой ЦЕНТР в матрице четное х четное ??? >>
имхо, клетка 2х2 из единиц.

Re: Заполнение матрицы
Добавлено: 27.03.2012 15:00:53
Little_Roo
Widowmaker писал(а):<< А какой ЦЕНТР в матрице четное х четное ??? >>
имхо, клетка 2х2 из единиц.

Угу, и центр такой матрицы = null
Так что для топик-стартера необходимо более точно определить условие задачи (с учетом ОДЗ

)
Re: Заполнение матрицы
Добавлено: 27.03.2012 17:25:45
Oleg_D
Код: Выделить всё
var N, M : integer;
i, j : integer;
begin
Write('N= '); Readln(N);
Write('M= '); Readln(M);
for i:=1 to N do begin
for j:=1 to M do
Write(1+abs(2*i-1-N) div 2 + abs(2*j-1-M) div 2 : 4);
Writeln;
end;
Readln;
end.
А так годится?

Re: Заполнение матрицы
Добавлено: 27.03.2012 21:11:05
Leontev
Это идеально
Widowmaker писал(а):имхо, клетка 2х2 из единиц.
Ну да, так и есть. Как это реализовано в коде от Олега.