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.