Понятие и классификация типов выражений 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие и классификация типов выражений



Рассмотренные выше типы данных используются в операторах языка Паскаль для различных целей. Основной задачей обработки данных, как уже упоминалось выше, является получение новых данных по уже имеющимся. Такой процесс происходит при выполнении (вычислении) выражений.

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

Таким образом, выражение - это такая структура языка, которая определяет способ получения нового значения по имеющимся. В составе выражений встречаются операнды и знаки операций. Операндами являются данные (в виде констант и переменных) и некоторые фиксированные последовательности действий, называемые вызовами функций.

Константы и данные, а также некоторые функции были рассмотрены выше, здесь мы остановимся на операциях.

Все выражения классифицируются по типу получаемого результата. В Паскале предусмотрены выражения арифметического типа (в свою очередь подразделяющиеся на целочисленные и вещественные и битовые), логические, операции отношений, адресные и строковые. Соответственно, и знаки операций (или просто операции) делятся на те же типы.

Арифметические операции

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

Например, если Х - вещественная переменная, первое выражение будет выполняться быстрее, чем второе:

1) X + 1.0 2) X + 1

Все варианты арифметических операций представлены в таблице

Таблица 6. Допустимые арифметические операции Турбо-Паскаля

Знак Операция Типы операндов Тип результата
+ Сложение Целый Целый
Хотя бы один - веществ. Вещественный
- Вычитание Целый Целый
Хотя бы один - веществ. Вещественный
* Умножение Целый Целый
Хотя бы один - веществ. Вещественный
/ Деление Любой числовой Вещественный
div Целочисленное деление Целые Целый
mod Остаток деления целых чисел Целые Целый

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

A * - B; -A * B; A * (-B); A*-B; A *- B;

Операции целочисленного деления и получения остатка от деления применимы только для целочисленных данных. Результат такого деления получается вещественным делением операндов и переводом результата в целое путем отбрасывания (а не округления!) дробной части. Остаток целочисленного деления - это такое наименьшее (по модулю) число, после уменьшения на которое делимое будет делиться на делитель без остатка. В выражениях операции, изображаемые служебными словами, должны отделяться от имен хотя бы одним пробелом:

A div B, A mod B

Примеры выполнения операций:

5/3 ->1.666667; 5 div 3 ->1; 3 div 5 ->0; 5 div -3 -> -1; 10 div 3->3;

5 mod 3 ->2; 3 mod 5 ->3; 10 mod 3 ->1; -10 mod 3 ->1;

Лекция 10

Логические операции

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

Таблица 7. Таблица истинности для основных двоичных логических функций

 

  отрицание конъюнкция дизъюнкция сложение по модулю 2 импликация эквиваленция штрих Шеффера стрелка Пирса
P Q ┐P P ^Q P V Q P Å Q P->Q P<->Q P | Q P ↓ Q
                   
                   
                   
                   

 

В Турбо Паскале всего имеется четыре логических операции, одна из них - унарная - not (отрицание), остальные - бинарные. Их названия:

and - "и" (логическое умножение, коньюнкция),

or - "или" (логическое сложение, дизьюнкция),

xor - "исключающее или" (сложение по модулю 2).

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

Таблица 8. Логические операции Турбо-Паскаля

 

P Q not Q P and Q P or Q P xor Q
False False True True False True False True True False False False False True False True True True False True True False

 

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

P and (Q or not S) и not P or Q and S

При P=False первое выражение будет равно False, а второе - True независимо от значений Q и S, поэтому вычислять Q и S и действия с ними не имеет смысла. Обычно Турбо Паскаль использует укороченную схему, как более быструю, но возможно заказать и полный режим с помощью специальной директивы. Как и для унарного "-", знаку операции " not " может предшествовать знак бинарной операции (но не наоборот!) и знаки операций должны разделяться пробелами. Например:

P and not Q - правильно, P not and Q - неправильно.

Отношения

Операции отношений возможны для сравнимых величин, т.е. для однотипных простых данных и для некоторых составных данных (строк, множеств), для которых эти операции определены специальным образом. Любые однотипные данные можно сравнивать на тождественность ("равно", "не равно"), упорядоченные типы можно также сравнивать на относительное расположение ("меньше", "больше").

