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

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

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

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

Сообщение Leontev » 24.03.2012 10:40:41

Задача такая. Нужно сформировать динамическую матрицу, размером 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


Динамическую матрицу я сформировал, а вот с заполнением проблема. Как это сделать?
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Maxizar » 24.03.2012 12:40:05

Ну если примитивно:
Вложения
Krest.zip
(3.02 КБ) Скачиваний: 430
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение Oleg_D » 24.03.2012 13:34:47

Код: Выделить всё
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
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Leontev » 27.03.2012 13:04:14

Спасибо большое! Но все равно есть одна проблема. Этот алгоритм не подходит, если n - четное число (
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Little_Roo » 27.03.2012 13:55:17

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

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

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

Сообщение Widowmaker » 27.03.2012 14:46:32

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

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

Сообщение Little_Roo » 27.03.2012 15:00:53

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

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

Так что для топик-стартера необходимо более точно определить условие задачи (с учетом ОДЗ :D )
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение Oleg_D » 27.03.2012 17:25:45

Код: Выделить всё
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
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Leontev » 27.03.2012 21:11:05

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

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


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


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 13

Рейтинг@Mail.ru