Виды файлов

Файлы

Удаление элементов списка

Просмотр элементов списка

Создание списков

Предположим, что есть некоторый набор значений (например, в файле), которые необходимо записать в создаваемый односвязный список. Тогда у нас есть две возможности создавать этот список: от хвоста к голове или от головы к хвосту. Мы приведем здесь обе программы, позволив себе для краткости опустить описания типов, воспользовавшись описанием, показанным в табл. 1 (a):


var head,p: ukazatel; f: text;

begin

...

head:= nil;

while not eof(f) do

begin

new(p);

read(f,p^.znach);

p^.next:= head;

head:= p;

end;

end.

 

var head,p,q: ukazatel; f: text;

begin

...

if eof(f)

then head:= nil

else begin

new(head); {головной элемент

создается отдельно}

read(f,head^.znach);

head^.next:= nil;

 

q:= head;

while not eof(f) do

begin

new(p);

read(f,p^.znach);

p^.next:= nil;

q^.next:= p;

q:= q^.next;

end;

end;

end.


 

Для того чтобы распечатать значения, хранящиеся в элементах линейного односвязного списка, заданного указателем на голову, годится такая программа:

p:= head; {начать просмотр с головы списка}

while p<>nil do

begin

writeln(p^.znach);

p:= p^.next; {переход к следующему элементу списка}

end;

Замечание: Для того чтобы во время работы со списком не произошло выхода за его пределы, любой список обязательно должен оканчиваться "нулевым" указателем nil.

Для того чтобы при удалении элемента из середины списка не терялась целостность всей структуры, необходимо при поиске удаляемого элемента "остановиться" за один шаг до него: в тот момент, когда следующий за текущим элемент должен быть удален:

p:= head; {начать с головы списка}

while p^.next^.zhach<>х do p:= p^.next; {поиск}

q:= p^.next; {удаляемый элемент}

p^.next:= q^.next; {связка "через один"}

dispose(q); {освобождение памяти}


 

Файл - это самостоятельная последовательность символов, записанная в постоянную память компьютера. Файлы могут хранить в себе все, что поддается кодированию:

• исходные тексты программ или входные данные (тесты);

• машинные коды выполняемых программ (игры, вирусы, обучающие и сервисные программы…);

• информацию о текущем состоянии какого-либо процесса;

• различные документы, в том числе и Интернет-страницы;

• картинки (рисунки, фотографии, видео);

• музыку; и т.д.

Выбор между консолью и файлами:

• Файлы полезны, если объем входных данных превосходит посильный при ручном вводе.

• Файлы нужны, если приходится многократно вводить одну и ту же информацию, с минимальными изменениями или вовсе без изменений (например, при отладке программы).

• Файлы необходимы, если нужно сохранять информацию о результатах работы программы, полученных при вводе различных входных данных (то есть: при поиске ошибок в программе).

В языке Pascal имеется возможность работы с тремя видами файлов:

• текстовыми;

• типизированными;

• нетипизированными.

Последние два типа объединяются под названием бинарные: информация в них записывается по байтам и потому не доступна для просмотра или редактирования в удобных для человека текстовых редакторах, зато такие файлы более компактны, чем текстовые. Текстовые же файлы возможно создавать, просматривать и редактировать "вручную" - в любом доступном текстовом редакторе. Кроме того, при считывании данных из текстового файла нет необходимости заботиться об их преобразовании: в языке Pascal имеются средства автоматического перевода содержимого текстовых файлов в нужный тип и формат, и это позволяет сэкономить немало времени и сил.