program kramer7;
(* soluzione sistema a tre equazioni con kramer *)
(* calcolo determinanti secondo Laplace *)

uses crt;
var n:array[1..3,1..4] of real;
    d:array[1..16] of real;
    s:string;
    scelta,T,a,b:integer;
    x,y,z:real;

procedure calcola;
begin
clrscr;
s:='      ';
writeln('scrivi i coefficienti e termini noti del sistema');
writeln('se valori con decimali usa punto decimale  5.3  ');
writeln('dopo ogni valore premere enter ');
writeln('------------------');
writeln('a1  b1  c1 n1');
writeln('a2  b2  c2 n1');
writeln('a3  b3  c3 n1');
writeln;
for a:=1 to 3 do
 begin
 writeln('------------------------');
 for b:=1 to 4 do
  begin
  write('equazione: ',a,' termine n.',b,' = ');readln(n[a,b]);
  end;
  end;
  writeln;
  (* calcolo determinante del sistema *)
  d[2]:=n[2,2]*n[3,3]-n[3,2]*n[2,3];
  d[3]:=-(n[2,1]*n[3,3]-n[3,1]*n[2,3]);
  d[4]:=n[2,1]*n[3,2]-n[3,1]*n[2,2];
  d[1]:=n[1,1]*d[2]+n[1,2]*d[3]+n[1,3]*d[4];

  (* calcolo determinante della incognita x  *)
  d[5]:=n[2,2]*n[3,3]-n[3,2]*n[2,3];
  d[6]:=-(n[2,4]*n[3,3]-n[3,4]*n[2,3]);
  d[7]:=n[2,4]*n[3,2]-n[3,4]*n[2,2];
  d[8]:=n[1,4]*d[5]+n[1,2]*d[6]+n[1,3]*d[7];

  (* calcolo determinante della incognita y  *)
  d[9]:=n[2,4]*n[3,3]-n[3,4]*n[2,3];
  d[10]:=-(n[2,1]*n[3,3]-n[3,1]*n[2,3]);
  d[11]:=n[2,1]*n[3,4]-n[3,1]*n[2,4];
  d[12]:=n[1,1]*d[9]+n[1,4]*d[10]+n[1,3]*d[11];

  (* calcolo determinante della incognita z *)
  d[13]:=n[2,2]*n[3,4]-n[3,2]*n[2,4];
  d[14]:=-(n[2,1]*n[3,4]-n[3,1]*n[2,4]);
  d[15]:=(n[2,1]*n[3,2]-n[3,1]*n[2,2]);
  d[16]:=n[1,1]*d[13]+n[1,2]*d[14]+n[1,4]*d[15];

  (* stampo risultato calcolo determinanti *)
  writeln('determinante sistema ',d[1]:4:3);
  writeln('determinante x       ',d[8]:4:3);
  writeln('determinante y       ',d[12]:4:3);
  writeln('determinante z       ',d[16]:4:3);

  (* discussione sistema *)
  if d[1]<>0 then
  begin
  writeln('sistema determinato con soluzioni:');
  x:=d[8]/d[1];
  y:=d[12]/d[1];
  z:=d[16]/d[1];
  writeln('X=',x:4:3);
  writeln('Y=',y:4:3);
  writeln('Z=',z:4:3);
  end
  else writeln('sistema indeterminato o impossibile');

writeln('-----------------------------------');
writeln('premi 1 per altro calcolo');
writeln('premi 2 per finire');
write('scelta 1 o 2 ? ');readln(scelta);
case scelta of
1:calcola;
2:exit;
end;
end;

begin
clrscr;
calcola;
end.

scrivi i coefficienti e termini noti del sistema
se valori con decimali usa punto decimale  5.3
dopo ogni valore premere enter
------------------
a1  b1  c1 n1
a2  b2  c2 n1
a3  b3  c3 n1

------------------------
equazione: 1 termine n.1 = 1
equazione: 1 termine n.2 = 2
equazione: 1 termine n.3 = 3
equazione: 1 termine n.4 = 4
------------------------
equazione: 2 termine n.1 = 2
equazione: 2 termine n.2 = 3
equazione: 2 termine n.3 = 3
equazione: 2 termine n.4 = 4
------------------------
equazione: 3 termine n.1 =

------------------------
equazione: 3 termine n.1 = 3
equazione: 3 termine n.2 = 4
equazione: 3 termine n.3 = 4
equazione: 3 termine n.4 = 5

determinante sistema -1.000
determinante x       1.000
determinante y       -1.000
determinante z       -1.000
sistema determinato con soluzioni:
X=-1.000
Y=1.000
Z=1.000
-----------------------------------
premi 1 per altro calcolo
premi 2 per finire

inizio