Программа


UNIT mod_077;
INTERFACE
TYPE ElementRef=^Element;        { Указатель на элемент списка }
     Element=record              { Запись списка }
               N:real;              { Число-значение }
               Next:ElementRef      { Ссылка на следующий элемент }
             end;
PROCEDURE DisposerList(var L:ElementRef); { Процедура удаления списка }
PROCEDURE ReadList(var F:text; var L:ElementRef); { Процедура чтения файла }
PROCEDURE Filter(A:real; L:ElementRef); { Процедура обработки списка }
PROCEDURE WriteList(var F:text; L:ElementRef); { Процедура вывода списка в файл }
IMPLEMENTATION
PROCEDURE DisposerList(var L:ElementRef); { Процедура удаления списка }
  Begin
    if L<>nil then begin   { Если переменная существует, то }
                     DisposerList(L^.NEXT);  { удаление хвоста списка }
                     Dispose(L);             { удаление переменной }
                     L:=nil { Переопределение ссылки }
                   end
  End;
PROCEDURE ReadList(var F:text; var L:ElementRef); { Процедура чтения файла }
  Begin
    if EOF(F) { Проверка достижения конца файла }
    then L:=nil { Сброс ссылки }
    else begin
           New(L);    { Создание новой записи }
           ReadLn(F,L^.N); { Чтение элемента }
           ReadList(F,L^.Next) { Чтение конца файла }
         end
  End;
PROCEDURE Filter(A:real; L:ElementRef); { Процедура обработки списка }
  Var Buf:ElementRef; { Вспомогательная переменная для удаления записи }
  Begin
    if L<>nil then { Проверка существования элементов }
    begin
      if L^.N=A then { Сравнение элемента списка }
        if L^.Next<>nil then { Проверка наличия следующего элемента }
          if L^.Next^.N<>A then  { Сравнение следующего элемента }
          begin
            Buf:=L^.Next^.Next;  { Сохранение ссылки на "послеследующий" элемент }
            Dispose(L^.Next); { Уничтожение следующего элемента }
            L^.Next:=Buf { Связывание списка }
          end;
      Filter(A,L^.Next) { Обработка оставшейся части списка }
    end;
  End;
PROCEDURE WriteList(var F:text; L:ElementRef); { Процедура вывода списка в файл }
  Begin
    while L<>nil do { Цикл вывода списка в файл }
    begin
      WriteLn(F,L^.N:5:2); { Вывод значения элемента в файл }
      L:=L^.Next { Переопределение ссылки }
    end
  End;
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию