Понедельник, 18.12.2017, 17:38Приветствую Вас Гость | RSS
Программирование на языке Turbo Pascal
Меню сайта
Категории раздела
/
Наш опрос
Оцените мой сайт
Всего ответов: 146
Статистика
счетчик посещений TOPIZ.RU
Форма входа

ОПЕРАЦИИ


В Турбо Паскале определены следующие операции:

унарные not, @;

мультипликативные *, /, div, mod, and, shl, shr;

аддитивные +, -, or, xor;

отношения =, <>, <, >, <=, >=,in.

Приоритет операций убывает в указанном порядке, т.е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленной в среде Турбо Паскаля опции OPTIONS/COMPILER/ COMPLETE BOOLEAN EVAL: при установленном значении этой опции вычисляются все операции отношения, при не установленном - только те, которые достаточны для получения результата.

Это обстоятельство необходимо учитывать при использовании операций отношения с функциями, в которых изменяются глобальные переменные или параметры, передаваемые по имени, например:

Function AddI(var x: Integer): Integer;

begin {AddI}

inc(x);

AddI := x end {AddI} ;

var

a,b : Integer;

begin {main}

if (a > b) or (Addl (a) > 100) then b := a;

.......

При выполнении этого фрагмента значение переменной А будет зависеть от настройки опции: если опция активизирована, значение А всегда наращивается на 1, если не активизирована - только в случае А <= В .

Правила использования операций с операндами различного типа приводятся в табл. 3.1.

Таблица 3.1
Операция
Действие
Тип операндов
Тип результата

not
Отрицание
Логический
Логический

not
То же
Любой целый
Тип операнда

@
Адрес
Любой
Указатель

*
Умножение
Любой целый
Наименьший целый

*
То же
Любой вещественный
Exended

*
Пересечение множеств
Множественный
Множественный

/
Деление
Любой вещественный
Extended

div
Целочисленное деление
Любой целый
Наименьший целый

mod
Остаток от деления
То же
То же

and
Логическое И
Логический
Логический

and
То же
Любой целый
Наименьший целый

shl
Левый сдвиг
То же
То же

shr
Правый сдвиг
То же
То же

+
Сложение
То же
То же

+
То же
Любой вещественный
Extended

+
Объединение множеств
Множественный
Множественный

+
Сцепление строк
Строковый
Строковый

-
Вычитание
Любой целый
Наименьший целый

-
То же
Любой вещественный
Extenden

or
Логическое ИЛИ
Логический
Логический

or
Тоже
Любой целый
Наименьший целый

=
Равно
Любой простой или строковый
Логический

<>
Не равно
То же
То же

<
Меньше
Логический
Логический

<=
Меньше или равно
То же
То же

>
Больше
То же
То же

>=
Больше или равно
То же
То же


При действиях с вещественным типом одним из операндов может быть значение любого целого типа. Результат операций имеет указанный в таблице тип EXTENDED только для установленного в среде Турбо Паскаля режима генерации кода, рассчитанного на арифметический сопроцессор или на его эмуляцию (см. прил.1). Если этот режим не установлен, результат будет иметь значение типа REAL.

Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER (см. гл.6), в котором содержится адрес операнда. Пусть, например, задано описание

type

TwoChar = array [1..2] of char; var

Int : integer; TwoCharPtr : ATwoChar;

Тогда оператор

TwoCharPtr := @Int;

приведет к тому, что в TwoCharPtr будет храниться адрес целочисленной переменной INT, которая может теперь интерпретироваться как совокупность двух символов. Поэтому возможен, например, такой оператор:

if TwoCharPtr^[1] = 'С' then...

Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на ассемблере, или в фрагментах INLINE.

В Турбо Паскале определены следующие логические операции:

not - логическое НЕ;

and - логическое И;

or - логическое ИЛИ;

хоr - исключительное ИЛИ.

Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 3.2.

Таблица 3.2
Логические операции над данными типа INTEGER (поразрядно)

Операнд 1
Операнд 2
not
and
or
xor

1
-
0
-
-
-

0
-
1
-
-
-

0
0
-
0
0
0

0
1
-
0
1
1

1
0
-
0
1
1

1
1
-
1
1
0


К логическим же в Турбо Паскале обычно относятся и две сдвиговые операции над целыми числами:

i shl j - сдвиг содержимого i на j разрядов влево; освободившиеся младшие

разряды заполняются нулями;

i shr j - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие

разряды заполняются нулями.

В этих операциях i и j - выражения любого целого типа.

С помощью программы примера 3.1 можно вывести на экран результат применения логических операций к двум целым числам.

Пример 3.1

{Программа вводит два целых числа и печатает результат применения к ним логических операций. Для выхода из программы ввести Ctrl-z и нажать Enter}

var

n,m : integer; begin

while not EOF do begin

Write('n,m='); ReadLn(n,m);
WriteLn( '
not=
1 , not n, 'not m);

WriteLnC
and=
' , n and m)

WriteLnC
or =
1 , n or m) ;

WriteLnC
xor=
1 , n xor m)

WriteLn( '
shl=
1 ,n shl m)

WriteLn( '
shr=
1 , n shr m)

end


end.

В программе организуется ввод двух произвольных целых чисел и печать результата применения к ним всех логических операций. Для выхода из программы следует нажать Ctrl-z, и Enter.

Логические операции над логическими данными дают результат логического типа по правилам, указанным в табл. 3.3.

Таблица 3.3
Логические операции над данными типа Boolean

Операнд 1
Операнд 2
not
and
or
xor

True
-
False
-
-
-

False
-
True
-
-
-

False
False
-
False
False
False

False
True
-
False
True
True

True
False
-
False
True
True

True
True
-
True
True
False


Операция отношения IN применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Операция дает TRUE, если левый операнд принадлежит множеству, например:

var

с: char; type

digit = set of ' 0 '..' 9 ' ; begin

if с in digit then .......

Поиск
Календарь
«  Декабрь 2017  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz