КАТЕГОРИИ: Архитектура-(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) |
Оверлей
Использование модулей Пример Cекция инициализации В некоторых случаях перед обращением к модулю следует провести его инициализацию (например, установить связь с теми или иными файлами с помощью процедуры Assign). Необходимые действия можно выполнить в секции инициализации модуля. Эта секция начинается, словом begin, после которого идут исполняемые операторы, а затем помещается слово end. Операторы секции инициализации выполняются единственный раз в момент запуска программы. Если инициализация модуля не нужна, то в секции помещается лишь слово end. Модуль, содержащий средства работы с комплексными числами:
unit Cmp; interface туре Complex=record{способ представления} Re,Im:real {комплексных чисел} end; {Заголовки процедур, реализуют операции над комплексными числами} procedure InitC (c:Complex;R,I:real); procedure AddC (c1,c2:Complex;var R:Complex); procedure MaltC (c1,c2:Complex;var R:Complex); procedure DivC (c1,c2:Complex;var R:Complex); procedure WriteC(c:Complex); implementation {полные описания процедур (с сокращенными заголовками)} procedure InitC; begin with c do begin Re:=R; Im:=I; end; end; procedure AddC; begin with R do begin Re:=c1.Re+c2.Re; Im:=c1.Im+c2.Im; end; end; procedure MaltC; begin with R do begin Re:=c1.Re*c2.Re+c1.Im*c2.Im; Im:=c1.Im*c2.Re+c1.Re*c2.Im; end; end; procedure DivC; var Tmp:real; begin with c2 do Tmp:=Re*Re+Im*Im; with R do begin Re:=(c1.Re*c2.Re+c1.Im*c2.Im)/Tmp; Im:=(c2.Re*c1.Re+c1.Re*c2.Im)/Tmp; end end; procedure WriteC; begin with c do begin write(Re); if Im=0 then exit; if Im<>0 then write('+'); write(Im); write('i'); end; end; end.
Program Complex; uses Cmp; var c1,c2,c3:Complex; begin InitC(1,2,c1); InitC(3,4,c2); MultC(c1,c2,c3); DiveC(c1,c2,c3); WriteC(c3); write(c3); end.
Модуль компилируется как обычный файл.Поскольку он не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением.tpu(Turbo Pascal unit). При этом имя файла берется из имени файла с исходным текстом модуля. Для того чтобы получить доступ к интерфейсным объектам модуля, необходимо указать в программе имя нужного tpu-файла. Конструкция имеет следующий общий вид: Uses v1, v2, v3; (v1, v2, v3-имена используемых модулей) Если некоторый модуль использует объекты другого модуля, то такие спецификаторы должны следовать сразу же после слова interface При решении реальных задач в среде Турбо Паскаль возможен случай нехватки основной памяти. Для преодоления этой трудности имеется механизм, который называется оверлейным. Его применение позволяет разрабатывать Паскаль-программы, размер которых больше размера основной памяти. Основным принципом оверлейного механизма является представление программы в виде отдельных блоков, которые по переменно могут занимать одну и ту же область основной памяти. При этом необходимый блок загружается в основную память, вытесняя оттуда ранее выполнявшийся блок. Оверлейный механизм достаточно широко распространен и применяется не только в Турбо Паскале. Оверлейная программа выполняется медленней, чем аналогичная неоверлейная, поскольку требуется время на загрузку и выгрузку отдельных блоков. Средства построения оверлейных программ в Турбо Паскале базируется на следующих основных принципах: 1) Оверлейная программа должна быть реализована следующим образом: во-первых, должна быть управляющая (резидентная) часть, которая постоянно находится в основной памяти, во вторых может быть несколько блоков, которые попеременно загружаются в специальный оверлейный буфер основной памяти. Размер оверлейного буфера, который выделяется по умолчанию может быть увеличен во время выполнения программы. 2) Оверлейные блоки должны быть оформлены в виде модулей, снабженных специальной директивой {$0+}. 3) Все средства управления оверлеями сосредоточены в стандартном модуле OVERLAY. Поэтому никаких специальных языковых конструкций оверлейный механизм не предусматривает. 4) При трансляции оверлейной программы компилятор Турбо Паскаля работает следующим образом: управляющая часть программы (неоверлейная) оформляется в виде еxe-файла, все оверлейные блоки, оформляются в виде одного файла с расширением OVR. Таким образом при компиляции все файлы собираются в один файл с расширением OVR. 5) Все обращения к оверлейным процедурам и функциям должны осуществляться по средствам дальнего типа вызова. Для этого подпрограммы или оверлейный модуль вцелом снабжаются специальной директивой F с которой они должны компилироваться {$F+}. Турбо Паскаль при отсутствии специальной директивы автоматически выбирает адресацию к подпрограмме. Если подпрограмма находится в одном файле с основной программой, то она компилируется с ближним адресом входа и возврата (near). Этот адрес состоит только из смещения в текущем сегменте. Если подпрограмма находится в модуле (unit), то она компилируется с дальним адресом (far), который состоит из адреса сегмента и смещения. Если требуется нестандартная компиляция, то есть размещение подпрограммы, которая находится в одном файле с основной программой то используется директива F+. 6) Основная часть (управляющая) оверлейной программы должна содержать предложение USES, в котором перечисляются используемые оверлейные модули. В этом же предложении могут быть указаны так же и не оверлейные модули. Но первым в этом предложении обязательно должен быть указан модуль OVERLAY. Вслед за предложением USES должны размещаться директивы компилятора, которые указывают, какие модули в предложении USES являются оверлейными. Каждая такая директива имеет вид {$0 имя модуля} имя модуля должно совпадать с именем дискового файла, в котором находится оверлейный модуль. 7) В теле управляющей программы перед первым обращением к какой-либо оверлейной подпрограмме должен быть вызов стандартной процедуры OVRInit из модуля OVERLAY. Эта процедура инициализирует систему управления оверлеями. У этой процедуры всего один параметр, который является строкой с именем того файла, в котором собраны коды оверлейных модулей. Например: Составить программу с оверлейной структурой, состоящей из управляющей части с именем PrimOVR и двух оверлейных модулей ModOVR1, ModOVR2 каждый из которых содержит по одной процедуре вывода текстовой информации. {$F+,0+}; Program PrimOVR; Uses Overlay,printer,ModOVR1, ModOvr2$ {$0 ModOVR1}; {$0 ModOVR2}; BEGIN OVRInit (‘PrimOVR.OVR’); Vivod 1; Vivod 2; END.
Далее запишем модули Unit каждый из которых содержит по одной процедуре.
{$0+,F+}; Unit ModOVR1; interface procedure vivod 1; inplementation procedure vivod 1; BEGIN Writeln(‘ Модуль 1’); END; END;
{$0+,F+}; Unit ModOVR 2; interface procedure vivod 2; inplementation procedure vivod 2; BEGIN Writeln(‘Модуль 2 ’); END; END.
Дата добавления: 2014-01-04; Просмотров: 560; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |