program shell_sort;
uses crt;

const  maxN = 50;

var a  : array[1..maxN] of string[50];
    N  : integer;   (* Anzahl der eingegeben WÖrter *)


procedure lies_strings;
var i : integer;
begin
 i:=0;
 repeat
   i:=i+1;
   write('Wort ',i,'  :  ');  readln(a[i]);
 until a[i]='';
 N:=i-1;
end;


procedure lies_strings_von_datei(datei : string);
var dat : text;
    i   : word;
begin
 i:=0;
 assign(dat,datei);
 reset(dat);
 if not eof(dat) then
   repeat
    i:=i+1;
    readln(dat,a[i]);
   until eof(dat);
 N:=i;
 close(dat);
end;





procedure print_strings( ab:integer);
var i : integer;
begin
 for i:=ab to N do  writeln(a[i]);
 writeln('*** ende *** ');
end;


procedure shellsort;
label 0;
var i,j,h  : integer;
    v      : string;
begin
 h:=1;
 repeat  h:=3*h+1  until h>N;
 repeat
   h:=h div 3;
   for i:=h+1 to N do
    begin
      v:=a[i];
      j:=i;
      while (a[j-h] > v)  do
       begin
         a[j]:=a[j-h];
         j:=j-h;
         if j<=h then goto 0
       end;
0:    a[j]:=v;
    end;
 until h=1;
end;


begin
 clrscr;
 lies_strings_von_datei('sorting.asc');
 print_strings(1);  writeln;writeln; readln;
 shellsort;
 print_strings(1);  readln;
end.