Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки 1-6 по Delphi.pdf
Скачиваний:
39
Добавлен:
08.04.2015
Размер:
1.09 Mб
Скачать

Языки программирования

ЛР 1. Операторы и выражения Delphi

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

В терминах программирования под выражением понимается логически законченный фрагмент исходного кода программы, предоставляющий способ получения (вычисления) некоторого значения. Простейшим примером выражения может стать строка кода X:=Y+Z, возвращающая результат суммирования двух значений. Предложенное выражение содержит три операнда (X, Y и Z) и два оператора: := и +.

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

оператор присваивания;

арифметические операторы;

оператор конкатенации строк;

логические операторы;

операторы поразрядного сдвига;

операторы отношения;

операторы множеств;

строковые операторы;

составной оператор;

условные операторы.

Оператор присваивания

Едва ли не самый популярный среди всех операторов Delphi — оператор присваивания нам уже хорошо знаком. Комбинация символов ":=" уже неоднократно встречалась на предыдущих страницах книги, с ее помощью мы передавали значения в переменные. Например,

X:=10; //присвоить переменной X значение 10

Благодаря оператору := в переменной X окажется новое значение.

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

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

Таблица 1.1. Арифметические операторы Delphi

Операто

Операция

Входные

Результат

Пример

Результ

р

 

значения

операции

 

ат

 

 

 

 

 

 

+

Сложение

integer,

integer,

X:=3+4;

7

 

 

double

double

 

 

-

Вычитание

integer,

integer,

X:=10-3.1;

8.9

 

 

double

double

 

 

*

Умножение

integer,

integer,

X:=2*3.2;

4.4;

 

 

double

double

 

 

/

Деление

integer,

double

X:=5/2;

3.5;

 

 

double

 

 

 

1

СКФУ Кафедра компьютерной безопасности

Языки программирования

div

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

integer

integer

X:=5 div 2;

2

 

е деление

 

 

 

 

 

 

 

 

 

 

mod

Остаток от

integer

integer

X:=5 mod 2;

1

 

деления

 

 

 

 

При объявлении участвующих в расчетах переменных следует учитывать тип данных, возвращаемый в результате выполнения того или иного оператора. Допустим, нам следует разделить число 4 на 2 (листинг 1.1).

Листинг 1.1. Операция деления возвращает вещественное число

var {X:integer; - неподходящий тип данных}

X:extended;{- правильно} begin

X:=4/2; //результат должен быть передан в переменную вещественного типа

WriteLn(X); end.

Даже ученик начальной школы знает, что 4/2=2, другими словами в результате деления мы получим целое число. Однако Delphi обязательно забракует код, если мы попытаемся поместить результат операции деления в целочисленную переменную, и уведомит об этом программиста сообщением, о несовместимости типов.

Примечание

Операторы + и могут применяться не только для сложения и вычитания, но и для определения знака значения. Например: X:=-5.

Оператор конкатенации строк

Оператор конкатенации строк позволяет объединять две текстовые строки в одну. Для простоты запоминания еще со времен языка Pascal в качестве объединяющего оператора используется тот же самый символ, что и для сложения двух числовых величин — символ плюса + (листинг 1.2).

Листинг 1.2. Конкатенация строк

const S1='Hello';

var S:String='World';

CH:Char='!'; begin

S:=S1+', '+S+CH;

WriteLn(S); //'Hello, World!'

ReadLn; end.

Обратите внимание, что оператор конкатенации может быть применен не только для типа данных String, но и к символьному типу Char.

Логические операторы

В табл. 1.2 представлены четыре логических (булевых) оператора, осуществляющих операции логического отрицания, логического "И", логического "ИЛИ" и исключающего "ИЛИ". В результате выполнения любой из логических операций мы можем ожидать только одно значение из двух возможных: истина (true) или ложь (false).

2

СКФУ Кафедра компьютерной безопасности

Языки программирования

Таблица 1.2. Логические операторы Delphi

Оператор

Операция

Пример

Результат

 

 

 

 

NOT

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

var x: boolean = NOT true;

false

 

 

x:= NOT false;

true

AND

Логическое умножение

x:=true AND true;

true

 

(конъюнкция, логическое "И")

x:=true and false;

false

 

для двух выражений

 

 

x:=false AND true;

false

 

 

x:=false AND false;

false

OR

Выполняет операцию

x:=true OR true;

true

 

логического "ИЛИ" (сложения)

 

 

 

x:=true OR false;

false

 

для двух выражений

 

 

 

 

 

 

x:=false OR true;

true

 

 

x:=false OR false;

false

XOR

Выполняет операцию

x:=true XOR true;

false

 

исключающего "ИЛИ" для двух

x:=true XOR false;

true

 

выражений

 

x:=false XOR true;

true

 

 

 

 

x:=false XOR false;

false

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

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

var X,Y,Z : byte; begin

{******* логическое умножение *******}

X:=5; //в бинарном виде 0101

Y:=3; //в бинарном виде 0011

Z:=X AND Y; // 0101 AND 0011 = 0001 {десятичное 1} WriteLn(X,' AND ',Y,'=',Z);

{******* логическое сложение *******}

X:=1; //в бинарном виде 0001

Y:=2; //в бинарном виде 0010

Z:=X OR Y; // 0001 OR 0010 = 0011 {десятичное 3} WriteLn(X,' OR ',Y,'=',Z);

{******* исключение или *******}

X:=5;

//в бинарном виде 0101

 

Y:=3;

//в бинарном виде 0011

 

Z:=X XOR Y; // 0101 XOR 0011 = 0110 {десятичное 6}

WriteLn(X,' XOR ',Y,'=',Z);

 

 

{******* отрицание *******}

00000001

 

X:=1;

//в бинарном виде

{десятичное 254}

Z:=NOT X; // NOT 00000001 =

11111110

WriteLn('NOT ',X,'=',Z);

 

 

ReadLn; end.

3

СКФУ Кафедра компьютерной безопасности

Языки программирования

Операторы поразрядного сдвига

С отдельными битами значения способны работать операторы поразрядного сдвига SHL и SHR. Первый из операторов осуществляет сдвиг влево (после оператора указывается количество разрядов сдвига), второй — поразрядный сдвиг вправо.

В листинге 1.4 представлен фрагмент кода, демонстрирующий возможности операторов сдвига.

Листинг 1.4. Поразрядный сдвиг влево

var i:integer=1; begin

while true do begin

i:=i SHL 1; //сдвиг влево на 1 разряд

WriteLn(i);

if i>=1024 then break; //выход из цикла end;

readln; end.

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

2 {что в двоичном представлении соответствует 00000010}

4

{00000100}

8

{00001000}

16

{00010000}

32

{00100000}

64

{01000000}

и т. д.

По сути, мы с вами реализовали программу, позволяющую возводить значение 2 в заданную степень.

Можете провести эксперимент, приводящий к прямо противоположному результату. Для этого проинициализируйте переменную i значением 2 в степени N (например, 210 = 1024), замените оператор SHL на SHR и перепишите условие выхода из цикла: if i<1 then break.

Операторы отношения

Операторы отношения (неравенства) обычно применяются для сравнения двух числовых значений, в результате сравнения возвращаются логические значения true/false (табл. 1.3). Операторы отношения — желанные гости в условных операторах.

Таблица 1.3. Операторы отношения

Оператор

Операция

Пример

Результат

=

Сравнение

10=5

false

<>

Неравенство

10<>5

true

>

Больше чем

10>5

true

<

Меньше чем

10<5

false

>=

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

10>=5

true

<=

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

10<=5

false

4

СКФУ Кафедра компьютерной безопасности