Страница 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.

===========
Смысл в том, что расстояние от центральной клетки до любой другой вычисляется как сумма абсолютных разностей их координат. Своего рода "теорема Пифагора" для дискретного прямоугольного пространства :D

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 из единиц. :lol:

Re: Заполнение матрицы

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

Угу, и центр такой матрицы = null :shock:

Так что для топик-стартера необходимо более точно определить условие задачи (с учетом ОДЗ :D )

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.

А так годится? :D

Re: Заполнение матрицы

СообщениеДобавлено: 27.03.2012 21:11:05
Leontev
Это идеально :D

Widowmaker писал(а):имхо, клетка 2х2 из единиц.


Ну да, так и есть. Как это реализовано в коде от Олега.