В качестве знаков операций отношений в Турбо Паскале используются:

= - равно;

<> - не равно;

< - меньше;

<= - меньше или равно;

> - больше;

>= - больше или равно.

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

2.1*sin(X)-0.5 >= Y+Z или J < N-1

Отметим, что в Турбо Паскале логический тип - частный случай перечисляемого типа со значениями False и True, поэтому эти значения - упорядочены, и можно написать, что False < True. Аналогично, упорядоченными являются символьные данные, и можно утверждать, что

'А' < 'Б' -> True; '1' < 'A' -> True; 'a' < 'A' -> False.

В качестве составной части, отношения могут входить в сложные логические выражения, например (при NoError и EndArray - логического типа):

((J < N-1) or (X>=1.0)) and NoError and not EndArray;

Битовые операции

 

Операции, примененные к каждому биту целочисленных данных, называются битовыми. В Паскале таких операций предусмотрено 6 видов. Одна из них - унарная, остальные - бинарные. Назначение и примеры использования этих операций рассмотрены в справочном пособии по языку.

Инверсия

not - унарная операция инверсии всех битов целочисленного значения. Тип результата тот же, что и у исходного числа.

Побитовое логическое умножение

and - побитовое логическое умножение двух операндов. Тип результата совпадает с типом операнда, имеющего меньший размер. Если в операции участвуют знаковое и беззнаковое целое, результат считается беззнаковым. При вычислениях используются таблицы истинности (аксиомы булевой алгебры).

Побитовое логическое сложение

or - побитовое логическое сложение. Тип результата - как и в операции and.

 

Побитовое исключающее «или»

xor - побитовое исключающее «или». Тип результата - как в операции and. Вычисления производятся в соответствии с таблицей истинности, приведенной выше.

 

Сдвиг влево

К битовым операциям относятся также операции сдвигов.

shl - сдвиг влево. Выражение M shl K сдвигает содержимое переменной M на K битов влево. Освобождающиеся справа биты заполняются нулями.

Сдвиг влево на один разряд эквивалентен умножению числа на 2, сдвиг на n разрядов - умножению на 2 в степени n.

 

Сдвиг вправо

shr - сдвиг вправо. Выражение M shr K сдвигает содержимое переменной M на K битов вправо. Освобождающиеся слева биты заполняются нулями.

Лекция 11

 

Приоритеты операций

Вычисление любого выражения выполняется с учетом приоритетов операций, входящих в это выражение. Чтобы изменить порядок вычислений используются круглые скобки и выражение в скобках вычисляется и рассматривается как отдельный операнд. Кроме того, предварительно определяются все переменные и константы, разыскиваются элементы массивов, входящие в выражение. Затем вычисляются функции, к которым есть обращения, и далее выражение начинает выполняться слева направо, но с учетом приоритетов. Приоритеты операций приведены в таблице. Первый приоритет - самый высокий.

 

Таблица 8. Приоритеты операции Турбо-Паскаля

приоритет тип операций (действий) список операций
  Вычисления в скобках (), []
  Вычисления функций любые функции
  Унарные операции @,^,not,унарный"-"
  Операции типа умножения *,/,div,mod,and,shl,shr
  Операции типа сложения +,-,or,xor
  Операции отношений =, <>, >, >=, <, <=
  Операция присваивания :=

 

Примеры (цифры под выражением указывают порядок вычислений):

A x B

дробное выражение ----- записывается как A*B/C/D или A*B/(C*D)

C x D 1 2 3 1 3 2

пример логического выражения:

(X<1.5) or (2.5-3.2*X+Y * -sin(0.5/Z-1)* 0.01/ exp(sqr(-X /2.0))>Y) and

1 21 3 2 15 8 7 6 4 5 9 14 13 12 10 11 16 20

not(-X <> P1)

19 17 18

 

Иногда, при включении директив оптимизации, транслятор может нарушить порядок (слева направо) при выполнении операций одного приоритета, но логические выражения с укороченной схемой обязательно вычисляются слева направо.

Лекция 12

 



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 697; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.33.178 (0.03 с.)