Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Модули




Лекция № 19

..........

Var

Za, Zb: ^ real;

k,f,g: Real;

Begin {главная программа}

New (Za); New (zb);

Za ^: = 10.5; Zb ^: = 15.2;

f: = Zb ^ + Za ^; { f = 25.7 }

Zb: =Za;

k: = Zb ^ + Za ^; { k = 21!! }

 

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 – размер (в байтах) резервируемой или освобождаемой динамической памяти.

 

Модуль - это отдельно компилируемая, специальным образом оформленная программная единица, которая может содержать описание типов данных, описание переменных процедуры и функции. Модуль - это мощное средство для создания библиотек прикладных подпрограмм.

Расположение модуля и ссылка на него.

Модуль транслируется отдельно от программы и размещается в отдельном сегменте памяти. Для того чтобы можно было использовать в программе тот или иной модуль, необходимо указать его имя в разделе модулей, который располагается сразу после заголовка программы и обозначается ключевым словом 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-01-04; Просмотров: 424; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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