- •ЛР 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
СКФУ Кафедра компьютерной безопасности