Здравствуйте, уважаемые участники форума!

Не могли бы вы помочь мне отыскать ошибку в рассуждениях?

Вот какое у меня задание:

Разработать программу, которая удаляет из списка все элементы, меньше заданного пользователем значения k. Список строится путем ввода с клавиатуры значений элементов. Количество элементов заранее не известно, но отлично от нуля. Процедуры и функции для работы со списком (такие как формирование списка, поиск элемента по ключу, удаление элемента списка, просмотр списка и т.п.) оформить в виде модуля.

Вот какой модуль я пытался составить:


unit list;
 interface
 uses crt;
   const n=10;
   type ukaz=^k;
        k=record
         inf:integer;
         next:ukaz;
        end;
   var nlst,klst,pc,p,px:ukaz;
       c:array[1..n] of integer;
       i,key:integer;
       flag:boolean;
   procedure fill(var nlst:ukaz);
   procedure survey(nlst:ukaz);
   procedure search(var key:integer; nlst,p:ukaz; flag:boolean);
   procedure delete(var key:integer; nlst:ukaz);
 implementation
   procedure fill;
    begin
     for i:=1 to n do
      begin
       new(p);
       p^.inf:=c[i];
       p^.next:=nlst;
       nlst:=p;
      end;
    end;
   procedure survey;
    begin
     write('Содержание списка:  ');
     p:=nlst;
     if nlst<>nil then
      repeat
       write(p^.inf,' ');
       p:=p^.next;
      until p=nil;
    end;
   procedure search;
    begin
     p:=nlst;
     flag:=false;
     while (p<>px) and (not flag) do
      begin
       if p^.inf<key
       then flag:=not flag
       else
        begin
         px:=p;
         p:=p^.next;
        end;
      end;
    end;
   procedure delete;
    var p,px:ukaz;
    begin
     search(key,nlst,p,flag);
     px^.next:=p^.next;
     dispose(p);
     p:=nil;
    end;
end.


Но программа, использующая этот модуль не работает. Помогите пожалуйста разобраться, почему.

Что касается главной программы, то что-то в этом духе:


program lst;
uses crt, list;
 begin
 clrscr;
  writeln('введите числа для занесния в список(10 чисел)');
  for i:=1 to n do read(c[i]);
  fill(nlst);
  survey(nlst);
  writeln('введите число (все числа меньше введенного будут удалены из списка)');
  readln(key);
  writeln;
  delete(key,nlst);
  survey(nlst);
 readkey;
 end.


Я эту тему (динамические структуры) не понял. Помогите чем сможете.

Заранее благодарен.