Читайте также: |
|
4.12.4. Объявление указателей.
Как объявить указатели простых типов было показано выше. Для сложных типов указатели можно объявлять по разному. Обычно используют известный способ - в разделе типов объявляют идентификатор типа, который используют в разделе переменных.
Пример. Type Sm = Array[1..100] Of Integer;
Var Myk: ^ Sm;
(можно и так Var PT: Array [1..20] Of ^Real;).
4.12.5. Операции с указателями.
К динамическим переменным можно применять все операции, которые определены для обычных переменных соответствующих типов.
К самим указателям можно применять:
n операцию присваивания. В этом случае указатель получает значение адреса. Правило: указатели связанные операцией присваивания должны быть одного типа.
n операции сравнения = и <>.
Замечание - обращение к элементам массива Ms[k,n]^, то есть символ ^ записывается после квадратных скобок.
Создание массива указателей For j: = 1 To N Do
New(Mp[j]);.
Параметром процедуры New() может быть только типизированный указатель. Для работы с нетипизированными указателями предназначены процедуры:
- GetMem(Z, Size) – для резервирования памяти;
- FreeMem(Z, Size) - для освобождения памяти.
Здесь Z – нетипизированный указатель; Size – размер (в байтах) резервируемой или освобождаемой динамической памяти.
Лекция № 19
Модули.
Модуль - это отдельно компилируемая, специальным образом оформленная программная единица, которая может содержать описание типов данных, описание переменных процедуры и функции. Модуль - это мощное средство для создания библиотек прикладных подпрограмм.
Расположение модуля и ссылка на него.
Модуль транслируется отдельно от программы и размещается в отдельном сегменте памяти. Для того чтобы можно было использовать в программе тот или иной модуль, необходимо указать его имя в разделе модулей, который располагается сразу после заголовка программы и обозначается ключевым словом Uses.
Например, запись вида
Program Pm1;
Uses Mtx, Mfa;
означает, что в программе Pm1 используется два модуля: Mtx и Mfa.
Правило. Если какой либо модуль в списке модулей использует другие модули из этого списка, то он должен быть указан после всех используемых модулей. Смысл использования модулей заключается в том, что при трансляции программы составные части модуля будут помещены в соответствующие разделы программы.
Структура модуля.
Unit < имя >; - заголовок модуля
interface
........... интерфейсная часть
implementation
............ исполняемая часть
initialization
...... инициирующая часть (необязательна)
finalization
.......... завершающая часть
END.
Здесь Unit (единица) – зарезервированное слово; < имя > - имя модуля (формируется пр общим правилам); interface (интерфейс), implementation (выполнение), initialization (инициализация), finalization (завершение) – зарезервированные слова, открывающие соответствующие разделы модуля. Как видно из структуры модуль состоит из заголовка и четырех разделов любой из которых может быть пустым.
4.13.1. Составные части модуля.
Заголовок модуля состоит из ключевого слова UNIT и имени модуля. Имя формируется по общим правилам. Для правильной работы среды ТР имя модуля должно совпадать с именем дискового файла в котором располагается исходный текст модуля. Например, если заголовок модуля имеет вид
Unit Global;
то текст модуля должен быть помещен в файл
Global. pas.
Модуль может использовать другие модули. Как и в случае главной программы, используемые модули объявляются с помощью ключевого слова Uses. Объявление используемых модулей может располагаться после зарезервированных слов interface и implementation.
Пример.
Unit MyMod;
interface
Uses ModA, ModB;
...........
implementation
Uses ModC, ModD;
.............
4.13.2. Интерфейсная секция.
Эта секция предназначена для связи модуля с программой, которая использует этот модуль. В ней можно указывать:
n модули, используемые данным модулем;
n константы, типы данных, переменные;
n заголовки процедур и функций.
Все эти описания делаются по правилам языка ТР. Все, что указано в интерфейсной секции является видимым для программы, поэтому данные указанные в этой секции являются глобальными.
При описании процедур и функций в интерфейсной секции записываются только заголовки процедур и функций.
4.13.3. Секция реализации (implementation).
В этой секции размещаются тексты процедур и функций, объявленных в интерфейсной секции, а также здесь можно объявлять локальные для модуля объекты – вспомогательные типы, константы, переменные и подпрограммы
При записи подпрограмм заголовки процедур и функций можно указывать без описания списка формальных параметров. Но если заголовок подпрограммы приводится в полном виде (со списком формальных параметров) он должен совпадать с заголовком, объявленным в интерфейсной секции. Запись текста подпрограммы без указания списка формальных параметров является плохим стилем программирования – использовать такой способ записи в серьезных программах не рекомендуется. Указание перечня формальных параметров непосредственно в заголовке подпрограммы облегчает чтение кода и понимание алгоритма.
Инициализирующая секция предназначена для размещения операторов, которые выполняются до передачи управления основной программе и обычно используются для подготовки ее работы (например, инициализация переменных, открытие нужных файлов и т.п.)
Завершающая секция предназначена для указания операторов, которые выполняются после завершения работы основной программы (освобождение ресурсов, закрытие файлов). Если эти две секции пустые, то зарезервированные слова initialization и finalization не указываются.
Пример. Запишем модуль в котором:
n определяется константа МУ = 900;
n реализуется процедура (имя PV) перестановки двух переменных Р1 и Р2;
n реализуется функция (имя Мах) определения максимального значения из двух переменных Р3 и Р4.
n
Unit Prs;
Interface
Const My = 900;
Procedure Pv(Var P1, P2: Integer);
Function Max (P3, P4: Extended): Extended;
Implementation
Procedure Pv(Var P1, P2: Integer);
Var S: Integer;
Begin
S:= P1; P1: = P2; P2: = S
End; {конец процедуры PV}
Function Max (P3, P4: Extended): Extended;
Begin
If P3 >P4 Then Max: = P3
Else Max: = P4
End; {конец функции Max}
END.
В процедуре Pv используется внутренняя переменная для запоминания значения переменной P1.
Пример программы использующей модуль PRS. Пусть в программе РХ надо поменять местами переменные К и М целого типа и вычислить переменную У как сумму переменной Z и максимального значения из переменных А и В. Фрагмент такой программы можно записать так
Program MOD;
Uses PRS;
.......
Var Y, A, B, Z: Real;
K, M: Integer;
.......
Begin
......
PV (K, M);
Y: = Z + MAX (A, B);
.....
Вопрос? Что будет если в модуле и программе определяются переменные с одинаковыми именами?
Правило. Если в модуле и программе, использующей этот модуль, объявляются одинаковые имена (переменные, константы, подпрограммы), то при использовании в тексте программы действует последнее объявление, то есть объявление в программе. Чтобы можно было использовать подобные имена из модуля необходимо записывать составное имя в виде
имя модуля. имя переменной
Пример.
Program USMOD;
Uses PRS;
Const My = 200;
Var Tk, Mz: Integer;
Begin
.......
Tk: = My + 25; {Tk = 225}
Mz: = Prs. My + 25; { Mz = 115 }
Дата добавления: 2014-12-18; просмотров: 44 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Указатели и динамическая память | | | Формы записи чисел в ячейки памяти. |