unit mnog; interface type Mnogochlen = array[0..500] of integer; procedure readMnog (var f:mnogochlen); procedure writeMnog (f:mnogochlen); procedure addMnog (f,g:mnogochlen; var r:mnogochlen); procedure remMnog (f,g:mnogochlen; var r:mnogochlen); procedure mulMnog (f,g:mnogochlen; var r:mnogochlen); procedure divMnog (f,g:mnogochlen; var r,ost:mnogochlen); procedure proizvMnog (f:mnogochlen; var r:mnogochlen); procedure NODMnog (f,g:mnogochlen; var r:mnogochlen); procedure powerMnog (var f:mnogochlen;n:integer); procedure clearMnog (var f:mnogochlen); function znachMnog (f:mnogochlen;x:integer):real; function checkMnog (f,g:mnogochlen):boolean; function power (x:real; n:integer):real; function moreMnog (f,g:mnogochlen):boolean; function mnogMoreThanZero(f:mnogochlen):boolean; function maxPower (f:mnogochlen):integer; implementation procedure clearMnog(var f:mnogochlen); var i:integer; begin for i:=0to 500 do f[i]:=0; end; procedure readMnog(var f:mnogochlen); var k,s,i,n:integer; begin writeln('vvedite kolichestvo elementov mnogochlena:');read(n); for i:=1 to n do begin s:=0;k:=0; writeln('Введите коэффицент элемента:');read(k); writeln('Введите степень элемента:');read(s); f[s]:=f[s]+k; end; end; procedure writeMnog(f:mnogochlen); var i:integer; begin if mnogMoreThanZero(f)=false then write('0'); if f[0]<>0 then write(f[0]); for i:= 1 to 500 do if f[i]<>0 then if f[i]<0 then write(f[i],'x^',i) else write('+',f[i],'x^',i); end; procedure addMnog(f,g:mnogochlen; var r:mnogochlen); var i:integer; begin clearMnog(r); for i:= 0 to 500 do r[i]:=r[i]+f[i]+g[i]; end; procedure remMnog(f,g:mnogochlen; var r:mnogochlen); var i:integer; begin clearMnog(r); for i:= 0 to 500 do r[i]:=r[i]+(f[i]-g[i]); end; procedure mulMnog(f,g:mnogochlen; var r:mnogochlen); var i,j:integer; begin clearMnog(r); for i:= 0 to 500 do for j:= 0 to 500 do r[i+j]:=r[i+j] + f[i]*g[j]; end; procedure divMnog(f,g:mnogochlen; var r,ost:mnogochlen); var i,m,n,mpf,mpg:integer; k,t:real; f1,mult:mnogochlen; begin clearMnog(r);clearMnog(ost); while (maxpower(f)>maxPower(g)) or ((f[maxpower(f)]>g[maxpower(f)]) and (maxpower(f)=maxPower(g))) do begin clearMnog(mult); {отчистка множителя} mpf:=maxPower(f);mpg:=maxPower(g); {нахождение макс. степеней} mult[mpf-mpg]:=(f[mpf] div g[mpg]); {вычисление коэфф. при множителе} addMnog(r,mult,r); {сложение результата и множителя} clearMnog(f1); {отчистка промежут. многочлена} mulMnog(g,mult,f1); {нахождение многочлена для вычитания из f} remMnog(f,f1,f); {вычитание промежут. многочлена f1 из f} end; ost:=f; end; function maxPower(f:mnogochlen):integer; var i,n:integer; begin for i:=0 to 500 do if f[i]<>0 then n:=i; maxPower:=n; end; procedure proizvMnog(f:mnogochlen; var r:mnogochlen); var i:integer; begin clearMnog(r); for i:= 1 to 500 do f[i]:=f[i]*i; for i:= 1 to 500 do r[i-1]:=f[i]; end; function power(x:real; n:integer):real; var y,p:real; m:word; begin if n=0 then begin power:=1; exit; end; m:=abs(n); p:=x; y:=1.0; begin if odd(m) then begin y:=p*y; dec(m); end else begin P:=sqr(p); m:=m shr 1; end; end; if n<0 then y := 1.0/y; power:=y; end; function znachMnog(f:mnogochlen;x:integer):real; var y:real; i:integer; begin y:=0; for i:=0 to 500 do y:=y+ (f[i] * power(x,i)); znachMnog:=y; end; function checkMnog(f,g:mnogochlen):boolean; var i,r:integer; begin for i:= 0 to 500 do if f[i]<>g[i] then inc(r); if r>0 then checkMnog:=false else checkMnog:=true; end; procedure powerMnog(var f:mnogochlen;n:integer); var i:integer; r:mnogochlen; begin if n=0 then begin for i:=1 to 500 do f[i]:=0; f[0]:=1; end; if n>1 then begin r:=f; for i:=n downto 2 do mulMnog(f,r,f); end; end; function moreMnog(f,g:mnogochlen):boolean; var fn,gn,i:integer; begin for i:= 0 to 500 do begin if f[i]>g[i] then fn:=fn+1; if f[i]gn then moreMnog:=true; if fn0 then begin mnogMoreThanZero:=true; exit; end; mnogMoreThanZero:= false; end; procedure NODMnog(f,g:mnogochlen; var r:mnogochlen); var a,b:mnogochlen; begin clearMnog(a);clearMnog(b);clearMnog(r); repeat divMnog(f,g,a,b); if mnogMoreThanZero(b)=false then r:=g else begin f:=g; g:=b; end; until mnogMoreThanZero(r)=true; end; end.