Program queue; uses crt; Type point=^element; element=record a,n:longint; next:point;end; Var p1,p2,res,y:point; a,n:longint; {1.Ввод многочлена} Procedure enter(name:string;var p:point); Var q,r:point; i,nmax,k:longint; begin Write('макс. степень многочлена ',name,': '); read(nmax); k:=nmax; Write('коэфициент члена x^',k,': '); read(a); New(p); p^.a:=a; p^.n:=nmax; p^.next:=nil; r:=p; for i:=(nmax-1) downto 0 do begin k:=k-1; Write('коэфициент члена x^',k,': ');read(a); New(q); q^.a:=a; q^.n:=k; q^.next:=r^.next; r^.next:=q; r:=q; end; end;{enter} {2.Печать многочлена} Procedure print(name:string;q:point); begin Write('многочлен ',name,': '); write(q^.a,'∙x^',q^.n); while (q^.next<>nil) do begin q:=q^.next; if (q^.n<>0) then begin if (q^.a<0) then write(' ',q^.a,'∙x^',q^.n) else write(' + ',q^.a,'∙x^',q^.n);end; end; writeln; end;{print} {3.Умножение многочленов} Procedure multi(p1,p2:point;Var y:point); Var s1,s2,q,t,x,r,z,temp,w:point; i,max,n:integer; begin {3.1.умножение} s1:=p1; s2:=p2; New(r); r^.a:=1; r^.n:=1; r^.next:=nil; q:=r; while (s1<>nil) do begin while (s2<>nil) do begin New(t); t^.a:=s1^.a*s2^.a; t^.n:=s1^.n+s2^.n; t^.next:=q^.next; q^.next:=t; q:=t; s2:=s2^.next; end{while s1}; if(s2=nil) then s2:=p2;s1:=s1^.next; end{while s2}; r:=r^.next; {3.2.Сортировка} z:=r; max:=z^.n; temp:=z; new(y); y^.a:=temp^.a; y^.n:=temp^.n; y^.next:=nil; x:=y; for n:=(max-1) downto 0 do begin a:=0; while (temp<>nil) do begin temp:=temp^.next; if (temp^.n=n) then a:=a+temp^.a; end{while};temp:=z; new(w); w^.a:=a; w^.n:=n; w^.next:=x^.next; x^.next:=w; x:=w; end;{for} end;{multi} BEGIN clrscr; enter('A(x)',p1); enter('B(x)',p2); multi(p1,p2,res);clrscr; print('A(x)',p1); print('B(x)',p2); print('C(x)',res); END.