program mediana;

const
  MAX = 10;
  ZAKRES = 100;

var
  tab: array[0..MAX] of Integer;
  l,p,k,w,n:integer;

{ Uzupelnianie tablicy losowymi wartosciami}
procedure UzupTablica;
var
  i: integer;
begin
  for i:=0 to MAX do tab[i]:= Random(ZAKRES+1);
end;

{zamiana dwoch zmiennych miejscami}
procedure zam(var a, b: integer);
var
  c: integer;
begin
  c:=a; a:=b; b:=c;
end;

procedure WypTab(tab: array of integer);
var i:integer;
begin
  for i:=0 to MAX do Write(tab[i]:4);
end;

{el. 1 dzieli tablice}
function podzial( var tab: array of integer; left, right:integer):integer;
var
  i, m: integer;
begin
  m:=left;
  for i:=left+1 to right do
    if tab[i]<tab[left] then
    begin
      Inc(m);
      zam(tab[m],tab[i]);
    end;
  zam(tab[left],tab[m]);
  podzial:=m;
end;

begin
  Randomize;
  UzupTablica;
  writeln('Podaj, ktory element obliczyc?');
  readln(w);
  n:=w;
  dec(w);

  {algorytm Hoare'a}
  l:=0;
  p:=MAX;

  while (l<p) do
  begin
    k:=podzial(tab,l,p);
    if k=w then l:=p;
    if k<w then l:=k+1;
    if k>w then p:=k-1;
  end;

  writeln(n, ' element ciagu to ', tab[k]);
  WypTab(tab);

  WriteLn;
  WriteLn(#13#10#13#10 + ' Press Enter..');
  ReadLn;
end.