В многочлене произвольной степени с целыми коэффициентами от переменной x одночлены одной и той же степени могут повториться, причем они могут быть не упорядоченными по степеням х. Необходимо привести подобные члены в этом многочлене и вывести этот многочлен по уменьшению степени х — Pascal(Паскаль)

uses crt;
{пользовательский тип}
type
  isType=^isList;
  isList=record
    x,y:integer;
    z:isType;
    end;
{преременные основной программы}
var
  a:isType;
{вывод одного элемента}
procedure showOne(x,y:integer);
  begin
    write(x);{}
    if y<>0 then write('*X^',y);{}
  end;
{сортируем по убыванию степеней}
procedure sortPolinom(var c:isType);
  var
    d,e:isType;
  begin
    d:=c;
    while d^.z<>nil do
      begin
        while (d^.y>d^.z^.y)and(d^.z<>nil)do d:=d^.z;
        if d^.z<>nil then
          begin
            e:=d^.z;
            d^.z:=d^.z^.z;
            e^.z:=c;
            c:=e;
            d:=c;
          end;
      end;
  end;
{вводим полином}
procedure inputPolinom(var c:isType);
  var
    d:isType;
    e,f:integer;
  begin
    c:=nil;
    writeln('Вводите коэффициенты и степени, целые числа, окончание 2 ноля');
    repeat
      write('коэффициент:');{показатель и степень}
      readln(e);
      write('степень:');
      readln(f);
      if(e=0)and(f=0)then break;
      {ищем в списке введенную степень}
      d:=c;
      while (d^.y<>f)and(d<>nil) do d:=d^.z;
      if d=nil then
        begin{нет, содаем элемент и включаем его в список}
          new(d);
          d^.x:=e;
          d^.y:=f;
          d^.z:=c;
          c:=d;
        end else inc(d^.x,e);
    until false;
    sortPolinom(c);
  end;
{освобождаем занимаемую память}
procedure freePolinom(var c:isType);
  var
    d:isType;
  begin
    while c<>nil do
      begin
        d:=c;
        c:=c^.z;
        dispose(d);{освобождаем}
      end;
  end;
{выводим полином на экран}
procedure showPolinom(c:isType);
  begin
    clrscr;
    while c<>nil do{пока не выведем весь список}
      begin
        showOne(c^.x,c^.y);
        c:=c^.z;{следующий элемент}
        if c<>nil then write(' + ');{если не достигли предела выводим знак}
      end;
    writeln;
  end;
begin
  clrscr;
  {вводим полином}
  inputPolinom(a);
  {выводим полином}
  showPolinom(a);
  {освобождаем память}
  freePolinom(a);
  readln;
end.

Leave a Comment

85 − = 79