- •ЛР 1. Операторы и выражения Delphi
 - •Оператор присваивания
 - •Арифметические операторы
 - •Оператор конкатенации строк
 - •Логические операторы
 - •Операторы поразрядного сдвига
 - •Операторы отношения
 - •Операторы множеств
 - •Составной оператор begin..end
 - •Условный оператор if..then..else
 - •Оператор-селектор case
 - •Оператор перехода goto
 - •Оператор with..do
 - •Организация циклов
 - •Цикл с параметром for..do
 - •Инструкция in в цикле for..do
 - •Цикл с предусловием while..do
 - •Цикл с постусловием repeat..until
 - •Вложенные циклы
 - •Операторы break и continue
 - •ЗАДАНИЕ
 - •Вариант 1.
 - •Вариант 2
 - •Вариант 3
 - •Вариант 4
 - •Вариант 5
 - •Вариант 6
 - •Вариант 7
 - •Вариант 8
 - •Вариант 9
 - •Вариант 10
 - •Вариант 11
 - •Вариант 12
 - •ЛР 2. Структурные типы
 - •Множества
 - •Записи
 - •Вариантные поля
 - •Усовершенствованная запись
 - •Массивы
 - •Объявление массива
 - •Обращение к ячейкам массива
 - •Динамический массив
 - •ЗАДАНИЕ
 - •Вариант 1
 - •Вариант 2
 - •Вариант 3
 - •Вариант 4
 - •Вариант 5
 - •Вариант 6
 - •Вариант 7
 - •Вариант 8
 - •Вариант 9
 - •Вариант 10
 - •Вариант 11
 - •Вариант 12
 - •ЛР 3. Объекты и классы
 - •Проектирование класса
 - •Управление жизненным циклом объекта
 - •Опережающее объявление класса
 - •Ограничение видимости членов класса
 - •Свойства объекта
 - •Особенности объявления методов
 - •Поля класса и методы класса
 - •Иерархия наследования
 - •Полиморфизм
 - •ЗАДАНИЕ
 - •Вариант 1
 - •Вариант 2
 - •Вариант 3
 - •Вариант 4
 - •ЛР4. Опорные классы VCL
 - •Класс TObject
 - •Класс TPersistent
 - •Основа компонента, класс TComponent
 - •Владение компонентом
 - •Класс TControl
 - •Принадлежность к родительскому контейнеру
 - •Размещение и размеры элемента управления
 - •События, связанные с изменением размеров
 - •Выравнивание элемента управления в контейнере
 - •Видимость и активность элемента управления
 - •Задание
 - •Вариант 1
 - •Вариант 2
 - •Вариант 3
 - •Вариант 4
 - •Вариант5
 - •Совет
 - •ЛР5. Обработка клавиатурных событий и событий мышки
 - •Щелчки кнопками мыши
 - •Перемещение указателя мыши
 - •Вращение колесика мыши
 - •Операция перетаскивания drag and drop
 - •Обработка событий клавиатуры
 - •Задание
 - •Вариант 1
 - •Вариант 2
 - •Вариант 3
 - •Вариант 4
 - •Вариант 5
 - •ЛР 6. Классы потоков данных
 - •Прототип потоков данных, класс TStream
 - •Потоки с дескриптором, класс THandleStream
 - •Файловый поток данных, класс TFileStream
 - •Пример работы с файловым потоком данных
 - •Задание
 - •Вариант 1.
 - •Вариант 2.
 - •Вариант 3.
 - •Вариант 4.
 - •Вариант 5.
 
Языки программирования
ЛР 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
СКФУ Кафедра компьютерной безопасности
