uses crt;

const
  MaxN = 100;
  JmenaLidi : array[1..5] of string
                = ('Honza', 'Sasa', 'Petra', 'Igor', 'Kamila');

type
  TOsoba = record
             name : string;
             age : byte;
           end;
  TLide = array[1..MaxN] of TOsoba;

procedure vypis_lidi(lide : TLide; n : word);
var
  i : word;
begin
  for i := 1 to n do
  begin
    write(lide[i].name, '(', lide[i].age, ') ');
  end;
end;

procedure prohod_lidi2(var lide: TLide; i, j : word);
var
  x : TOsoba;
begin
  x := lide[i];
  lide[i] := lide[j];
  lide[j] := x;
end;

{ najit nejmladsiho cloveka z intervalu [start, n] }
function nejmladsi(var lide : TLide; start, n : word): word;
var
  a : word; { udrzeni aktualniho minima }
  i : word;
begin
  a := start;

  { projdeme vsechny zbyvajici lidi }
  for i := start + 1 to n do
  begin
    { overime, jestli nektery neni mladsi }
    if lide[i].age < lide[a].age then a := i;
  end;

  { vratime index nejmladsiho cloveka }
  nejmladsi := a;
end;

var
  lide : TLide;
  i, n : word;
begin
  clrscr;

  { inicializujeme potrebovat generator nahodnych cisel }
  randomize;

  { vygenerujeme si nejake nahodne lidi }
  n := 20;
  for i := 1 to n do
  begin
    lide[i].name := JmenaLidi[Random(5) + 1];
    lide[i].age := Random(40) + 15;
  end;  { vypiseme je v serazene od nejmladsich }

  { vypiseme je }
  vypis_lidi(lide, n);
  writeln;
  writeln;

  { prohodime prvni dva }
  prohod_lidi2(lide, 1, 3);

  { vypiseme je znovu }
  vypis_lidi(lide, n);
  writeln;
  writeln;

  { najdeme a vypiseme index nejmladsiho }
  i := nejmladsi(lide, n, n);
  writeln('Index nejmladsiho je ', i, ', jmenuje se tedy ', lide[i].name, '.');
  readkey;
end.























