Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инфа 2сем..docx
Скачиваний:
9
Добавлен:
23.09.2019
Размер:
98.9 Кб
Скачать

Пример.

Type

 

  ByteRec = record

 

    Lo, Hi: Byte

 

  end;

 

  WordRec = record

 

    Low, High: Word

 

  end;

 

  PtrRec = record

 

    Ofs, Seg: Word

 

  end;

 

  BytePtr = ^Byte;

 

Var

 

  В: Byte;

 

  W: Word;

 

  L: Longint;

 

P: Pointer;

 

begin

 

  W := $1234;

{присвоение переменной W значения}

  В := ByteRec(W).Lo;

{преобразование переменной типа Word в запись из двух байтов и выделение младшего байта}

  ByteRec(W).Hi := 0;

{преобразование переменной типа Word в запись из двух байтов и запись в старший байт значения 0}

  L := $01234567;

{присвоение переменной L значения}

  W := WordRec(L).Low;

{преобразование переменной типа Longint в запись из двух слов и выделение младшего слова}

  В := ByteRec(WordRec(L).Low).Hi;

{преобразование переменной типа Longint в запись из двух слов, выделение младшего слова, преобразование его в запись из двух байтов и выделение старшего байта}

  В := BytePtr(L)^;

{преобразование переменной типа Longint в указатель и получение значения параметра, на который он указывает}

  Р :=Ptr ($40,$49);

{Присвоение указателю Р значения с помощью стандартной функции Ptr}

  W := PtrRec(P).Seg;

{преобразование указателя в запись из двух слов и выделение второго слова (фактически адреса сегмента)}

  Inc(PtrRec(P).Ofs, 4);

{преобразование указателя в запись из двух слов, выделение первого слова (фактически смещения адреса) и увеличение его величины на 4 с помощью стандартной процедуры Inc}

end;

 

Такое преобразование возможно не только, когда исходный и окончательный типы имеют одинаковый размер. Оно возможно также в случае преобразования друг в друга двух порядковых типов, независимо от их размера, а также преобразования параметра без типа

20. Модули в Турбо Паскале( понятие модуля, особенности структуры модуля, средства связи модулей между собой и основной программой, преимущества и недостатки модульного программирования).

Модуль Паскаля – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части.

Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;

<имя_модуля> - имя модуля (правильный идентификатор);

INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;

IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;

BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;

END – зарезервированное слово – признак конца модуля.

Таким образом, модуль Паскаля состоит из заголовка и трех составных частей, любая из которых может быть пустой.

Имя модуля Паскаля служит для его связи с другими модулями и основной программой. USES – зарезервированное слово, после которого должен эти список запрашиваемых модулей. Если в Паскале модули используются, то предложение uses <список модулей> должно стоять сразу после заголовка программы , т.е. должно открывать раздел описаний основной программы. В модулях Паскаля могут использоваться другие модули. В модулях предложение uses <список модулей> может стоять сразу после слова interface или сразу после слова implementation . Допускается и два предложения uses , т.е. оно может стоять и там, и там.

Преимущества и недостатки:

  1. Компиляция

21. Назначения и особенности построения интерфейсной части модуля в Турбо Паскале. Интерфейсная часть открывается зарезервированным словом INTERFACE . В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны быть доступны основной программе и (или) другим модулям Паскаля. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок. объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией с использованием дальней модели памяти. Таким образом, обеспечивается доступ к подпрограммам из основной программы и других модулей Паскаля. Следует учесть, что все константы и переменные, объявленные в интерфейсной части модуля Паскаля, равно как и глобальные константы и переменные основной программы, помещаются компилятором Турбо Паскаля в общий сегмент данных (максимальная длина сегмента 65536 байт). Порядок появления различных разделов объявлений и их количество может быть произвольным. Если в интерфейсной части объявляются внешние подпрограммы или подпрограммы в машинных кодах, их тела должны следовать сразу за их заголовками в исполняемой части модуля. В интерфейсной части модулей Паскаля нельзя использовать опережающее описание.

22. Назначение и особенности исполняющей и инициирующей частей модуля в Турбо Паскале.

Исполняемая часть модуля Паскаля начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и блоки, а также метки.

Описанию подпрограммы, объявленной в интерфейсной части модуля Паскаля, в исполняемой части должен предшествовать заголовок, в котором можно опустить список формальных параметров и тип результата для функции, так как они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком параметров и объявлением типа результата для функции, то он должен полностью совпадать с заголовком подпрограммы в интерфейсной части. Инициирующая часть завершает модуль Паскаля. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой – тогда вслед за BEGIN сразу следует признак конца модуля.

В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы.