program SIMPLEXE;

CONST
	ligne =4;
	colo =6;
type

	TABL = ARRAY [1..LIGNE,1..COLO] OF REAL;


const 
	source : TABL = 

	((2.0,1.0,1.0,0.0,0.0,200.0),
	 (1.0,4.5,0.0,1.0,0.0,540.0),
	 (4.0,3.0,0.0,0.0,1.0,480.0),
	 (50.0,30.0,0.0,0.0,0.0,0.0));


var
	i,p 		: integer;
	dest 		: tabl;
	fini 		: boolean;
	cpivot,lpivot 	: short;
	min,calcul	: real;
procedure MAX;
var
	neg : integer; 
begin
	neg:=0;cpivot:=1;min:=9999.9;lpivot:=0;
	for i := 1 to colo do
		begin
		if source [4,i] <= real(0) then inc(neg)
		else
		if source [4,i] > source[4,cpivot] then cpivot := i;
		end;
	if neg = 6 then fini := true;

	if not(fini) then
		begin
		for i := 1 to ligne-1 do
		begin
		if source [i,cpivot] > real(0) then
			begin
			calcul :=source[i,colo]/source [i,cpivot];
			if calcul < min then
				begin
				lpivot := i;
				min := calcul;
				end;
			end;
		end;
		end; 

end;
procedure newdest;
	begin
	for i := 1 to ligne do dest [i,cpivot]:=real(0);
	for i := 1 to colo do 
		dest[lpivot,i]:= source[lpivot,i] / source [lpivot,cpivot];

	for i := 1 to ligne do
	if i <> lpivot then
		for p := 1 to colo do
		if p <> cpivot then
	dest[i,p] := source [i,p] - 
	((source[i,cpivot]*source[lpivot,p])/source[lpivot,cpivot]);
	end;

procedure COPYDEST;
	begin
	for i :=1 to ligne do
		for p := 1 to colo do
			source[i,p]:=dest[i,p];
	end;
procedure AFFICHE;
BEGIN
	WRITELN('----------------------------------------------------------');
	for i := 1 to ligne do
	begin
	for p := 1 to colo do write(source[i,p]:7);
		writeln;
	end;
	writeln ('ligne du pivot :',lpivot,'\tcolonne du pivot :',cpivot);
end;
begin
	fini := false;
	max;
while not(fini) do
	begin;
	AFFICHE;
	NEWDEST;
	COPYDEST;
	MAX;
	end;
	AFFICHE;	

end.
