program insertion_sort;
uses crt;

const maxN = 1000;

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

procedure insertion;
var k,l,v  : integer;
begin
 for k:=2 to n do
  begin
    v:=a[k];
    l:=k;
    while a[l-1]>v do begin
                        a[l]:=a[l-1];
                        l:=l-1;
                      end;
    a[l]:=v;
  end;
end;

procedure insertion_char;
var k,l  : integer;
    v    : char;
begin
 for k:=2 to n do
  begin
    v:=b[k];
    l:=k;
    while b[l-1]>v do begin
                        b[l]:=b[l-1];
                        l:=l-1;
                      end;
    b[l]:=v;
  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('                *** Insertion 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;
      insertion;
      writeln;writeln;
      print_array(1);
    end

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