program detgpbte;

{

1: 260
2: 64
3:

}
uses
  typ,
  iom,
  det;

const
  pmin = -10;
  pmax = 100;
var
  l, i, ind, rw, n, k, term, p, vb, nvb: ArbInt;
  f: ArbFloat;
  a: array[pmin..pmax] of ArbFloat;
begin
  iom.npos := 1000;        {max. width of output to 1000, since this is piped}
  Assign(input, ParamStr(1));
  reset(input);
  Assign(output, ParamStr(2));
  rewrite(output);
  Write(' program results detgpbte');
  case sizeof(ArbFloat) of
    4: writeln('(single)');
    6: writeln('(real)');
    8: writeln('(double)');
    10: writeln('(extended)');
  end;
  Read(nvb);
  writeln;
  writeln(' number of examples:', nvb: 3);
  for vb := 1 to nvb do
  begin
    writeln;
    writeln('example', vb: 2);
    Read(p, n, l);
    ind := p;
    writeln;
    writeln('  n=', n: 1, '  l=', l: 1);
    for i := 1 to n do
    begin
      if i <= l then
        rw := i
      else
        rw := l + 1;
      iomrev(input, a[ind], rw);
      Inc(ind, rw);
    end;
    detgpb(n, l, a[p], f, k, term);
    ind := p;
    writeln;
    writeln(' A (left-under) =');
    for i := 1 to n do
    begin
      if i <= l then
        rw := i
      else
        rw := l + 1;
      if i > l + 1 then
        Write('': (i - l - 1) * (numdig + 2));
      iomwrv(output, a[ind], rw, numdig);
      Inc(ind, rw);
    end;
    writeln;
    writeln('term=', term: 2);
    writeln;
    if term = 3 then
      writeln(' wrong input')
    else
    if term = 2 then
      writeln(' matrix not pos-def.')
    else
    begin
      Write(' determinant of A =', f: numdig);
      {      if k <> 0 then } Write(' * 8**', k: 3);
      writeln;
    end; {term=1}
    writeln('---------------------------------------------');
  end; {vb}
  Close(input);
  Close(output);
end.
