8. Совместимость типов

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

Суть совместимости типов удобнее пояснить на примере простейших выражений, которые состоят из одного (для одноместных операций) или двух (для двухместных операций) компонент (операндов) и одной операции.

8.1. Совместимость по вычислению

Вычисление выражений возможно только при соблюдении следующих условий.

Типы операций и операндов эквивалентны.

Например, нельзя применять арифметические операции к логическим переменным и, наоборот, логические операции – к арифметическим переменным:

Type

R1, R2 : Real;

L1, L2 : Integer;

B1, B2: boolean;

...

Not (R1 + R2) B1 + B2 'Иванов' + ' ' + 'Петр' {недопустимые выражения}

Типы операндов эквивалентны.

Типы операндов целые или вещественные, например:

R1 + R2 L1 + R2 L2 / R1 / L1 {допустимые выражения}

Один тип является базовым, а второй – ограниченным типом этого же базового типа.

Type

L11, L12 : Integer;

K : -199 .. 199;

Типы являются множествами, причем их базовые типы совместимы.

Type

L : set of 21 .. 2141;

K : set of -199 .. 199;

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

Type

L : String [34]; Q : String [23]; K: Char;

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

Оба типа являются упакованными символьными массивами с одинаковым числом элементов.

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

Один имеет тип Variant, а другой – тип integer, real, string, character или Boolean.

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

8.2. Совместимость по присваиванию

Оператор присваивания считается корректным, если тип переменной, расположенной в его левой части, совместим с типом выражения, располо-женного в правой части. Выражение T2 может быть присвоено переменной T1, если будут соблюдены следующие условия.

Оба типа T1 и Т2 идентичны. Недопустимо присваивание файловых типов или структур, содержащих файловые типы (о файловых типах подробнее см. гл. 17).

T1 и Т2 имеют совместимые простые типы.

T1 и Т2 имеют вещественные типы.

T1 и Т2 имеют целые типы.

T1 и Т2 имеет тип PChar или другой строковый тип, и выражение представляет строковую константу.

T1 и Т2 имеют строковые типы.

T1 имеет строковый тип, а Т2 – символ или упакованная строка.

T1 – длинная строка, а Т2 имеет тип PChar.

T1 и Т2 имеют совместимые типы упакованных строк.

.T1 и Т2 имеют совместимые множественные типы.

.T1 и Т2 имеют совместимые Pointer-типы.

.T1 имеет тип PChar или PWideChar, а T2 есть символьный массив вида array[0 .. n] of Char.

.T1 и T2 имеют совместимые процедурные типы.

.T1 имеет тип Variant, а T2 – один из типов integer, real, string, character или Boolean.

.T1 имеет тип integer, real, string, character или Boolean, а Т2 – тип Variant.

9. Выражения

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

9.1. Арифметические выражения

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

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

В языке Object Pascal существует шесть арифметических операций. Учитывая, что арифметические операции образуют подмножество множества всех операций языка, в табл. 7 показано абсолютное значение приоритета каждой операции.

Таблица 7

Операция Наименование Приоритет

+

-

*

/

div

mod

Сложение

Вычитание

Умножение

Деление

Деление нацело

Остаток от деления

2

2

1

1

1

1

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

Таблица 8

Операция Тип операндов Тип результата Пример

+

*

/

div

mod

Integer, real

Integer, real

Integer, real

Integer, real

Integer

Integer

integer, real

integer, real

integer, real

real

integer

integer

X + Y

Result - 1

P * InterestRate

X / 2

Total div UnitSize

Y mod 6

Примеры:

4*5 = 20, 6/5 = 1.2, 8+7 = 15, 7-3 = 4, 16 div 5 = 3, 16 mod 5 = 2.

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

Пример:

Выражение: 15 * ((25/5-5*9 + (j-8) * 7.55) / 8.67)
Порядок выполнения операций: 8 2 5 3 6 1 4 7

9.2. Логические выражения

Результатом вычисления логического выражения может быть одно из двух логических значений: True (истина ) или False (ложь).

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

В языке существует четыре логических операций. Приоритет операций показан в табл. 9.

Таблица 9

Операция Наименование Приоритет

Not

And

Or

Xor

Отрицание

Конъюнкция

Дизъюнкция

Спец. дизъюнкция

3

4

5

6

Значения элементарных логических выражений, поясняющих назначение этих операций, приведены в табл. 10.

Таблица 10

A B not A A and B A or B A xor B

True

True

False

False

True

False

True

False

False

False

True

True

True

False

False

False

True

True

True

False

False

True

True

False

В табл. 11 представлены логические отношения.

Таблица 11

Отношение Наименование

>

<

>=

