Арифметические
выражения
Арифметические операции
выполняются над целыми и действительными числами. Результатом выполнения арифметического
выражения является также целое или действительное число.
В языке 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; // Объявляем четыре целочисленных переменных
begin
a:=7; b:=5; c:=-10; // Присваиваем трем из них начальные значения
d:=a+b; // Результатом будет число 12
d:=-d; // Результатом будет число -12
d:=d+c; // Результатом будет число -22
d:=d div с; // Результатом будет число 2
d:=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('
раму'); // Результат - Мама мыла РАМУ