Смекни!
smekni.com

Виконання символьних операцій з многочленами (стр. 3 из 3)

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.