program solvgj2; { -> 111 } { pascal program to perform simultaneous solution by Gauss-Jordan elimination} { there may be more equations than unknowns } const maxr = 8; maxc = 8; type ary = array[1..maxr] of real; arys = array[1..maxc] of real; ary2s = array[1..maxr,1..maxc] of real; ary2 = ary2s; { for square } var y : ary; coef,yy : arys; a,b : ary2s; n,m,i,j : integer; first, error : boolean; external procedure cls; procedure get_data(var a: ary2s; var y: ary; var n,m: integer); { get the values for n and arrays a,y } var i,j : integer; begin writeln; repeat write('How many unknowns? '); readln(m); if first then first:=false else cls; until m1 then begin repeat write('How many equations? '); readln(n) until n>=m; for i:=1 to n do begin writeln('Equation',i:3); for j:=1 to m do begin write(j:3,':'); read(a[i,j]) end; write(',C:'); readln(y[i]) { clear line } end; { i-loop } writeln; for i:=1 to n do begin for j:=1 to m do write(a[i,j]:7:4,' '); writeln(':',y[i]:7:4) end; writeln end { if n>1 } end; { procedure get_data } procedure write_data; { print out the answers } var i : integer; begin for i:=1 to m do write(coef[i]:9:5); writeln end; { write_data } {external procedure square ( y : ary; var a : ary2s; var g : arys; nrow,ncol : integer);} {$I C:SQUARE.LIB} {external procedure gaussj (var b : ary2s; y : arys; var coef : arys; ncol : integer; var error : boolean);} {$I C:GAUSSJ.LIB} begin { MAIN program } first:=true; cls; writeln; writeln('Best fit to simultaneous equations'); writeln('By Gauss-Jordan'); repeat get_data(a,y,n,m); if m>1 then begin square(a,y,b,yy,n,m); gaussj(b,yy,coef,m,error); if not error then write_data end until m<2 end.