{ File: compldef.pas }

{ Numeri complessi: definizione della struttura dati e delle procedure e
                    funzioni disponibili

  La rappresentazione dei numeri e' data nella forma "a + i*b".
  Per le operazioni aritmetiche si usano le funzioni Re Im e AssegnaC. }


type
  complex = record
              parte_reale,
              parte_imm : real;
            end;


procedure ReadComplex (var c: Complex);
{ Legge un complesso da input. }
begin
  write('parte reale ? ');
  readln(c.parte_reale);
  write('parte immaginaria ? ');
  readln(c.parte_imm)
end; { ReadComplex }


procedure WriteComplex (c: complex);
{ Stampa un complesso in output. }
begin
  if c.parte_imm < 0 then
    writeln(c.parte_reale:4:2, ' - i*', abs(c.parte_imm):4:2)
  else
    writeln(c.parte_reale:4:2, ' + i*', c.parte_imm:4:2)
end; { WriteComplex }


procedure AssegnaC (x, y: real; var c: Complex);
{ c:= x + i*y }
begin
  c.parte_reale := x;
  c.parte_imm := y
end; { AssegnaC }


function Re (c: Complex): real;
{ Restituisce la parte reale di c. }
begin
  re := c.parte_reale
end; { Re }


function Im (c: complex): real;
{ Restituisce la parte immaginaria di c. }
begin
  Im := c.parte_imm
end; { Im }


procedure SommaC (c1, c2: Complex; var c3: Complex);
{ c3 := c1 + c2 }
begin
  AssegnaC(Re(c1) + Re(c2), Im(c1) + Im(c2), c3);
end; { SommaC }