program selection_sort;
uses crt;

const maxN = 1000;

var  a   : array[1..maxN] of integer;
     b   : array[1..maxN] of char;
     n,i : integer;

procedure selection;
var k,l,min,t  : integer;
begin
 for k:=1 to n-1 do
  begin
    min:=k;
    for l:=k+1 to n do  if a[l]<a[min] then min:=l;
    t:=a[min];
    a[min]:=a[k];
    a[k]:=t;
  end;
end;


procedure selection_char;
var k,l,min : integer;
    t       : char;
begin
 for k:=1 to n-1 do
  begin
    min:=k;
    for l:=k+1 to n do  if b[l]<b[min] then min:=l;
    t:=b[min];
    b[min]:=b[k];
    b[k]:=t;
  end;
end;


procedure read_array;
var k : integer;
begin
 writeln('Geben Sie das array ein ! .  ( Ende mit 0 ) ');
 writeln;writeln;
 k:=1;
 repeat
   write('a[',k,']  ?  '); readln(a[k]);
   k:=k+1;
 until a[k-1]=0;
 n:=k-2;
end;


procedure read_array_char;
var k : integer;
begin
 writeln('Geben Sie das array ein ! .  ( Ende mit 0 ) ');
 writeln;writeln;
 k:=1;
 repeat
   write('b[',k,']  ?  '); readln(b[k]);
   k:=k+1;
 until b[k-1]='0';
 n:=k-2;
end;




procedure print_array(ab : integer);
var k:integer;
begin
 for k:=ab to n do  write(a[k],'---');
 writeln('ende');
end;



procedure print_array_char(ab : integer);
var k:integer;
begin
 for k:=ab to n do  write(b[k],'---');
 writeln('ende');
end;


var eg : char;
begin
 clrscr;
 writeln('                *** Selection Sort *** ');
 writeln;writeln;
 write('Mit Integer oder mit Chars ?  (I/C)  '); readln(eg);
 if eg='i' then
    begin
      read_array;
      readln;
      clrscr;
      print_array(1);
      readln;
      selection;
      writeln;writeln;
      print_array(1);
    end

 else begin
        read_array_char;
        readln;
        clrscr;
        print_array_char(1);
        readln;
        selection_char;
        writeln;writeln;
        print_array_char(1);
      end;
 readln;
end.