program prak3(input,output); {Inverse einer 3x3-Matrix von RenÉ Scholz }
{uses crt;}

var   ma,inv :array[1..3,1..3] of real;
      det    :real;


function  determinante:real;
var h:real;
begin
 h:= ma[1,1]*ma[2,2]*ma[3,3]    + ma[1,2]*ma[2,3]*ma[3,1] + ma[1,3]*ma[2,1]*ma[3,2];
 h:=h - ma[3,1]*ma[2,2]*ma[1,3] - ma[3,2]*ma[2,3]*ma[1,1] - ma[3,3]*ma[2,1]*ma[1,2];
 determinante:=h;
end;


procedure eingabe;
var z,s  :integer;
begin
 writeln;writeln;writeln;writeln;
 writeln('Geben Sie die 3x3-Matrix ein !');writeln;writeln;writeln;
 for z:=1 to 3 do
  begin
   writeln;writeln;
   writeln('              *** Zeile ',z:1,' eingeben ! *** ');
   writeln;
   for s:=1 to 3 do
    begin
     write('-> Element [Zeile',z:1,' , Spalte',s:1,']     ?        ');readln(ma[z,s]);
    end;
  end;
end;


procedure ma_anzeigen;
var z,s   :integer;
begin
 writeln;writeln;writeln;writeln;
 writeln('               *** Ausgangs-Matrix *** ');
 writeln;writeln;writeln;
 for z:=1 to 3 do
  begin
   for s:=1 to 3 do write(ma[z,s]:8:4 );
   writeln;
  end;
 writeln;writeln;
end;


procedure rechnung;
var det_adj             :real;
    z,s,z1,z2,s1,s2     :integer;
begin
 for z:=1 to 3 do
  for s:=1 to 3 do
   begin
    case z of
     1 : begin z1:=2; z2:=3; end;
     2 : begin z1:=1; z2:=3; end;
     3 : begin z1:=1; z2:=2; end;
    end;

    case s of
     1: begin s1:=2; s2:=3; end;
     2: begin s1:=1; s2:=3; end;
     3: begin s1:=1; s2:=2; end;
    end;

    det_adj :=ma[z1,s1]*ma[z2,s2] - ma[z1,s2]*ma[z2,s1];
    if odd(z+s) then det_adj := -det_adj ;
    inv[s,z]:=det_adj /det;
   end;
end;


procedure ausgabe_inv;
var z,s  :integer;
begin
 writeln;writeln;writeln;writeln;
 writeln('               *** Inverse Matrix *** ');
 writeln;writeln;writeln;
 for z:=1 to 3 do
  begin
   for s:=1 to 3 do  write(inv[z,s]:8:4 );
   writeln;
  end;
 writeln;writeln;
end;


begin                          { Main }
{ clrscr; }
 eingabe;
 det:=determinante;
 if (det<>0) then
  begin
   ma_anzeigen;
   rechnung;
   ausgabe_inv;
   writeln('Die Determinante der eingegebenen Matrix ist: ',det:8:4);
   writeln;writeln;writeln('By.');
  end

 else
  begin
   writeln;writeln;
   writeln('Determinante = 0   ---> Inverse existiert nicht !!! ');
  end;

end.