<имя множества> : Set of <базовый тип >;
В соответствии с вышеописанными типами можно объявить множества:
Var Set1, Set2: TIntSet;
а затем в операторной части задать эти множества:
...
Set1 := [1, 3, 5, 7, 9];
Set2 := [2, 4, 6, 8, 10];
Можно объявить множество явно, перечислив его элементы:
Var
MySet1 : set of 'a' .. 'z';
MySet2 : set of Byte
MySet3 : set of (Club, Diamond, Heart, Spade)
MySet4 : set of Char;
...
MySet 1:= ['a','b','c']; {оператор определения множества}
Операции над множествами. Допустимые операции над множествами приведены в следующей табл. 6:
Таблица 6
Опера-ция | Наименование операции | Тип операндов | Тип результата | Пример |
+–*<=>==<> in | Объединение ВычитаниеПересечениеНе меньшеНе большеРавенствоНеравенствоПринадлежание | setsetsetsetsetsetsetэлемент set | setsetsetbooleanboolean booleanbooleanboolean | Set1 + Set2S - TS * TQ <= MySetS1 >= S2S2 = MySetMySet <> S1A in Set1 |
Объединение, вычитание и пересечение множеств.
Результатом любой из операций будет также множество.
Пример:
Var
S1, S2,S3 : set of Byte;
...
S1:= [1, 2 , 3, 4]; {оператор определения множества}
S2:= [3, 4, 5, 6, 78]; {оператор определения множества}
S3:= S1 + S2; {объединение множеств}
{результат S3 = [1, 2, 3, 4, 5, 6, 78] }
S3:= S2 - S1; {вычитание множеств}
{результат S3 = [1, 2, 5, 6, 78] }
S3:= S2 * S1; {пересечение множеств}
{результат S3 = [3, 4] }
Операции сравнения множеств.
Результатом любой из операций будет логическая константа True (истина) или False (ложь).
Пример:
Var
S1, S2, S3 : set of Byte;
B: boolean;
...
S1:= [3, 4]; {оператор определения множества}
S2:= [1, 3, 4]; {оператор определения множества}
S3:= [3, 4, 5, 6, 78]; {оператор определения множества}
B:= S1 <= S3; {True, т. к. S1 является подмножеством S3}
B:= S3 >= S2; {False, т. к. S2 не является подмножеством S2}
B:= S3 = S2; {False, т. к. мн-ва S2 и S3 не равны друг другу }
B:= S3 <> S2; {True, т. к. мн-ва S2 и S3 не равны друг другу }
Проверка вхождения элемента во множество. Результатом операции in будет логическая константа True (истина) или False (ложь). Пример:
Var
S1 : set of Integer;
B: boolean;
...
S1:= [3, 4, 18 .. 178, 3101, 4427]; {оператор определения множества}
B:= ( 4 in S1); {True, т. к. 4 является элементом множества S1}
B:= (200 in S1); {False, т. к. 200 не является элементом S1}
7.4. Файловые типы
В языке Object Pascal есть три типа файлов:
текстовые файлы,
файлы с типом,
файлы без типа.
Связь с файлом может быть установлена через файловую переменную, которая после описания, но до использования в программе должна быть связана с внешним файлом с помощью процедуры AssignFile.
Текстовой файл – это последовательность символьных строк перемен-ной длины. Всякая такая строка завершается маркером конца строки CR/LF. Текстовые файлы можно обрабатывать только последовательно. Ввод и вывод нельзя производить для открытого файла, используя одну файловую переменную. Текстовой файл имеет тип TextFile, или просто Text. Пример описания файловой переменной текстового типа:
Var Fi: TextFile;
Файлы без типа состоят из компонент одинакового размера, структура которых не известна или не имеет значения. Допустим прямой доступ к любой компоненте файла. Пример объявления файловой переменной файла без типа:
Var F: File;
Файлы c типом состоят из однотипных компонент известной структуры. Допустим прямой доступ к любой компоненте файла. Пример объявления файловых переменных для файлов с типом:
Type
TRec = Record
A: Real;
B: Integer;
C: Char;
End;
Var
F : File of Real;
Q : File of String[100];
Fr: File of TRec;
В этом примере F объявлена как файловая переменная вещественного типа. Это означает, что компонентами файла могут быть только вещественные значения. Файловая переменная Q предназначена для доступа к файлам, которые состоят из символьных строк длины 100. Файловая переменная Fr предназначена для работы с файлами, которые состоят из записей типа TRec, объявленного в секции Type.
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
Операция | Наименование | Приоритет |
+-*/divmod | СложениеВычитаниеУмножениеДелениеДеление нацелоОстаток от деления | 221111 |
При вычислении выражения его тип определяется типами операндов. Операндом называется любая компонента, к которой применяется операция. Операндом может быть, например, значение, константа, переменная или выражение, заключенное в скобки. Типы элементарных выражений показаны в табл. 8.
Таблица 8
Операция | Тип операндов | Тип результата | Пример |
+–*/divmod | Integer, realInteger, realInteger, realInteger, realIntegerInteger | integer, realinteger, realinteger, realrealintegerinteger | X + YResult - 1P * InterestRateX / 2Total div UnitSizeY 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 (ложь).
Логическое выражение строится с помощью других выражений, (арифметических, строковых и др.), значений, констант, переменных, функций, логических операций и логических отношений.