Программа
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.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию