Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 1).doc
Скачиваний:
102
Добавлен:
15.04.2015
Размер:
1.69 Mб
Скачать

8.2.2. Неявное преобразование типов

Это преобразование типа происходит без явного указания на его необходимость. Преобразование происходит в следующих случаях:

  1. При выполнении арифметических операций над целочисленными операндами преобразование происходит к т.н. общему типу в бинарных операциях.

  2. В арифметических операциях смешаны целые и вещественные. Происходит преобразования целых в вещественные.

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

Совмещение данных в памяти может произойти при использовании записей с вариантными полями, типизированных указателей, содержащих одинаковый адрес, а также при явном размещении данных разного типа по одному и тому же абсолютному адресу. Для размещения переменной по нужному абсолютному адресу она описыва­ется с последующим зарезервированным словом ABSOLUTE, за которым помещается либо абсолютный адрес, либо идентификатор ранее опреде­ленной переменной. Абсолютный адрес указывается парой чисел типа WORD, разделенных двоеточием; первое число трактуется как сегмент, второе - как смещение адреса . Например:

b : byte absolute $0000:$0055;

w : longlnt absolute $128:$0;

Если за словом ABSOLUTE указан идентификатор ранее определен­ной переменной, то происходит совмещение в памяти данных разного типа, причем первые байты внутреннего представления этих данных бу­дут располагаться по одному и тому же абсолютному адресу, например:

var

х : word;

у : word absolute x;

x и y – разные идентификаторы одного и того же значения. Изменение х равносильно изменению у, т.к. х и у находятся в одной ячейке памяти.

Формально размеры совмещаемых переменных не обязательно должны быть одинаковыми. Совмещение по имени переменной – это по сути, совмещение их начал. Поэтому можно использовать следующий прием:

var

st : string[30];

srlen : byte absolute st;

Однако не рекомендуется совмещать большую по длине переменную с меньшей:

var

srlen : byte;

sr : string absolute stlen;

Изменение st изменит не только stlen, но и значения тех переменных, которые будут объявляться после st.

9. Выражения в языке Паскаль

Выражение — это правило вычисления значения. В выражении участвуют опе­ранды, объединенные знаками операций. Операндами выражения могут быть константы, переменные и вызовы функций. Операции выполняются в опреде­ленном порядке в соответствии с приоритетами, как и в математике. Для изме­нения порядка выполнения операций используются круглые скобки, уровень их вложенности практически не ограничен.

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

Ниже приведены операции Паскаля, упорядоченные по убыванию приоритетов.

1. Унарная операция not, унарный минус -, взятие адреса @.

2. Операции типа умножения: *, /, div, mod, and, shl, shr.

3. Операции типа сложения: +, -, or, xor.

4. Операции отношения: =, <, >, <>, <=, >=, in.

Функции, используемые в выражении, вычисляются в первую очередь.

Внимание. Константа и переменная являются частными случаями выражения.

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

В арифметических выражениях используются в качестве операндов числа или символьные значения переменных и результатом является целое или вещественное число:

x + 4 - Sin(x);

где x - переменная, 4 - константа, Sin -вызов функции.

Логические выражения строятся с помощью логических переменных (констант) и логических операций, которые возвращают логические значения (операции отношения). Знаки операций логические или операции отношений. Результата - логический.

ПРИМЕР логического выражения: (a>b) or false and (c>d).

В символьных выражениях операндами служат строки. Единственная разрешенная операция – конкатенация строк.

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

ПРИМЕР.

(1>2) and ((c>d) or (a<b)). - false.

При вычислении значения этого выражения по короткой схеме с самого начала ясно, какой результат имеет значение выражения (False).

Для выбора схем используется директива:

{$B+} -по полной схеме

{$B-} - по короткой схеме (по умолчанию).

Также можно установить флажок Complete Boolean evail, расположенного в окне настроек компилятора, Options  Compiler.