program Ordenacao;

const MAXTAM = 20;

type TipoIndice = 0..MAXTAM;
     TipoVetor  = array [TipoIndice] of integer;

var A : TipoVetor;
    B : TipoVetor;
    i : TipoIndice;
    n : TipoIndice;

procedure Ordena (var A: TipoVetor);
{ ordena o vetor A em ordem ascendente }
var  i, j, min, x: integer;
begin
  for i := 1 to n-1 do
  begin
    min := i;
    for j:= i+1 to n do
       if A[j] < A[min]
       then min := j;
    { troca A[min] e A[i] }
    x := A[min];
    A[min] := A[i];
    A[i] := x;
  end;
end;

procedure Imprime (V : TipoVetor);
begin
  for i := 1 to n do write (V[i],' ');
  writeln;
end;

procedure Copia (Fonte : TipoVetor; var Destino : TipoVetor);
begin
  for i := 1 to n do Destino[i] := Fonte[i];
end;

procedure Testa (var V : TipoVetor);
begin
  for i := 2 to n do
    begin
    if V[i] < V[i-1]
    then begin
         write ('ERRO: ');
         Imprime (V);
         halt;
         return;
         end;
    end;
  write ('OK  : ');
  Imprime (V);
end;

begin
  n := 20; {Tamanho do arranjo a ser ordenado}
  randomize;
  for i := 1 to n do
    begin
    A[i] := 1 + random (n);
    B[i] := A[i];
    end;
  write ('Desordenado   : ');
  Imprime (A);

  write ('Ordena ');
  Ordena (B);
  Testa (B);
  Copia (A,B);
end.

