Program band_1; Const n=31*31; m=31+31+9; type mass_N = array[1..n] of real; mass_NM = array[1..n,1..m] of real; mass_NN = array[1..n,1..n] of real; var eps : real; signal : boolean; i,j,k : integer; c1 : mass_NM; v1 : mass_N; a :mass_NN; F :text; Procedure bandsolve(Var c: mass_NM; Var v:mass_N ; n,m : integer; eps : real; var signal: boolean); label sign; var t,ci,vi,vr : real; i,j,jm,lr,piv,r,n1,m1,n1r,r1 : integer; Begin signal:=true; lr:=(m+1) div 2; If m=lr+lr Then Begin // Write('m2'); signal:=false; Goto sign; End; n1:=n+1; m1:=m+1; For r:=1 To lr-1 Do Begin n1r:=n1-r; For i:=1 To lr-r Do begin for j:=2 to m do c[r,j-1]:=c[r,j]; c[n1r,m1-i]:=0; c[r,m]:=0; end; End; for i:=1 to n-1 do begin piv:=i; for r:=i+1 to lr do if abs(c[r,1])>abs(c[piv,1]) then piv:=r; if abs(c[piv,1])< eps then begin signal:=false; goto sign end; if piv <> i then begin t:=v[i]; v[i]:=v[piv]; v[piv]:=t; for j:=1 to m do begin t:=c[i,j]; c[i,j]:=c[piv,j]; c[piv,j]:=t; end;{j} end;{swi line} v[i]:=v[i]/c[i,1]; ci:=c[i,1]; for j:=2 to m do c[i,j]:=c[i,j]/ci; vi:=v[i]; for r:=i+1 to lr do begin t:=c[r,1]; v[r]:=v[r]-t*vi; for j:=2 to m do c[r,j-1]:=c[r,j]-t*c[i,j]; c[r,m]:=0; end; {r} if lr<>n then lr:=lr+1 end; {triangulation} v[n]:=v[n]/c[n,1]; jm:=2; for r:=n-1 downto 1 do begin r1:=r-1; for j:=2 to jm do v[r]:=v[r]-c[r,j]*v[r1+j]; if jm<> m then jm:=jm+1; end; sign: end;{BandSolve195} Begin eps:=1E-13; Assign(F,'Data\matr_d_u.txt'); reset(F); k:=1; For i:=1 to n*n Do Begin If i>k*n Then k:=k+1; Readln(F,a[k,i-(k-1)*n]); End; Close(F); For i:=1 to n Do For j:=1 to n Do Begin k:=j-i+((m+1) div 2); If ((k>=1) and (k<=m)) then c1[i,k]:=a[i,j]; End; Assign(F,'data\v_u_new.txt'); Reset(F); For i:=1 to n Do Begin Readln(F,v1[i]); End; // Close(F); BandSolve(c1,v1,n,m,eps,signal); Assign(F,'data\rez.txt'); Rewrite(F); For i:=1 to n Do Begin {if (i mod round(sqrt(n))) = 0 then Writeln(F,v1[i]) else} write(F,v1[i]); End; Close(F); end.