<=

=

<>

Больше

Меньше

Больше или равно

Меньше или равно

Равно

Не равно

Все отношения равноприоритетны.

Порядок выполнения операций при вычислении логического выражения следующий:

сначала вычисляются арифметические выражения;

затем – отношения;

в последнюю очередь вычисляются логические операции.

Примеры (для x=12, z = 0, y=1):

Таблица 12

Выражение Результат

5 > 8

(5 < 3) and (z = 0)

((4 + 8) < 0) or not (y = 0)

not ((x < y) and (z > y))

('ab' = 'ac') and (x=z)

(4 in [ 2 .. 23 ])

True

False

True

True

False

True

Пример, демонстрирующий порядок выполнения операций при вычислении логического выражения:

Выражение:

Not ((x > 6 + 8 * 2) and (y < 7) or (z > 7)) and (x <> y)

Порядок: 9 3 2 1 6 4 7 5 10 8

9.3. Строковые выражения

Строковые выражения, частными случаями которых могут быть пустой символ '' или одиночный символ (например 'A'), строятся из строковых или символьных значений, констант, переменных и строковых функций при помощи строковой операции конкатенации (присоединения). Эта операция обозначена символом + (плюс). Скобки в строковых выражениях не применяются.

Пример:

Выражение: 'Object '+'Pascal '+' для Delphi'
Результат: 'Object Pascal для Delphi'

10. Операторы

Оператор – языковая конструкция, представляющая описание команды или комплекса команд по обработке и преобразованию данных.

Все операторы делятся на две части – простые операторы и структурные операторы.

11. Простые операторы

К их числу относятся: оператор присваивания, оператор безусловного перехода, составной оператор, оператор процедур, специальные операторы.

11.1. Оператор присваивания

В параграфе 1.4 было дано краткое определение этого оператора – одного самых простых и наиболее часто используемых операторов. Напомним, что его синтаксис имеет вид

x := y;

где x – имя переменной или функции; y – совместимое по типу выражение (о совместимости типов см. гл. 8). Символы ":=" обозначают операцию присваивания, в соответствии с которой вычисленное значение выражения y присваивается переменной x.

Примеры операторов присваивания (комментарии показывают присвоенные значения):

Var

Ch: Char;

S: String[5];

Q: String[18];

L, J: Integer;

P: Byte;

R: Real;

B: Boolean;

Rec: Record

 A: Word;

 B: String[20];

 End;

Таблица 13

Оператор присваивания Значение

Q:= 'd:\Dir1\Word\a.txt';

S:= Q;

Q:= S+'r\';

Ch:=Q[2];

L:= 450;

P:= L;

J:= 100;

R:= -L / J;

J:=-L / J;

J:=-L - 200;

B:= J > L;

B:= (J < L) and (Q[5] = 'i');

Rec.A:= J-20;

Rec.B:= 20;

Rec.B:= S[1]+S[3]+'\d';

'd:\Dir1\Word\a.txt'

'd:\Di'

'd:\Dir\'

':'

450

Ошибка, т. к. max P = 255

100

-4.5

Ошибка. Несоответствие типов

250

False

True

230

Ошибка. Несоответствие типов

'd\\d'

 


Информация о работе «Object Pascal»
Раздел: Информатика, программирование
Количество знаков с пробелами: 162712
Количество таблиц: 21
Количество изображений: 0

Похожие работы

Скачать
49877
5
0

... в среде Delphi). Задачи использовались как с данного сайта, так и из других источников – книг и семинарских занятиях по информатике в МГОУ. Курс завершается разработкой игры. Программное обеспечение: свободно распространяемая версия объектно-ориентированной среды программирования Delphi. Методы обучения: метод проектов, лекции, проблемный метод, частично-поисковый метод. Контроль знаний и умений ...

Скачать
17314
1
5

... // ... if(condition1) { j = 4; goto label1; } // ... for(j = 0; j < 10; j++) { // ... label1: // ... if(condition2) { i = 6; goto label2; } } // ... label2: // ... } 2.2       Разработка программы В среде программирования Borland Delphi создадим новое приложение (пункт меню File New Application). ...

Скачать
27554
2
0

... так называемые указатели. Указатель - это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, ShortInt, Boolean) занимают во внутреннем представлении один байт, остальные - несколько смежных. Поэтому на самом деле указатель адресует ...

Скачать
62207
3
0

... групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы с четным количеством символов. Лабораторная работа №6 Программирование АЛГОРИТМОВ с использованием записей Цель лабораторной работы: создать приложение, в котором используются данные типа запись. 6.1.Пример создания приложения Задание: создать Windows-приложение для ...

0 комментариев


Наверх