Извиняюсь что на Pascal, но задача была в свое время по нем:
Дана числовая матрица M*N. Сохранив без изменения элементы крайних строк и столбцов таблицы, замените каждый внутренний элемент средним арифметическим четырех соседних с ним элементов (сверху, снизу, слева, справа).(Без использования вспомогательного массива).
Решение через рекурсию (принцип работы такой как вам нужен. ...притом, что нужно сохранить текущее значение до изменения, чтобы можно было разницу в следующем шаге сделать и так до конца. ):
program Ex_18;
uses Crt;
const
Row = 5;
Col = 5;
var
Arr: array [1..Row,1..Col] of Real;
i,j: Integer;
procedure SimpleAverage(a, b: Integer);
var
Average: Real;
begin
if b = Col then
begin
a :=a+1;
b := 2;
end;
Average := (Arr[a-1,b]+Arr[a,b-1]+Arr[a+1,b]+Arr[a,b+1]) / 4;
if not ((b=2) and (a=5)) then
begin
SimpleAverage(a,b+1);
Arr[a,b] := Average;
end;
end;
procedure Print(a,b: Integer);
begin
if (a in [1,5]) or (b in [1,5]) then
TextAttr := 4
else
TextAttr := 2;
Write(' ',Arr[a,b]:3:2);
end;
begin
ClrScr;
randomize;
for i := 1 to Row do
begin
for j := 1 to Col do
begin
Arr[i,j] := random(10) + 10;
Print(i,j);
end;
WriteLn;
end;
WriteLn;
i := 2;
j := 2;
SimpleAverage(i,j);
for i := 1 to Row do
begin
for j := 1 to Col do
begin
Print(i,j);
end;
WriteLn;
end;
ReadKey;
end.