Программа на Delphi
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. Совместимость по вычислению
Вычисление выражений возможно только при соблюдении следующих условий.
1. Типы операций и операндов эквивалентны.
Например, нельзя применять арифметические операции к логическим
переменным и, наоборот, логические операции – к арифметическим
переменным:
Type
R1, R2 : Real;
L1, L2 : Integer;
B1, B2: boolean;
...
Not (R1 + R2) B1 + B2 'Иванов' + ' ' + 'Петр' {недопустимые выражения}
2. Типы операндов эквивалентны.
3. Типы операндов целые или вещественные, например:
R1 + R2 L1 + R2 L2 / R1 / L1 {допустимые выражения}
4. Один тип является базовым, а второй – ограниченным типом этого же
базового типа.
Type
L11, L12 : Integer;
K : -199 .. 199;
1. Типы являются множествами, причем их базовые типы совместимы.
Type
L : set of 21 .. 2141;
K : set of -199 .. 199;
1. Один тип является строковым, а другой – также строковым либо
символьным.
Type
L : String [34]; Q : String [23]; K: Char;
2. Один тип является ссылочным, а другой – также ссылочным либо
безтиповым указателем.
3. Оба типа являются упакованными символьными массивами с одинаковым
числом элементов.
4. Один тип является строковым, а другой – также строковым типом, либо
упакованным символьным массивом, либо символьным типом.
5. Один имеет тип Variant, а другой – тип integer, real, string,
character или Boolean.
6. Оба типа операндов являются процедурными типами с одинаковым
количеством параметров и идентичными порядковыми типами этих
параметров. Для функций должны быть идентичны и типы результата.
8.2. Совместимость по присваиванию
Оператор присваивания считается корректным, если тип переменной,
расположенной в его левой части, совместим с типом выражения, располо-
женного в правой части. Выражение T2 может быть присвоено переменной T1,
если будут соблюдены следующие условия.
1. Оба типа T1 и Т2 идентичны. Недопустимо присваивание файловых типов
или структур, содержащих файловые типы (о файловых типах подробнее см.
гл. 17).
2. T1 и Т2 имеют совместимые простые типы.
3. T1 и Т2 имеют вещественные типы.
4. T1 и Т2 имеют целые типы.
5. T1 и Т2 имеет тип PChar или другой строковый тип, и выражение
представляет строковую константу.
6. T1 и Т2 имеют строковые типы.
7. T1 имеет строковый тип, а Т2 – символ или упакованная строка.
8. T1 – длинная строка, а Т2 имеет тип PChar.
9. T1 и Т2 имеют совместимые типы упакованных строк.
10. .T1 и Т2 имеют совместимые множественные типы.
11. .T1 и Т2 имеют совместимые Pointer-типы.
12. .T1 имеет тип PChar или PWideChar, а T2 есть символьный массив вида
array[0 .. n] of Char.
13. .T1 и T2 имеют совместимые процедурные типы.
14. .T1 имеет тип Variant, а T2 – один из типов integer, real, string,
character или Boolean.
15. .T1 имеет тип integer, real, string, character или Boolean, а Т2 – тип
Variant.
9. Выражения
Вычислительная система выполняет вычислительные и управляющие операции по
командам, которые представлены в программе с помощью операторов.
Большинство таких операторов строится с использованием выражений, которые в
практике программирования играют большую роль, определяя способ и порядок
преобразования данных. Выражения состоят из операндов (значений, констант,
переменных, функций), соединенных с помощью операций. Для изменения порядка
выполнения операций могут быть использованы круглые скобки. Наиболее важную
роль играют арифметические, логические и строковые выражения.
9.1. Арифметические выражения
При описании арифметических выражений для простоты типом Integer обозначен
любой целый тип, а типом Real – любой вещественный тип. Выражение строится
с помощью арифметических значений, констант, переменных, функций,
арифметических операций. В выражениях можно применять круглые открывающие и
закрывающие скобки. При этом количество открывающих скобок должно быть
равно количеству закрывающих скобок.
При вычислении выражения операции выполняются в строго определенной
последовательности в соответствии с их приоритетом. Порядок выполнения
операций можно изменить применением блоков, включающих подвыражения,
заключенные в круглые скобки.
В языке Object Pascal существует шесть арифметических операций. Учитывая,
что арифметические операции образуют подмножество множества всех операций
языка, в табл. 7 показано абсолютное значение приоритета каждой операции.
Таблица 7
|Операция |Наименование |Приоритет |
|+ |Сложение |2 |
|- |Вычитание |2 |
|* |Умножение |1 |
|/ |Деление |1 |
|div |Деление нацело |1 |
|mod |Остаток от деления |1 |
При вычислении выражения его тип определяется типами операндов. Операндом
называется любая компонента, к которой применяется операция. Операндом
может быть, например, значение, константа, переменная или выражение,
заключенное в скобки. Типы элементарных выражений показаны в табл. 8.
Таблица 8
|Операция|Тип операндов |Тип результата |Пример |
|+ |Integer, real |integer, real |X + Y |
|– |Integer, real |integer, real |Result - 1 |
|* |Integer, real |integer, real |P * InterestRate |
|/ |Integer, real |real |X / 2 |
|div |Integer |integer |Total div UnitSize |
|mod |Integer |integer |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 |Отрицание |3 |
|And |Конъюнкция |4 |
|Or |Дизъюнкция |5 |
|Xor |Спец. дизъюнкция |6 |
Значения элементарных логических выражений, поясняющих назначе-ние этих
операций, приведены в табл. 10.
Таблица 10
|A |B |not A |A and B|A or B|A xor B|
|True |True |False |True |True |False |
|True |False |False |False |True |True |
|False |True |True |False |True |True |
|False |False |True |False |False |False |
В табл. 11 представлены логические отношения.
Таблица 11
|Отношение |Наименование |
|> |Больше |
|< |Меньше |
|>= |Больше или равно |
|<= |Меньше или равно |
|= |Равно |
|<> |Не равно |
Все отношения равноприоритетны.
Порядок выполнения операций при вычислении логического выра-жения
следующий:
. сначала вычисляются арифметические выражения;
. затем – отношения;
. в последнюю очередь вычисляются логические операции.
Примеры (для x=12, z = 0, y=1):
Таблица 12
|Выражение |Результат |
|5 >
| | скачать работу |
Программа на Delphi |