Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы программирование.doc
Скачиваний:
81
Добавлен:
18.03.2015
Размер:
1.19 Mб
Скачать

6.4. Выражения

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

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

Примеры выражений:

у

21 (а + b) * с

sin(t)

а > 2

not Flag and (a = b)

NIL

[1, 3..7] * setl

6.5. Операции

В Object Pascal определены следующие операции:

унарные not, @ ;

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

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

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

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

Delphi переключателя Project | Options | Compiler | Complete

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

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

Таблица 6.1

Операция

Действие

Тип операндов

Тип результата

not

Отрицание

Логический

Логический

not

To же

Любой целый

Тип операнда

@

Адрес

Любой

Указатель

*

Умножение

Любой целый

Наименьший целый

*

Тоже

Любой вещественный

Extended

*

Пересечение множеств

Множественный

Множественный

/

Деление

Любой вещественный

Extended

div

Целочисленное деление

Любой целый

Наименьший целый

mod

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

Тоже

- Тоже

and

Логическое И

Логический

Логический

and

То же

Любой целый

Наименьший целый

shl

Левый сдвиг

Тоже

То же

shr

Правый сдвиг

То же

То же

+

Сложение

Тоже

Тоже

+

Тоже

Любой вещественный

Extended

+

Объединение множеств

Множественный

Множественный

+

Сцепление строк

Строковый

Строковый

-

Вычитание

Любой целый

Наименьший целый

-

Тоже

Любой вещественный

Extenden

or

Логическое или

Логический

Логический

or

Тоже

Любой целый

Наименьший целый

=

Равно

Любой простой или строковый

Логический

0

Не равно

Тоже

Тоже

<

Меньше

Логический

Логический

<=

Меньше или равно

Тоже

Тоже

>

Больше

То же

Тоже

>=

Больше или равно

Тоже

Тоже

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

INLINE.

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

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

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

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

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

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

Таблица 6.2

Логичеcкие операции над данными целого типа (поразрядно) 5

Операнд 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

 

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

shl j - сдвиг содержимого / на j разрядов влево; освободившиеся младшие разряды заполняются нулями;

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

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

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

Таблица 6.3

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

Операнд 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, если левый операнд принадлежит множеству.

  1. Основные операторы языка: присваивания, составной оператор. Стандартные типы данных.

Оператор – инструкция, задающая определенные действия программы. Одним из операторов является оператор присваивания, который присваивает значение некоторого выражения некоторой переменной. Оператор присваивания имеет следующую структуру: <Переменная> := <Выражение> ; ... ( 1 )

Важно отметить следующее:

  • := является ЕДИНЫМ ( неделимым ) символом.

  • как правило, операторы заканчиваются знаком ; Этот символ отделяет операторы друг от друга. Иногда можно его не ставить, но проще ставить «на всякий случай» и для повышения наглядности программы. Этот знак НЕЛЬЗЯ ставить перед else

  • Тип переменной в левой части оператора присваивания должен соответствовать типу выражения.  Так, если Х описан, как переменная вещественного типа, т е Var X : Real; то

  • Begin

  • Х := 2 + 3.5 ;{- правильное присваивание}

  • Х := 'Viena'; {- неправильное присваивание, справа - строка ! }

  • Х := 4 > 7; {- неправильное присваивание, справа - выражение

  • логического типа (результат = FALSE)}

End;

Чтобы сделать такие присваивания правильными, опишем переменную Y типа строка и переменную Z логического ( булевского ) типа.

Var X: Real; Y: String; Z: Boolean;

Begin

Х := 2 + 3.5 ;{ - правильное присваивание X = 5.5 }

Y := 'Viena'; {- правильное присваивание, Y = 'Viena'}

Z := 4 > 7; {- правильное присваивание, Z = False }

End;

  • Оператор присваивания выполняется в таком порядке:  - вычисляется выражение, записанное справа от знака :=  - полученное в результате значение присаивается переменной, записанной слева от знака := , то есть переменная теперь будет хранить это значение.

  • Операторы программы (подпрограммы) обычно выполняются в том порядке, в каком они записаны, т е слева – направо и сверху-вниз. Однако есть операторы, которые нарушают этот порядок, например, условный оператор

  • Переменная в ( 1 ) может быть элементом более сложной структуры, например, объекта или массива (вектора, матрицы).