Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




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

Формирование очереди

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

Пример:

Procedure TForm1.Test_oheredClick(Sender: TObject); //очередь

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

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

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

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

Begin New(nah); nah^.inf:=1; kon:=nah; //создание первой записи очереди

For i:=2 to 5 do //цикл формирования очереди

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

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

kon^.inf:=i; kon^.next:=nil; //формирование значений полей новой записи

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

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

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

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

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

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

kon^.inf:=i; kon^.next:=nil; //формирование значений полей новой записи

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

Procedure udalo; //процедура удаления первой записи из очереди

Begin del:=nah; nah:=nah^.next; Dispose(del); end; //удаление первой записи

Procedure vivodo; //процедура вывода очереди

Begin Label1.caption:='';tek:=nah;//очистка Label1 и зап.адр. первой записи

while tek<>Nil do //цикл вывода записей очереди

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

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

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

sozdo; dobavo; udalo; vivodo;//вызов процедур обработки очереди

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

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

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

1. Что представляет собой структура данных «стек»?

2. Что представляет собой структура данных «очередь»?

3. Каково назначение метода New?

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


Глава 2. Среда разработки Delphi

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

Окна

Программы создаются в интегрированной среде разработки IDE (Integrate Development Environment) (рис. 2.1.1.1). Среда Delphi относится к системам быстрой визуальной разработки приложений RAD (Rapid Application Development).

 
 

Рис. 2.1.1.1. Окна среды разработки приложений

 

Для многих окон имеются контекстные меню с командами настройки (Properties) и управления окнами. Рассмотрим основные окна среды Delphi.

Окно настройки среды (Environment Options) вызывается командой Tools/ Environment Options и служит для настройки параметров среды.

Окно Инспектора объектов (Object Inspector) предназначено для изменения свойств объектов. Окно можно вызвать командой View/Object Inspector или клавишей F11. Окно имеет две страницы Properties (описа­ние свойств объектов в виде наименования и значения свойств) и Events (список процедур обработки различных событий). Двойной щелчок по полю события выводит окно редактора кода процедуры обработки этого события и программист может создать или откорректировать процедуру на языке Delphi, которая будет автоматически выполняться при наступлении этого события. Если нужно обратиться к уже существующей процедуре, то можно открыть список и выбрать эту процедуру. В верхнем поле с раскрывающимся списком можно выбрать текущий объект, свой­ства которого нужны пользователю. В контекстном меню имеются полез­ные команды: Arrange (сортировка свойств по категориям или именам), View (отображаемые свойства). Если свойство объекта (например, DataSet) представляет другой объект (Query1), то двойной щелчок на значении этого свойства при нажатой клавише Ctrl выведет свойства, указанного в значении объекта (Query1).

Окно конструктора формы (Form1) содержит объекты на форме, из которой формируется отдельный модуль с кодом описания формы и ее объектов и процедур.

Окно редактора кода (Unit1.pas) служит для создания и редакти­ро­ва­ния программ. Для быстрого переключения между окнами кода и формы используется клавиша F12. Командой Add To-DoItem из контекстного меню можно добавить текст комментария (например, сооб­ще­ние об ошибке в программе) к программе (поле Text), фамилию автора (Owner), важность по пятибалльной системе (Priority), категорию (Category). Комментарий выводится и в программу, начиная с позиции курсора. Вызов окна просмотра комментариев осуществляется командой View/To-Do List. В окне можно пометить галочкой отдельные комментарии. Двойным щелчком по строке с комментарием можно вернуться на программу с этим комментарием. Контекстное меню этого окна позволяет выполнять различные операции с комментариями (удалять, включать, редактировать, сортировать и др.).

Окно проводника кода находится слева от окна редактора кода и содержит дерево объектов модуля формы. Это окно будет отсутствовать, если сбросить флажок Automatically show Explorer на странице Explorer окна Environment Options, вызываемой командой Tools/Environment Options. Вывод этого окна производится командой View/Code Explorer.

Окно менеджера проекта (Project Manager) вызывается командой View/Project Manager и служит для управления частями проекта (просмотра, удаления и добавления новых частей).

Окно обозревателя проекта (Exploring...) вызывается командой View/Browser позволяет быстро перемещаться по дереву глобальных сим­во­лов, классов, модулей. В зависимости от типа текущего объекта в правой части окна доступны детальные его характеристики: Scope (пределы), Inheritance (иерархия), References (ссылки). Окно можно настроить командой Tools/Environment Options/Explorer.

Главное меню содержит набор команд управления средой.

Панели кнопок быстрого вызова, часто используемых команд глав­ного меню, находятся под левой частью меню. Существует 5 панелей: стан­дартная (Standart), просмотра (View), отладки (Debug), пользователя (Custom) и рабочего стола (Desktop). Настройку панелей можно произ­вести из окна Customize (Настройка), вызываемой командой Customize из контекстного меню панелей.

Сохранение настроек окон можно реализовать командой View/Desktop/Save desktop (кнопкой Save current desktop), указав далее имя настройки. Выбор нужной настройки осуществляется из списка настроек (в конце сроки меню). Для окон отладки используется команда View/Desktop/Set Debugger Desktop (кнопка Set debugger desktop).

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...