Арифметические
выражения
Арифметические операции
выполняются над целыми и действительными числами. Результатом выполнения арифметического
выражения является также целое или действительное число.
В языке Object Pascal определены
арифметические операции над двумя операндами, которые приведены в табл. 3.1.
Таблица
3.1. Арифметические операции над двумя операндами
|
Знак операции |
Операция |
Типы операндов |
Тип результата |
Пример |
|
+ |
Сложение |
|
|
|
|
- |
Вычитание |
|
|
|
|
* |
Умножение |
|
|
|
|
/ |
Деление |
|
|
|
|
|
Целочисленное деление |
|
|
|
|
|
Целочисленный остаток
от деления |
|
|
|
Стоит сказать несколько
слов по поводу операций div и mod. Результатом целочисленного
деления X div Y будет результат деления X/Y,
округленный в сторону нуля до ближайшего целого числа.
Результатом операции mod
будет остаток от целочисленного деления операндов. Таким образом, выражение
X mod Y эквивалентно выражению X - (X div Y) *Y. Например,
результатом выражения 4 div 2 будет 0, а результатом
выражения 9 div 4 будет 1.
В табл. 3.2 приведены операции,
осуществляемые над одним операндом.
Таблица
3.2. Арифметические операции над одним операндом
|
Знак операции |
Операция |
Тип операнда |
Тип результата |
Пример |
|
+ |
Сохранение знака
числа |
|
|
|
|
- |
Отрицание знака
числа |
|
|
|
Приведем примеры использования
арифметических операций с одним и двумя операндами (листинг 3.1).
Листинг 3.1. Примеры
использования арифметических операций
varа, b, с, d: Integer; // Объявляем четыре целочисленных переменныхbegina:=7; b:=5; c:=-10; // Присваиваем трем из них начальные значения
d:=a+b; // Результатом будет число 12
d:=-d; // Результатом будет число -12
d:=d+c; // Результатом будет число -22
d:=d div с; // Результатом будет число 2d:=a mod b; // Результатом будет число 2 end;
Кроме вышеперечисленных
операций, над целочисленными данными можно производить поразрядные операции,
представленные в табл. 3.3. Особенностью этих арифметических операций является
то, что они выполняются побитно над операндами, переведенными в двоичную форму,
Результат выдается в десятичной системе счисления.
Таблица
3.3. Поразрядные арифметические операции
|
Знак операции |
Операция |
Типы операндов |
Тип результата |
Пример |
|
|
Поразрядное отрицание |
|
|
|
|
|
Поразрядное умножение |
|
|
|
|
|
Поразрядное сложение |
|
|
|
|
|
Поразрядное исключающее
ИЛИ |
|
|
|
|
|
Поразрядный сдвиг
числа влево |
|
|
|
|
|
Поразрядный сдвиг
числа вправо |
|
|
|
В табл. 3.4 показаны результаты
выполнения поразрядных арифметических операций.
Таблица
3.4. Результаты выполнения поразрядных арифметических операций
|
Знак операции |
Операция |
Бит1 |
Бит 2 |
Результирующий
бит |
|
|
Поразрядное отрицание |
|
|
|
|
|
|
|
|
|
|
|
Поразрядное умножение |
|
|
|
|
|
|
|
|
|
Таблица
3.4 (окончание)
|
Знак операции |
Операция |
Бит1 |
Бит 2 |
Результирующий
бит |
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
Поразрядное сложение |
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
Поразрядное исключающее
ИЛИ |
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
Приведем примеры использования
побитовых арифметических операций (листинг 3.2).
Листинг 3.2. Примеры
использования побитовых операций
var
a,b,с: Integer; // Объявляем три целочисленные переменные begin
а =175; b:=77; // Двум из них присваиваем начальные значения
с =not a; // Результатом будет число -176
с =а or b; // Результатом будет число 239
с =а and b; // Результатом будет число 13
с =а хоr b; // Результатом будет число 226
с =а shl 1; // Результатом будет число 350с =b shr 1; // Результатом будет число 38 end;
Число 175 в двоичной системе
выглядит так: 10101111. А число 77 так: 1001101. Операции производятся поразрядно
справа налево, затем результат переводится в десятичную систему счисления.
Сдвиг на один разряд влево
равносилен умножению числа на 2. Сдвиг на один разряд вправо равносилен делению
числа нацело на 2 с отбрасыванием дробной части.
Кроме всего рассмотренного
выше, язык Object Pascal имеет достаточно большое количество функций для работы
с числовыми данными. Эти функции можно также использовать в арифметических выражениях.
Среди прочих наиболее часто используются следующие функции:
Abs (x)
— абсолютное значение х. Вызов данной функции позволяет отбросить
знак минус у числа, если он есть;Cos (х)
— косинус угла х. Угол задается в радианах;Ехр (х)
— возведение числа е в степень х; Ln(x) —
натуральный логарифм числа х;Odd(x) —
проверяет число х на четность. Если оно четное, то возвращает
значение True, иначе — False;Sin (х)
— синус угла х. Угол задается в радианах;Sqr (х)
— возведение числа х в квадрат;Sqrt (х)
— извлечение квадратного корня из числа х. Аргументами данных функций
могут быть не только числа, но и переменные, константы, выражения.
Приведем пример вычисления
выражения, в котором присутствуют арифметические функции:
a:=sqr( (152+b) /2*cos
(3.14+b) +sqrt (23)) ;
Логические выражения
Логические выражения это
выражения, в которых содержатся:
True и False;Boolean; В результате выполнения
логической операции получается логическое значение True или False.
Логические операции, доступные в языке Object Pascal, представлены в табл. 3.5.
Таблица
3.5. Логические операции языка Object Pascal
|
Знак операции |
Операция |
Типы операндов |
Тип результата |
Пример |
|
|
Отрицание |
|
|
|
Таблица
3.5 (окончание)
|
Знак операции |
Операция |
Типы операндов |
Тип результата |
Пример |
|
|
Конъюнкция (логическое
И) |
|
|
|
|
|
Дизъюнкция (логическое
ИЛИ) |
|
|
|
|
|
Исключающая дизъюнкция
(исключающее ИЛИ) |
|
|
|
Как видно из примеров табл.
3.5, логические операции and, or и xor являются операциями
над двумя операндами, а операции not — над одним операндом. В следующей
таблице (табл. 3.6) приведены результаты выполнения логических операций.
Таблица
3.6. Результаты выполнения логических операций
|
Знак операции |
Операция |
Операнд 1 |
Операнд 2 |
Результат |
|
|
Отрицание |
|
|
|
|
|
|
|
|
|
|
|
Конъюнкция (логическое
И) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Дизъюнкция (логическое
ИЛИ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исключающая дизъюнкция
(исключающее ИЛИ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для установки отношений
между двумя значениями вы можете использовать операции отношения или сравнения.
В языке Object Pascal имеется шесть операций отношения:
Если операция отношения
истинна, то результатом ее выполнения является значение True, например
истинным является выражение 4 < 10; в противном случае — результат
False, например 12 <> 12.
Рассмотрим теперь такой
немаловажный вопрос: в каком порядке выполняются те или иные операции? Если
в сложном выражении записаны несколько операций подряд, то последовательность
их выполнения определяется старшинством. Для того чтобы был четкий порядок выполнения
операции, в языке Object Pascal существует такое понятие, как приоритет.
Приоритет определяет
старшинство операций и служит для установления порядка выполнения операций.
Операции с более высоким уровнем приоритета выполняются раньше остальных.
По приоритету все операции
делятся на четыре уровня:
@
и
not;*, /, div, mod, and, shl, shr и as; +, -, or и хоr;
=, <>, <, >, <=, >=,
in и is. Если подряд идут несколько
операций с одинаковым приоритетом, то операции выполняются слева направо.
Строковые выражения
Строковые выражения содержат
строковые операции и функции. Для строк в Object Pascal определена одна операция
— операция объединения строк (конкатенации строк). Знаком операции конкатенации
является +. Операндами для этой операции могут быть строки, упакованные строки,
а также символы. В то же время, если один из операндов имеет тип WideChar, другой
операнд должен быть длинной строкой. Результат операции объединения строк —
строка символов. Этот результат совместим со всеми строковыми
типами языка. В то же время, если количество символов после операции объединения
строк превысит 255, то результатом станут первые 255 символов, а оставшиеся
будут просто отброшены.
Для строк определены также
следующие функции:
Concat (s1, s2,
..., sn) — возвращает строку, представляющую собой объединение строк
s1 ... sn;Copy(S; Index,
Count) — возвращает строковое значение, являющееся подстрокой строки
S, начиная с символа под номером Index, и длиной
Count;Length (s) —
возвращает целое число, равное количеству символов в строке s;Pos(Substr; s)
— возвращает целое число, определяющее позицию первого символа, начиная с
которого подстрока Substr входит в строку s. Если
такой подстроки в строке нет, то результатом будет 0;Trim(s)
— возвращает строку, полученную в результате отбрасывания от строки s
пробелов и управляющих символов в начале и конце строки;TrimLeft(s)
— возвращает строку, полученную в результате отбрасывания от строки s
пробелов и управляющих символов в начале строки;TrimRight(s)
— возвращает строку, полученную в результате отбрасывания от строки s
пробелов и управляющих символов в конце строки. Кроме перечисленных выше
функций существует несколько дополнительных функций для преобразования одних
типов данных в другие:
DateToStr (Date)
— возвращает строку, полученную в результате преобразования значения даты
Date в строку;FioatToStr (value)
— возвращает строку, полученную в результате преобразования вещественного
числа value в строку;IntToStr (value)
— возвращает строку, полученную в результате преобразования целого числа value
в строку;LowerCase (s)
— возвращает строку, полученную в результате преобразования строки
s в строку символов нижнего регистра (прописные буквы);StrToDate(s)
— возвращает значение типа "дата", полученное в результате преобразования
строки s в значение даты;StrToDateTime(s)
— возвращает значение типа "дата и время", полученное в результате
преобразования строки s в значение даты и времени;StrToFloat (s)
— возвращает значение вещественного типа, полученное в результате преобразования
строки s в вещественное число;StrToInt(s)
— возвращает целочисленное значение, полученное в результате преобразования
строки s в целое число;StrToTime (s)
— возвращает значение типа "время", полученное в результате
преобразования строки s в значение времени;TimeToStr (time)
— возвращает строку, полученную в результате преобразования значения
времени time в строку;UpperCase (s)
— возвращает строку, полученную в результате преобразования строки s
в строку символов верхнего регистра (заглавные буквы);Приведем примеры строковых выражений:
S:='Мама';
// Результат в переменной S - слово МамаS:=s + ' мыла';
// Результат - Мама мылаS:=s + Uppercase('
раму'); // Результат - Мама мыла РАМУ