fpc/packages/numlib/tests/detgpbte.pas
2016-03-05 19:16:54 +00:00

89 lines
1.7 KiB
ObjectPascal

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.