Выражения и операторы

1. Выражения

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

Описание Примеры Тип выражения Типы операндов
Имя переменной 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 (низший) =   <>   <   >   <=   >=

Задание. Напишите ещё примеры выражений.

2. Типы данных

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

Характеристики некоторых встроенных типов зависят от реализации компилятора. Такие типы называются обобщёнными, в отличие от типов, независящих от реализации компилятора, которые называются фундаментальными. Использование обобщённых типов приводит к оптимальному использованию ресурсов компьютера.

3. Простые типы

Простые типы определяют упорядоченные множества значений.

3.1. Перечисляемые (порядковые) типы

Перечисляемый тип – это упорядоченное множество значений, при этом каждое значение, кроме первого, имеет уникального предшественника, а каждое значение, кроме последнего, – уникального преемника. Кроме того, каждое значение имеет порядковый номер:

Существует несколько полезных функций.

Функция Описание
Ord Возвращает порядковый номер выражения
Pred Возвращает предшественника выражения
Succ Возвращает преемника выражения
Low Возвращает минимальное значение типа
High Возвращает максимальное значение типа

3.1.1. Целые типы

Целые типы используются для хранения подмножества целых чисел.

Тип Описание Диапазон
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.

3.1.2. Символьные типы

Символьные типы используются для хранения в переменной одного символа. Существуют два фундаментальных типа – AnsiChar и WideChar и один обобщённый тип – Char.

Фундаментальный тип AnsiChar имеет размер 1 байт и используется для хранения символов кодовой таблицы ANSI. Фундаментальный тип WideChar имеет размер 2 байта и используется для хранения символов кодовой таблицы Unicode.

Обобщённый тип Char в данный момент соответствует фундаментальному типу AnsiChar, но в ближайшее время будет изменён таким образом, чтобы соответствовать фундаментальному типу WideChar.

Порядковые номера символов, которые можно получить с помощью функции Ord, начинаются с 0. Противоположная функция Chr возвращает символ, порядковый номер (код), которого равен заданному числу. Значения символьных типов, также как и значения целых типов, перескакивают от максимального к минимальному и, наоборот, при прибавлении/вычитании 1.

3.1.3. Логический тип

Логический тип Boolean имеет размер 1 байт и предназначен для хранения логических значений true и false. Значения логического типа обладают следующими свойствами:

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

3.1.4. Перечислимый тип

Перечислимый тип определяет упорядоченное множество значений путём простого перечисления идентификаторов, которые обозначают эти значения. Идентификаторы перечисляются в скобках через запятую, например: (ONE, TWO, FREE). Идентификаторы значений перечислимого типа должны отличаться от всех других идентификаторов программы, а также от зарезервированных слов.

Порядковые номера значений перечислимого типа по умолчанию начинаются с 0, и каждый следующий идентификатор имеет номер на 1 больший, чем предыдущий. Поведение по умолчанию можно изменить, явно задав одному или нескольким идентификаторам порядковый номер, например: (ONE = 1, TWO, FREE).

3.1.5. Тип-диапазон

Тип-диапазон представляет собой подмножество значений другого порядкового типа, называемого базовым типом. Любая конструкция вида Low..High, где Low и High являются константами одного и того же порядкового типа и Low < High, определяет тип-диапазон, который включает все значения от Low до High включительно, например: 0..9 или '0'..'9'.

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

3.2. Вещественные типы

Вещественные типы представляют множества чисел с плавающей запятой.

Тип Описание Значащих цифр Диапазон
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

 

Сравнивать можно значения сопоставимых типов, а именно:

4. Операторы

Операторы определяют действия, выполняемые в программе. В языке Паскаль существуют следующие операторы:

Также оператором является вызов процедуры. Пока будем рассматривать эту разновидность оператора на примере стандартных процедур ввода и вывода.

Задание. Какие именно действия выполняют вышеперечисленные операторы?

Задание. Где в вышеперечисленных операторах присутствуют выражения? Какой тип должны иметь эти выражения?