fork download
  1. program lista_wspolna_z_p_i_q;
  2. type tab=array[1..10] of integer;
  3. lst = record
  4. elementy: tab;
  5. ile: integer
  6. end;
  7. var
  8. i, j, k, l: integer;
  9. p, q, r: lst; (* p i q listy niepuste i niemalejące! r - lista wynikowa *)
  10.  
  11. begin
  12. writeln('poczatek');
  13. read(p.ile, q.ile); readln; writeln(p.ile,' ',q.ile);
  14. for i:= 1 to p.ile do read(p.elementy[i]);readln;
  15. for i:= 1 to q.ile do read(q.elementy[i]);readln;
  16. for i:= 1 to p.ile do write(p.elementy[i],' ');writeln;
  17. for i:= 1 to q.ile do write(q.elementy[i],' ');writeln;
  18.  
  19. i := 1; j := 1; k := 1;
  20.  
  21. // indeks do bierzących elementów listy p i q
  22. while (i <= p.ile) and (j <= q.ile) do
  23. begin
  24. // Jesli liczba w "p" jest mniejsza to przesuwam indeks i
  25. if p.elementy[i] < q.elementy[j] then
  26. i := i + 1
  27. // Jesli liczba w "q" jets mniejsza to przesuwam indeks j
  28. else if p.elementy[i] > q.elementy[j] then
  29. j := j + 1
  30. else
  31. // A jesli p i q są rowne, dodajemy liczbe do r
  32. begin
  33. // k - biezaca pozycja na liscie r
  34. r.elementy[k] := p.elementy[i]; // dowolną p lub q
  35. // zwiekszamy indeksy
  36. k := k + 1;
  37. i := i + 1;
  38. j := j + 1;
  39. end;
  40.  
  41. end;
  42. // Po petli, k wyszedł poza zakres
  43. r.ile := k - 1;
  44.  
  45. for i:= 1 to r.ile do write(r.elementy[i],' ');writeln;
  46. writeln('koniec');
  47. end.
Success #stdin #stdout 0s 5296KB
stdin
8 9
2 2 2 3 4 6 8 9
1 1 3 4 5 6 7 9 11 17
stdout
poczatek
8 9
2 2 2 3 4 6 8 9 
1 1 3 4 5 6 7 9 11 
3 4 6 9 
koniec