Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на матрицу.
Форум «Всё о Паскале» > 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.


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