Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на матрицу.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AnTiDoD
Дана матрица n*m. С клавиатуры вводятся определенные координаты i-строки и j-столбца. В матрице этому элементы присваивается значение 0, остальные же элементы должны окружать его по возрастанию, например:

2 2 2 2 3
1 1 1 2 3
1 0 1 2 3
1 1 1 2 3.

Т.е. элементы окружают 0 как бы "кольцом", а остальные "кольца" возрастают на 1.
volvo
Про рекурсию слышал? wink.gif Вот здесь ее и можно использовать - устанавливаешь для начала все элементы матрицы в -1, а потом заданный элемент - нулевым, а соседи - на 1 больше (если старое значение все еще = -1)...
AnTiDoD
Так-с про рекурсию только слышал - это по-моему когда функция вызывает саму себя?
Но на практике я никогда рекурсию не использовал, потому что не знаю когда ее использовать.

Вот сделал без рекурсии, но хотелось бы узнать пример с рекурсией, чтоб понятней было:

uses crt;
var
  a:array[1..10,1..10] of integer;
  i,j,n,x,y,m : integer;
begin
  write('n=');
  readln(n);
  write('m=');
  readln(m);
  for i:=1 to n do
    for j:=1 to m do
      a[i,j]:=0;
  for i:=1 to n do
    begin
      for j:=1 to m do
        write(a[i,j],' ');
      writeln;
    end;
  write('i=');
  readln(x);
  write('j=');
  readln(y);
  a[x,y]:=0;
  for i:=1 to n do
    for j:=1 to m do
      begin
        if (i<>x)and(j=y) then
          a[i,j]:=abs(i-x);
        if (i=x)and(j<>y) then
          a[i,j]:=abs(j-y);
        if (i<>x) and (j<>y) then
          if abs(x-i)>abs(y-j) then
            a[i,j]:=abs(x-i)
          else a[i,j]:=abs(y-j);

      end;

  for i:=1 to n do
    begin
      for j:=1 to m do
        write(a[i,j],' ');
      writeln;
    end;
  readkey;
end.


Этот вариант работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.