Выражение – это конструкция, которая возвращает значение. Выражение всегда имеет некоторый тип. Этот тип может совпадать с типом операндов выражения, а может и не совпадать. Возможные выражения представлены в таблице.
Описание | Примеры | Тип выражения | Типы операндов |
---|---|---|---|
Имя переменной | x | Совпадает с типом переменной | – |
Литерал | -8 25.5 '?' |
Зависит от формы литерала | – |
Вызов функции | sin(x) f(x, y) |
Зависит от типа функции | Зависит от функции |
Арифметическое выражение | a + b 2 * sin(x) – x |
Целый или вещественный | Целые или вещественные |
Выражения отношения | x = y a > 0 |
Логический | Операнды должны иметь сопоставимые типы |
Логические выражения | not f (a < b) and (b < c) |
Логический | Логический |
Индексное выражение | a[i] a[i, j] |
Зависит от типа элементов массива | Индексы должны быть выражениями целого типа |
Приоритет операций определяет порядок вычисления операций в сложных выражениях. Операции одного приоритета вычисляются слева направо.
Приоритет | Операции |
---|---|
1 (высший) | not |
2 | * / div mod and |
3 | + - or xor |
4 (низший) | = <> < > <= >= |
Задание. Напишите ещё примеры выражений.
Функция возвращает значение, тип которого не зависит от типа операндов. Например, функция может получать число или массив, а возвращать логическое значение. Логические выражения получают и возвращают значения логического типа. Арифметические выражения получают и возвращают числа (целые и вещественные). Если в операции участвуют целое и вещественное числа, получается вещественный результат. Для операций отношения операнды должны иметь сопоставимые типы. Для того, чтобы понять какие типы являются сопоставимыми, вспомним классификацию встроенных типов языка Паскаль:
Характеристики некоторых встроенных типов зависят от реализации компилятора. Такие типы называются обобщёнными, в отличие от типов, независящих от реализации компилятора, которые называются фундаментальными. Использование обобщённых типов приводит к оптимальному использованию ресурсов компьютера.
Простые типы определяют упорядоченные множества значений.
Перечисляемый тип – это упорядоченное множество значений, при этом каждое значение, кроме первого, имеет уникального предшественника, а каждое значение, кроме последнего, – уникального преемника. Кроме того, каждое значение имеет порядковый номер:
Существует несколько полезных функций.
Функция | Описание |
---|---|
Ord | Возвращает порядковый номер выражения |
Pred | Возвращает предшественника выражения |
Succ | Возвращает преемника выражения |
Low | Возвращает минимальное значение типа |
High | Возвращает максимальное значение типа |
Целые типы используются для хранения подмножества целых чисел.
Тип | Описание | Диапазон |
---|---|---|
Shortint | Знаковый тип размером 1 байт | -128..127 |
Smallint | Знаковый тип размером 2 байта | -32768..32767 |
Integer | Знаковый обобщённый тип (4 байта) | |
Longint | Знаковый тип размером 4 байта | -2147483648..2147483647 |
Int64 | Знаковый тип размером 8 байт | -263..263 – 1 |
Byte | Беззнаковый тип размером 1 байт | 0..255 |
Word | Беззнаковый тип размером 2 байта | 0..65535 |
Longword | Беззнаковый тип размером 4 байта | 0..4294967295 |
Cardinal | Беззнаковый обобщённый тип (4 байта) |
Целые типы обладают следующим свойством: когда к максимальному значению прибавляется 1, получается минимальное значение, а когда из минимального значения вычитается 1, получается максимальное значение. Например, для типа shortint -128 – 1 = 127, а для типа byte 255 + 1 = 0.
Символьные типы используются для хранения в переменной одного символа. Существуют два фундаментальных типа – AnsiChar и WideChar и один обобщённый тип – Char.
Фундаментальный тип AnsiChar имеет размер 1 байт и используется для хранения символов кодовой таблицы ANSI. Фундаментальный тип WideChar имеет размер 2 байта и используется для хранения символов кодовой таблицы Unicode.
Обобщённый тип Char в данный момент соответствует фундаментальному типу AnsiChar, но в ближайшее время будет изменён таким образом, чтобы соответствовать фундаментальному типу WideChar.
Порядковые номера символов, которые можно получить с помощью функции Ord, начинаются с 0. Противоположная функция Chr возвращает символ, порядковый номер (код), которого равен заданному числу. Значения символьных типов, также как и значения целых типов, перескакивают от максимального к минимальному и, наоборот, при прибавлении/вычитании 1.
Логический тип Boolean имеет размер 1 байт и предназначен для хранения логических значений true и false. Значения логического типа обладают следующими свойствами:
Переменные логического типа используются для хранения состояний каких-либо объектов, при проверке сложных условий и т.п.
Перечислимый тип определяет упорядоченное множество значений путём простого перечисления идентификаторов, которые обозначают эти значения. Идентификаторы перечисляются в скобках через запятую, например: (ONE, TWO, FREE). Идентификаторы значений перечислимого типа должны отличаться от всех других идентификаторов программы, а также от зарезервированных слов.
Порядковые номера значений перечислимого типа по умолчанию начинаются с 0, и каждый следующий идентификатор имеет номер на 1 больший, чем предыдущий. Поведение по умолчанию можно изменить, явно задав одному или нескольким идентификаторам порядковый номер, например: (ONE = 1, TWO, FREE).
Тип-диапазон представляет собой подмножество значений другого порядкового типа, называемого базовым типом. Любая конструкция вида Low..High, где Low и High являются константами одного и того же порядкового типа и Low < High, определяет тип-диапазон, который включает все значения от Low до High включительно, например: 0..9 или '0'..'9'.
Порядковые номера значений типа-диапазона совпадают с порядковыми номерами значений базового типами. При прибавлении 1 к максимальному значению типа-диапазона полученное значение не перескакивает к минимальному, а равняется следующему значению базового типа. Аналогично при вычитании 1 из минимального значения типа-диапазона получается на 1 меньшее значение базового типа. Однако попытка присвоить переменной, принадлежащей к типу-диапазону, значение, выходящее за указанный диапазон, приводит к сообщению об ошибке.
Вещественные типы представляют множества чисел с плавающей запятой.
Тип | Описание | Значащих цифр | Диапазон |
---|---|---|---|
Single | Фундаментальный тип размером 4 байта | 7-8 | -1.5 · 1045 .. 3.4 · 1038 |
Double | Фундаментальный тип размером 8 байт | 15-16 | -5.0 · 10324 .. 1.7 · 10308 |
Real | Обобщённый тип, совпадает с типом double | 15-16 | -5.0 · 10324 .. 1.7 · 10308 |
Extended | Фундаментальный тип размером 10 байт | 19-20 | -3.6 · 104951 .. 1.1 · 104932 |
Сравнивать можно значения сопоставимых типов, а именно:
Операторы определяют действия, выполняемые в программе. В языке Паскаль существуют следующие операторы:
Также оператором является вызов процедуры. Пока будем рассматривать эту разновидность оператора на примере стандартных процедур ввода и вывода.
Задание. Какие именно действия выполняют вышеперечисленные операторы?
Задание. Где в вышеперечисленных операторах присутствуют выражения? Какой тип должны иметь эти выражения?