begin
i:=n;
while ((i>=1) and (poper(a, i)>-1)) do
begin
if (a[i]<>0) then begin
if (i>1) then
write (a[i]:5:2,'x^', i:2)
else write (a[i]:5:2,'x');
if (a [poper(a, i)]>0) then write ('+');
end;
i:=i‑1;
end;
if (i>1) then write (a[i]:5:2,'x^', i:2)
else
if (i=1) then write (a[i]:5:2,'x')
else
write (a[i]:5:2);
end
else
write('0');
end;
function maxi (n, m:integer):integer;
begin
if (n>=m) then maxi:=n else maxi:=m;
end;
function mini (n, m:integer):integer;
begin
if (n<=m) then mini:=n else mini:=m;
end;
procedure suma (a, b:poli; var c:poli);
{сума 2 многочленiв}
var i, na, nb, nab, nba:integer;
begin
na:=stepin(a);
nb:=stepin(b);
nab:=maxi (na, nb);
riv (zero, c);
for i:=nab downto 0 do c[i]:=a[i]+b[i];
end;
procedure nsuma (a:maspoli; n:integer; var c:poli);
{сума n многочленiв}
var i:integer;
begin
riv (zero, c);
for i:=1 to n do
suma (c, a[i], c);
end;
procedure dobchy (a:poli; r:real; var c:poli);
{добуток скаляра на многочлен}
var i:integer;
begin
riv (zero, c);
for i:=0 to stepin(a) do
c[i]:=r*a[i];
end;
procedure pidvst (a:poli; n:integer; var c:poli);
(домноження многочлена на x^n)}
var i:integer;
begin
for i:=stepin(a)+n downto n do
c[i]:=a [i-n];
for i:=stepin(a)+n+1 to 100 do c[i]:=0;
for i:=0 to n‑1 do c[i]:=0;
end;
procedure dobutok (a, b:poli; var c:poli);
{добуток 2 многочленiв}
var i:integer;
t, t1, t2:poli;
begin
riv (zero, t);
for i:=0 to stepin(b) do
begin
riv (zero, t1);
riv (zero, t2);
dobchy (a, b[i], t1);
pidvst (t1, i, t2);
suma (t, t2, t);
end;
riv (t, c);
end;
procedure ndobutok (a:maspoli; n:integer; var c:poli);
{добуток n многочленiв}
var i:integer;
begin
riv (od, c);
for i:=1 to n do
dobutok (c, a[i], c);
end;
procedure mpoli (a:poli; m:integer; var c:poli);
{пiднесення многочлена до степеня}
var i:integer;
begin
riv (od, c);
for i:=1 to m do
dobutok (c, a, c);
end;
procedure polipoli (a, b:poli; var c:poli);
{многочлен вiд многочлена}
var i:integer;
t1, t2:poli;
begin
riv (zero, c);
for i:=0 to stepin(b) do
begin
riv (zero, t2);
riv (zero, t1);
mpoli (a, i, t1);
dobchy (t1, b[i], t2);
suma (c, t2, c);
end;
end;
procedure dilen (a, b:poli; var c, c1:poli);
var n, m, i:integer;
t1, t2, t3, t4, t5:poli;
{дiлення многочленiв з остачею}
begin
riv (a, t4);
n:=stepin(a);
m:=stepin(b);
riv (zero, t3);
while n>=m do
begin
riv (zero, t5);
riv (zero, t1);
riv (zero, t2);
t5 [n-m]:=a[n]/b[m];
suma (c, t5, c);
dobutok (t5, b, t1);
dobchy (t1, – 1, t2);
suma (a, t2, a);
n:=stepin(a);
end;
dobutok (c, b, t3);
dobchy (t3, – 1, t3);
suma (t4, t3, c1);
end;
procedure dyfer (a:poli; var b:poli);
{знаходження похiдноi}
var n, i:integer;
begin
n:=stepin(a);
riv (zero, b);
for i:=n downto 1 do
b [i‑1]:=i*a[i];
end;
procedure integ (a:poli; var b:poli);
{знаходження невизначеного iнтеграла}
var n, i:integer;
begin
n:=stepin(a);
riv (zero, b);
for i:=n downto 0 do
b [i+1]:=a[i]/(i+1);
end;
end.