Var h,e,max:real; a:TextFile;
    N,i,j,k:integer;
    u,u0,mas:array [0..50,0..50] of real;
    x,y:array [0..50] of real;
    s:string;
    t:byte;
begin
e:=StrToFloat(Edit2.Text);
h:=1/150;
memo1.Lines.Clear;
///////////////сетка////////////////////
x[0]:=0; y[0]:=0;
for i:=0 to 49 do
  begin
    x[i+1]:=x[i]+i*h;
    y[i+1]:=y[i]+i*h;
  end;
///////////////////////////////////////
//////////граничные условия/////////////
  for i:=0 to 50 do begin u0[0,i]:=20*y[i]; mas[0,i]:=0; end;
  for i:=0 to 50 do begin u0[i,0]:=20*sqr(x[i]); mas[i,0]:=0; end;
  for i:=0 to 50 do begin u0[50,i]:=20*Cos(2*pi*y[i]); mas[50,i]:=0; end;
  for i:=0 to 50 do begin u0[i,50]:=20*Cos(2*pi*x[i]); mas[i,50]:=0; end;
///////////////////////////////////////
/////////////Начальные приближения//////////
for i:=1 to 49 do
  begin
    for j:=1 to 49 do u0[i,j]:=0;
  end;
////////////////////////////////////////////
////////////Итерации///////////////////////
 repeat
 //---------------------Одна итерация---------------//
    for i:=1 to 49 do
      begin
        for j:=1 to 49 do
          begin
            u[i,j]:=1/4*(u0[i+1,j]+u0[i-1,j]+u0[i,j+1]+u0[i,j-1]);
            mas[i,j]:=ABS(u[i,j]-u0[i,j]); //Массив из которого будем выбирать максимум разности u-u0
            u0[i,j]:=u[i,j];
          end;
      end;
  //-----------------------------------------------//
  //--------------Выбор максимального элемента----------//
 max:=mas[0,0];
  for i:=1 to 50 do
    begin
      for j:=1 to 50 do
        begin
          if  mas[i,j]>=max then max:=mas[i,j];
        end;
    end;
  /////////////////////////////////////////////////////
  until max<e;