Guest User

Untitled

a guest
Apr 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.52 KB | None | 0 0
  1. type llist = ^element;
  2.     element = record
  3.                 e, k: integer;
  4.                 next: llist;
  5.               end;
  6.  
  7. var input, output: text;
  8.     p, q: llist;
  9.     n, e, k, i, count: longint;
  10.  
  11. procedure add(e, k: longint; var list: llist);  
  12. var temp: llist;          
  13. Begin  
  14.     new(temp);  
  15.     temp^.next := list;        
  16.     temp^.e := e;
  17.     temp^.k := k;    
  18.     list := temp;
  19. end;
  20.  
  21. procedure writeList(list: llist);
  22. Begin
  23.     while list <> nil do
  24.         Begin
  25.         if list^.k <> 0 then Begin write(output, list^.e, ' ', list^.k); writeln(output); end;
  26.         list := list^.next;
  27.         end;
  28. end;
  29.  
  30. procedure searchAdd(var p, q: llist);
  31. var tempP, tempQ, destr: llist;
  32. Begin
  33.     tempP := p;
  34.     while tempP <> nil do
  35.         Begin
  36.         tempQ := q;
  37.         while tempQ <> nil do
  38.             Begin
  39.             if tempP^.e = tempQ^.e then
  40.                 Begin
  41.                 tempP^.k := tempP^.k + tempQ^.k;
  42.                 destr := tempQ^.next;
  43.                 if (tempQ = q) and (q^.next = nil) then
  44.                     Begin
  45.                     destr := q;
  46.                     q := nil;
  47.                     dispose(destr);
  48.                     end
  49.                 else if destr <> nil then
  50.                     Begin
  51.                     tempQ^.e := tempQ^.next^.e;
  52.                     tempQ^.k := tempQ^.next^.k;
  53.                     tempQ^.next := tempQ^.next^.next;
  54.                     dispose(destr);
  55.                     end
  56.                 else if destr = nil then
  57.                     Begin
  58.                     tempQ := q;
  59.                     while tempQ^.next^.next <> nil do
  60.                         tempQ := tempQ^.next;
  61.                     destr := tempQ^.next;
  62.                     tempQ^.next := nil;
  63.                     dispose(destr);
  64.                     end;
  65.                 break;
  66.                 end;
  67.             tempQ := tempQ^.next;
  68.             end;
  69.         tempP := tempP^.next;
  70.         end;
  71.     tempP := p;
  72.     if q <> nil then
  73.         Begin
  74.         while tempP^.next <> nil do
  75.             tempP := tempP^.next;
  76.         tempP^.next := q;
  77.         end;
  78. end;
  79.  
  80. procedure sortList(var list: llist);
  81. var  temp: llist;
  82.     change : boolean;
  83.     numTemp : longint;
  84. Begin
  85.     count := 0;
  86.     repeat
  87.         temp := list;
  88.         change := False;
  89.         while temp^.next <> nil do
  90.             Begin
  91.             if temp^.e < temp^.next^.e then
  92.                 Begin
  93.                 numTemp := temp^.e;
  94.                 temp^.e := temp^.next^.e;
  95.                 temp^.next^.e := numTemp;
  96.                 numTemp := temp^.k;
  97.                 temp^.k := temp^.next^.k;
  98.                 temp^.next^.k := numTemp;
  99.                 change := True;
  100.                 end;
  101.             temp := temp^.next;
  102.             end;
  103.     until not change;    
  104.     temp := p;
  105.     while temp <> nil do
  106.         Begin
  107.         if temp^.k <> 0 then count := count + 1;
  108.         temp := temp^.next;
  109.         end;
  110.     writeln(output, count);
  111. end;
  112.  
  113. Begin
  114.     assign(input, 'polynomy.in'); reset(input);
  115.     assign(output, 'polynomy.out'); rewrite(output);
  116.     p := nil;
  117.     q := nil;
  118.     readln(input, n);
  119.     for i := 1 to n do
  120.         Begin
  121.         read(input, e);
  122.         readln(input, k);
  123.         add(e, k, p);
  124.         end;
  125.     readln(input, n);
  126.     for i := 1 to n do
  127.         Begin
  128.         read(input, e);
  129.         readln(input, k);
  130.         add(e, k, q);
  131.         end;
  132.     searchAdd(p, q);
  133.     sortList(p);
  134.     writeList(p);
  135.     close(input); close(output);
  136. end.
Add Comment
Please, Sign In to add comment