Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

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

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

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

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.1.8) и операции над указателями (п.1.2.7). Обычно они ис­поль­­зуются для динамического формирования списка - логически свя­зан­­ного набора записей, каждая из которых состоит из двух частей: адресной (содержит адреса, на логически связанные с ней, записей) и ин­фор­ма­цион­ной (поля записи с данными). Лучшим средством орга­ни­за­ции ди­на­ми­чес­ких структур является использование класса TList (п. 2.2.6).

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.

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

Пример:

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; //конец тестирования процедур обработки стека




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 371; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.