КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |