Программа на DelphiРефераты >> Программирование и компьютеры >> Программа на Delphi
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
Операция |
Наименование |
Приоритет |
+ - * / div mod |
Сложение Вычитание Умножение Деление Деление нацело Остаток от деления |
2 2 1 1 1 1 |