Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / tp3 / tp3 / 6.doc
Скачиваний:
24
Добавлен:
10.12.2013
Размер:
110.59 Кб
Скачать

In Элемент Левый операнд: любой Булевский

множества перечислимый тип t;

правый: множество,

совместимое с t.

───────────────────────────────────────────────────────────

Сравнение простых типов

Когда операции =, <>, <, >, >= или <= применяются для операндов простых типов, то это должны быть совместимые типы. Однако, если один операнд имеет вещественный тип, то другой может быть целого типа.

Сравнение строк

Операции отношения =, <>, <, >, >= или <= могут применятся для сравнения строк согласно порядку расширенного набора символов кода ASСII. Любые два значения строковых данных можно сравнить, поскольку все значения строковых данных совместимы.

Значения символьного типа совместимы со значениями строкового типа, и при их сравнении символьное значение обрабатывается как строковое значение с длиной 1. Когда со значением строкового типа сравнивается упакованное строковое значение из N элементов, то оно обрабатывается, как значение строкового типа длиной N.

Сравнение упакованных строк

Операции отношения =, <>, <, >, >= или <= могут применятся также для двух упакованных значений строкового типа, если они содержат одинаковое число элементов. Если число элементов равно n, то операция соотвествует сравнению двух строк, каждая из которых имеет длину n.

Сравнение указателей

Операции = и <> могут использоваться для сравнения операндов типа указатель. Два указателя равны только в том случае, если они ссылаются на один и тот же объект.

При сравнении указателей в Турбо Паскале просто сравниваются сегменты и смещения. В соответствии со схемой размещения сегментов процессоров 80х86 два логически различных указателя могут фактически указывать на одну и ту же физическую ячейку памяти. Например $0040:$0049 и $0000:$ 0449 являются указателями с одинаковыми физическими адресами. Указатели, возвращаемые стандартными процедурами New и GetMem всегда нормализованы (смещение находится в диапазоне от $0000 до $000F) и, таким образом, всегда будут сравниваться корректно. При создании указателей с помощью стандартной функции Рtr, и последующем сравнении таких указателей нужно принимать во внимание указанный особый случай.

Сравнение указателей на символы

Расширенный синтаксис (разрешенный по директиве компилятора {$X+}) позволяет применять операции <, >, <= и <= к значениям PChar. Заметим, однако, что при таких проверках предполагается, что два сравниваемых указателя указывают на один и тот же массив символов. По этой причине сравниваются только смещения указателей. Если два указателя указывают на различные символьные массивы, то результат неопределен.

Сравнение множеств

Если операндами являются множества a и b, то при их сравнении получаются следующие результаты:

1. Выражение a=b истинно (= True) только когда a и b содержат одни и те же элементы, в противном случае a<>b.

2. Выражение a = b истинно, когда каждый элемент множества a является также элементом множества b.

3. Выражение a = b истинно, когда каждый элемент множества b является также элементом множества a.

Проверка на принадлежность к множеству

Операция in возвращает истинное значение (True), когда значение элемента перечислимого типа является элементом операнда множественного типа, в противном случае он возвращает значение False.

Операция @

С помощью операции @ можно создать указатель на переменную. В Таблице 6.9 показан операнд и типы результата.

Таблица 6.9 Операция создания указателя

──────────────────────────────────────────────────────────────

Операция Действие Типы операндов Тип результата

──────────────────────────────────────────────────────────────

@ Получение Ссылка на переменную, Указатель

указателя процедуру или (совместимый

идентификатор функции с nil)

──────────────────────────────────────────────────────────────

Операция @ является унарной операцией, в качестве операнда которой используется ссылка на переменную, процедура или идентификатор функции и операнду возвращается указатель. Тип этого значения является таким же, как тип указателя nil, и, таким образом, его можно присвоить любому указателю-переменной.

Примечание: При использовании операции @ с процедурными переменными используются специальные правила. Подробнее об этом рассказывается в разделе "Процедурные типы".

Использование операции @ для переменной

Использование операции @ для обычной переменной (не параметра) не вызывает никаких сложностей. Введем описания:

type

TwoChar = array[0..1] of char;

var

Int: integer;

TwoCharPtr: ^TwoChar;

тогда оператор:

TwoCharPtr := @Int;

приводит к тому, что TwoCharPtr для получения ссылки на TwoCharPtr^ становится повторной интерпретацией значения Int, как если бы оно было символьным массивом array[0..1].

Использование операции @ для параметра-значения

Использование операции @ для формального параметра-значения приводит к тому, что будет построен указатель, указывающий на ячейку стека, в которой содержится фактическое значение параметра. Предположим, что Fоо является формальным параметром-значением процедуры, а FооРtr^ является указателем-переменной. Если в процедуре выполняется операция:

FooPtr := @Foo;

то FооРtr^ будет ссылкой на значение Fоо. Однако, FооРtr^ не указывает на сам параметр Fоо, поскольку он указывает на значение Fоо, которое было взято из Fоо и сохранено в стеке.

Использование операции @ для параметра-переменной

Применение операции @ к параметру-переменной приведет к тому, что будет сформирован указатель на фактический параметр (указатель берется из стека). Предположим, что Оnе - параметр-переменная процедуры, Twо - переменная, передаваемая в процедуру в качестве фактического параметра- переменной Оnе, а ОnеPtr является указателем на переменную. Если в процедуре выполняется оператор:

OnePtr := @One;

то ОnеРtr является указателем на переменную Twо, а ОnеPtr^ - ссылка на саму переменную Twо.

Использование операции @ для процедуры или функции

Вы можете применять операцию @ к процедуре или функции. При этом вы получите указатель на ее точку входа. В Турбо Паскале не предусмотрен механизм для использования такого указателя. Единственным применением указателя процедуры может быть передача его программе на языке Ассемблера для использования в операторе.

Испольование операции @ для метода

Для получения указателя на точку входа в метод допускается применение операции @ к уточненному идентификатору метода.

Вызовы функции

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

Если в соответствующем описании функции содержится список формальных параметров то в вызове функции должен содержаться список фактических параметров. Каждый параметр подставляется вместо соответствующего формального параметра в соответствии с набором правил, который вводится в Главе 19 ("Вопросы ввода и вывода").

┌───────────────────────┐

вызов функции ──│ идентификатор функции │─┬───────────────────

└───────────────────────┘ │ ‑

┌─────┘ │

│ │

│ ┌──────────────┐ │

│ │ список │ │

└│ фактических ├──┘

│ параметров │

└──────────────┘

╒═══╕ ┌──────────────────────┐ ╒═══╕

список ────│ ( ├──│ фактический параметр ├─┬│ ) ├──────

фактических ╘═══╛ ‑ └──────────────────────┘ │ ╘═══╛

параметров │ ╒═══╕ │

└─────────┤ , │───────────┘

╘═══╛

┌───────────┐

фактический параметр ─┬─│ выражение ├─────────────────────────

│ └───────────┘ ‑

│ │

│ ┌──────────────────────┐ │

└──│ ссылка на переменную ├─┘

└──────────────────────┘

Приведем некоторые примеры вызовов функций:

Sum(A,63)

Maximum(147,J)

Sin(X+Y)

Eof(F)

Соседние файлы в папке tp3