Guest User

Untitled

a guest
Aug 9th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.64 KB | None | 0 0
  1. program prak2( input, output );
  2.  
  3. type
  4. list = ^zveno;
  5.  
  6. zveno = record
  7.         an: record
  8.         a, n: integer;
  9.         end;
  10.         sl: list;
  11. end;
  12. var
  13.     c: char;
  14.     a, n: integer;
  15.     h, p :list;
  16.     fl1, fk, f, first, gotnull: boolean;
  17.  
  18. procedure vvod ( var a, n: integer; var c: char; var fl1, f: boolean );
  19. begin
  20.     a := 0;
  21.     n := 0;
  22.     if c = 'x' then
  23.     begin
  24.         a := 1
  25.     end
  26.     else
  27.     begin
  28.         f := ( c >= '1' ) and ( c <= '9' );
  29.         while ( c <> 'x' ) and ( c <> '+' ) and ( c <> ' ' ) and ( c <> '-' ) and f do
  30.         begin
  31.             a := a * 10 + ord( c ) - ord( '0' );
  32.             read( c );
  33.             f := (( c >= '0' ) and ( c <= '9' )) or (( c in ['+', '-', ' ', 'x'] ))
  34.         end;
  35.         f := f and (not((a=1) and (c='x')))
  36.     end;
  37.  
  38.     if f then
  39.     begin
  40.         if fl1 then
  41.         begin
  42.             a := -a
  43.         end;
  44.         if ( c = '+' ) or ( c = '-' ) or ( c = ' ' ) then
  45.         begin
  46.             n := 0
  47.         end
  48.         else
  49.         begin
  50.             read( c );
  51.             if c = '^' then
  52.             begin
  53.                 read( c );
  54.                 f := ( c >= '1' ) and ( c <= '9' );
  55.                 while ( c <> '+' ) and ( c <> ' ' ) and ( c <> '-' ) and f do
  56.                 begin
  57.                     n := n * 10 + ord( c ) - ord( '0' );
  58.                     read( c );
  59.                     f := ( c >= '0' ) and ( c <= '9' ) or ( c in ['+', '-', ' '] );
  60.                 end;
  61.                 f:=f and (n<>1)
  62.             end
  63.             else
  64.             if c in ['+', '-', ' '] then
  65.             begin
  66.                 n := 1
  67.             end
  68.             else
  69.             begin
  70.                 f := false
  71.             end
  72.         end;
  73.         fl1 := c = '-'
  74.     end
  75. end;
  76.  
  77. procedure inli ( p: list; a, n: integer; var ff: boolean );
  78. var
  79.     h, f, htemp, ptemp: list;
  80.     found:boolean;
  81. begin
  82.     h := p;
  83.     htemp:=p;
  84.     ptemp:=p;    found:=false; {
  85.     while  ( p <> nil ) and ( p^.an.n > n ) do
  86.     begin
  87.         h := p;
  88.         p := p^.sl
  89.     end;         }
  90.     while  ( ptemp <> nil )  do
  91.     begin
  92.       if (ptemp^.an.n > n) then begin
  93.         htemp := ptemp;
  94.         ptemp := ptemp^.sl
  95.       end else begin
  96.         h:=htemp;
  97.         p:=ptemp;
  98.         ptemp:=nil;
  99.         found:=true;
  100.       end;
  101.     end;
  102.     if (not found) then begin
  103.        h:=htemp;
  104.        p:=nil;
  105.     end;
  106.     if (p=nil) then begin
  107.         ff:=true;
  108.     end else if p^.an.n <> n then begin
  109.       ff:=true;
  110.     end else ff:=false;
  111.     {ff := (p=nil) or (p^.an.n <> n);}
  112.     if ff then
  113.     begin
  114.         new( f );
  115.         f^.an.a := a;
  116.         f^.an.n := n;
  117.         f^.sl := h^.sl;
  118.         h^.sl := f
  119.     end
  120. end;
  121.  
  122. procedure ochistka (var p: list );
  123. begin
  124.     if (p<>nil) then begin
  125.       ochistka(p^.sl);
  126.       dispose(p);
  127.     end;
  128. end;
  129.  
  130. procedure diff(p:list);
  131. var h:list;
  132. begin
  133.   h := p^.sl;
  134.   if h<>nil then begin
  135.     if (h^.an.n=0) then begin
  136.       p^.sl:=nil;
  137.       dispose(h);
  138.       h:=nil;
  139.     end;
  140.     while (h<>nil) do begin
  141.       if (h^.an.n=0) then begin
  142.         p^.sl:=nil;
  143.         dispose(h);
  144.         h:=nil;
  145.       end else begin
  146.         h^.an.a:=h^.an.a*h^.an.n;
  147.         h^.an.n:=h^.an.n-1;
  148.       end;
  149.       p:=p^.sl;
  150.       if (h<>nil) then h:=h^.sl;
  151.     end;
  152.   end;
  153. end;
  154.  
  155. procedure outlist(p:list);
  156. begin
  157.   p:=p^.sl;
  158.   if (p=nil) then begin
  159.     writeln(0);
  160.   end else begin
  161.     while(p<>nil) do begin
  162.       if (p^.an.a<>1) then write(p^.an.a);
  163.       if (p^.an.n=0) and (p^.an.a=1) then write(1);
  164.       if (p^.an.n<>0) then begin
  165.         write('x');
  166.         if (p^.an.n<>1) then write('^',p^.an.n);
  167.       end;
  168.       if (p^.sl<>nil) then begin
  169.         if (p^.sl^.an.a>0) then write('+');
  170.       end;
  171.       p:=p^.sl;
  172.     end;      
  173.     writeln;
  174.   end;
  175.  
  176. end;
  177.  
  178. begin
  179.     c := '0';
  180.     new( p );
  181.     p^.sl := nil;
  182.     p^.an.a := 0;
  183.     p^.an.n := maxint;
  184.     f := true;
  185.     {fl1 := false;}
  186.     fk := true;
  187.     first:=true;
  188.     gotnull:=false;
  189.     while ( c <> ' ' ) and f and fk do
  190.     begin
  191.         read( c );
  192.         if (c='0') then begin
  193.           if (not first) then begin
  194.             f:=false
  195.           end else begin
  196.             read(c);
  197.             f:=false;
  198.             if (c=' ') then gotnull:=true;
  199.           end;
  200.         end else begin
  201.           if (first) then begin fl1:= c = '-'; first:=false end;
  202.           vvod( a, n, c, fl1, f );
  203.           inli( p, a, n, fk );
  204.         end;
  205.     end;
  206.     if ( not f ) or ( not fk ) then
  207.     begin
  208.         if (gotnull) then writeln(0) else writeln( 'error' )
  209.     end
  210.  
  211.     else
  212. begin
  213. h := p^.sl;
  214. first:=true;
  215. diff(p);
  216. outlist(p);
  217. end;
  218. end.
Add Comment
Please, Sign In to add comment