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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Leontev
новенький
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение 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


Динамическую матрицу я сформировал, а вот с заполнением проблема. Как это сделать?
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Ну если примитивно:
Вложения
Krest.zip
(3.02 КБ) 530 скачиваний
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение 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
Leontev
новенький
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

Сообщение Leontev »

Спасибо большое! Но все равно есть одна проблема. Этот алгоритм не подходит, если n - четное число (
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

Leontev писал(а):Этот алгоритм не подходит, если n - четное число (

А какой ЦЕНТР в матрице четное х четное ???
Аватара пользователя
Widowmaker
новенький
Сообщения: 37
Зарегистрирован: 27.04.2011 18:32:04

Сообщение Widowmaker »

<< А какой ЦЕНТР в матрице четное х четное ??? >>
имхо, клетка 2х2 из единиц. :lol:
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

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

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

Так что для топик-стартера необходимо более точно определить условие задачи (с учетом ОДЗ :D )
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение 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
Leontev
новенький
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

Сообщение Leontev »

Это идеально :D

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


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