Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
46
Добавлен:
10.02.2015
Размер:
57.34 Кб
Скачать

Лекция 3. Операции и операторы.

1.Операции.

2.Операторы.

Операции.

Для вычисления значений переменных в программе на DELPHI используются выражения, состоящие из операндов

и операций.

Например, выражением являются 2 + 2 или a - b. Здесь числа и переменные a, b являются операндами, а знаки +(плюс) или –(минус) представляют собой операции.

Синтаксис выражения: <выражение>== [<операция1>]<операнд1> [[<операция2>]<операнд2>]…; Здесь <операнд>== !<константа>, <имя переменной>, <имя функции>!

Взависимости от количества операндов операции бывают бинарные и унарные. Бинарные операции имеют два операнда, а унарные – один.

Классификация операций.

арифметические операции == ! + , - , * , / , div , mod !

логические операции == ! not(унарная) , and , or , xor(унарная)!

битовые операции (поразрядные логические и сдвига shl, shr)

операция определения адреса == @<имя> (унарная)

Операции имеют разный приоритет. У логических и битовых операций наивысший приоритет имеет унарная not, следующая по приоритету операция and и операции сдвига shl, shr, а операции or и xor имеют самый низкий приоритет.

Приоритетом операций легко управлять с помощью круглых скобок, например по аналогии с выражением (a+b)*(a-b) можно записать (a or b) and (a or (not b)).

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

Тип результата в арифметических операциях сложения (+), вычитания (-) и умножения (*) соответствует типу операндов, которые могут быть как целого, так и действительного типа, но если хотя бы один из них действительного типа, то и результат будет действительного типа. Результат операции деления (/) всегда действительного типа.

Для целочисленных переменных имеются две специальные операции:

целочисленного деления (div), когда результат имеет целый тип, а остаток отбрасывается;

получения остатка от деления (mod) левого операнда на правый, а частное не определено.

Примеры для a=17, b=3: a div b = 5

a mod b = 2

Логические и битовые операции.

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

иметь тип Boolean и могут принимать только два значения true (истина) или false (ложь), в то время как для

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

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

1 and 1=1

1 or 1=1

1 xor 1=0

not 1=0

1 and 0=0

1 or 0=1

1 xor 0=1

not 0=1

0 and 1=0

0 or 1=1

0 xor 1=1

-

0 and 0=0

0 or 0=0

0 xor 0=0

-

Битовые операции сдвига вправо shr и влево shl сдвигают двоичные разряды внутреннего представления числа, заданного первым операндом на количество позиций, определяемое вторым операндом.

Примеры:

11110000 and 10101100 = 10100000

11110000 or 10101100 = 11111100

11110000 xor 10101100 = 01011100 not 11110000 = 00001111 10101100 shl 3 = 01100000 10101100 shr 2 = 00101011

Операция определения адреса.

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

Операторы

Операторы в отличие от операций, которые не изменяют последовательность выполнения программы, являются как раз средством изменения последовательности

выполняемых команд. По этой причине они еще называются

управляющими структурами языка. К ним относятся операторы:

ПРИСВАИВАНИЯ

СОСТАВНОЙ

УСЛОВНОГО И БЕЗУСЛОВНОГО ПЕРЕХОДА

ОПЕРАТОР ВЫБОРА

ОПЕРАТОРЫ ЦИКЛА

ОПЕРАТОР ЦИКЛА С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЙ (оператор FOR)

ОПЕРАТОРЫ ЦИКЛА С ПРЕДУСЛОВИЕМ И ПОСТУСЛОВИЕМ (операторы WHILE и REPEAT соответственно)

Оператор присваивания. <переменная> := <выражение>;

<переменная> и <выражение> должны иметь одинаковый тип. Допускается случай, когда <переменная> : Real, а <выражение> : !Integer, word, byte!,

но не наоборот!

Если все же надо выполнить такое присваивание, необходимо принудительно округлить выражение функцией round.

<переменная типа Integer>:=round(<выражение типа Real>); Составной оператор.

begin

<несколько операторов> end;

Составной оператор используется, когда надо, чтобы НЕСКОЛЬКО операторов рассматривались как ОДИН оператор.

Операторы условного и безусловного перехода.

Оператор условного перехода имеет две формы полную и сокращенную, когда ветвь else отсутствует.

if <условие> then <опеpатоp1> [else <опеpатоp2>];

<условие> == переменная или выражение логического типа. Оператор безусловного перехода

goto <метка>;

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

Оператор выбора.

Является альтернативой оператору условного перехода, но обеспечивает, в отличие от последнего, выбор более чем из двух точек ветвления.

case <выражение> of

<значение выpажения1>: <опеpатоp1>; <значение выpажения2>: <опеpатоp2>;

. . . . . . . . . . . . .

<значение выраженияN>: <опеpатоpN>; [ else

<опеpатоp_else> ] end;

Здесь <выражение> == переменная или выражение порядкового типа.

Выбирается та ветвь, <значение выражения> которой совпадает со значением <выражение>. Если такое значение не найдено, будет выполнена ветвь <опеpатоp_else>.

Обpатите внимание, что END в конце опеpатоpа используется без BEGIN.