Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

Вопросы для самопроверки и контроля

Вопросы для самопроверки

  1. Каков общий порядок работы с файлами?

  2. Что является записью текстового файла?

Контрольные вопросы

  1. Можно ли защитить файл от изменений?

  2. Можно ли найти запись по ее порядковому номеру?

  3. Каково назначение функции Eof?

  4. Каково назначение файловой процедуры Read?

  5. Каково назначение файловой процедуры Write?

  6. Каково назначение файловой процедуры AssignFile?

  7. Каково назначение файловой процедуры Reset?

  8. Каково назначение файловой процедуры Seek?

  9. Какие подходы существуют при работе с файлами?

  10. Для чего предназначена процедура Rewrite?

  11. Для чего предназначена процедура Flush?

  12. Для чего предназначена процедура IOResult?

  13. Какой функцией можно определить размер файла?

1.9. Динамические структуры данных

1.9.1.Общие сведения

Динамические структуры ‑ структуры, для которых выделяется динамическая память в процессе выполнения программы, используются ука­затели (п.1.1.8) и операции над указателями (п.1.2.7). Обычно они ис­поль­­зуются для динамического формирования списка - логически свя­зан­­ного набора записей, каждая из которых состоит из двух частей: адресной (содержит адреса, на логически связанные с ней, записей) и ин­фор­ма­цион­ной (поля записи с данными). Лучшим средством орга­ни­за­ции ди­на­ми­чес­ких структур является использование классаTList(п. 2.2.6).

1.9.2. Процедуры и функции динамического распределения памяти

AllocMem(N:Integer):Pointerвыделяет область изNбайтов и возвращает ее адрес.

Dispose(var Р:pointer[,Destructor])‑ удаляет динамическую переменную по адресу P. Destructor определяет метод‑деструктор для объекта.

FreeMem(var P:pointer[;N:Integer])‑ удаляет динамическую переменную по адресуPи размеромNбайт.

GetMem(var P:pointer;N:Integer)‑ создает новую динамическую перемен­ную по адресу Р заданного размераN.

New(var P: pointer[,Constructor]) ‑ создает новую динамическую пере­мен­ную по адресу Р. Параметр Constructor определяет метод ‑ конструктор для динамического объекта.

Addr(X): pointer‑ возвращает адрес заданного объекта X.

1.9.3. Формирование стека

Под стеком понимается список, обслуживаемый по принципу «последним пришел - первым ушел».

Пример:

procedure TForm1.Test_StekClick(Sender: TObject); //стек

Type ukaz=^stack; stack=Record inf:Integer; next:ukaz; end; //типы

Var top,kon,del:ukaz; value:Integer; //переменные

Procedure sozds; //процедура создания стека из пяти записей

Var i:Integer; //переменная цикла

Begin top:=Nil; //если список пустой, начало =Nil ‑ отсутствие адреса

For i:=1 to 5 do //цикл формирования стека

Begin New(kon); //выделение памяти для новой записи

kon^.next:=top; // запоминание адреса предыдущей записи

kon^.inf:=i; //запоминание в новой значения i

top:=kon; //запоминание адреса последней записи (вершины стека)

End; {конец тела цикла} End; //конец процедуры создания стека

Procedure dobavs;//процедура добавления в стек трех записей

Var i:Integer; //переменная цикла Begin

For i:=6 to 8 do //цикл добавления записей в стек

Begin New(kon);//выделение памяти для новой записи

kon^.next:=top;kon^.inf:=i;//запоминание адреса предыдущей записи и i

top:=kon; //запоминание адреса последней записи (вершины стека)

End; {конец тела цикла добавления записей в стек}End; //конец процедуры Procedure udals; //процедура удаления записи из стека

Begin del:=top; top:=kon^.next; Dispose(del)

end;

Procedure vivods; //процедура вывода всех записей из стека

Begin kon:=top; //установка адреса вершины стека (последней записи стека)

Label1.caption:=''; //очистка объекта Label1

While kon<>Nil do //цикл вывода записей стека

Begin Label1.caption:=Label1.caption+IntToStr(kon^.inf)+','; kon:=kon^.next;

End {конец тела цикла. В результате в Label1 выведется: 7,6,5,4,3,2,1,}End;Begin //начало процедуры тестирования процедур обработки стека

sozds; dobavs; udals; vivods;//вызов процедур создания и обработки стека

end; //конец тестирования процедур обработки стека