Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 272

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

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

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

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

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

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

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

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

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

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

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

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

Видимость и активность элемента управления

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream

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


С отдельными битами значения способны работать операторы поразрядного сдвига 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

Примечание

Операторы отношения допустимо использовать не только с числовыми, но и с текстовыми данными.


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


В составе Delphi предусмотрен ряд операторов, позволяющих осуществлять операции над однотипными множествами (табл. 1.4).

Таблица1.4.Операторымножеств


Оператор

Операция

Результат

+

Объединение

Новое множество

-

Разность

*

Пересечение

<=

Подмножество

Логическое значение

>=

Надмножество

=

Равенство

<>

Неравенство

in

Членство


Порядок осуществления операций с множествами демонстрирует листинг 1.5.


Листинг 1.5. Демонстрация операций с множествами




type TWeekDay = set of (Mo, Tu, We, Th, Fr, St, Su);
var WD1,WD2,WD3: TWeekDay;

begin

WD1:=[Mo]; // присваивание, результат WD1=[Mo] WD2:=WD1+[Tu,We]; // объединение, результат WD2=[Mo, Tu, We] WD3:=WD2-WD1-[Tu];// вычитание, результат WD3=[We] WD3:=[]; // пустое множество, результат WD3=[] WD1:=[Mo,Su];

// пересечение

WD3:=WD1*[Mo, Tu, We, Th, Fr, St, Su]; // результат WD3=[Mo, Su]

if WD1<>WD2 then begin//проверка неравенства

//...

end;


if Mo in WD1 then begin//проверка членства

//...

end;

end.
Составной оператор begin..end

Вне зависимости от назначения разрабатываемого приложения программисту не обойтись без составного оператора begin..end. Задача оператора — указание начала и конца программного блока. Характерным примером подобного блока является создаваемый по умолчанию каркас кода консольного приложения, здесь весь исполняемый код заносится вовнутрь begin..end.

Выражения, заключенные в рамки составного оператора, могут рассматриваться компилятором как составной оператор, подлежащий выполнению как единое целое. С одним из примеров использования составного оператора вы столкнетесь буквально на следующей странице (см. листинг 1.7).

Условный оператор if..then..else

Условные операторы позволяют осуществлять выбор операции во время выполнения программы. В простейшем случае синтаксис команды выглядит следующим образом:

if <логическоевыражение= true> then <выражение>;

Операция подлежит выполнению только при условии, что логическое выражение истинно (возвращает true). Предусмотрен еще один, расширенный вариант применения условного оператора:

if <логическоевыражение= true> then <выражение1> else <выражение2>;

В последнем случае мы осуществляем выбор между двумя выражениями. При соблюдении условия выполняется первая операция, в противном случае управление передается второй операции. Оба варианта применения условного оператора if представлены на рис. 1.1 в виде фрагментов блок-схем.




if .. then

if .. then .. else


Рис. 1.1. Фрагмент блок-схемы if..then и if..then..else
Простейший пример работы с условным оператором представлен в листинге 1.6. Если A превышает 15, то в переменную B передается произведение переменной A на 15, в противном случае результатом окажется значение A-3.


Листинг 1.6. Демонстрация оператора if..then..else




If A>15 then B:=A*15

else B:=A-2;
В листинге 1.7 предложен более сложный фрагмент кода, демонстрирующий порядок работы с условным оператором. В нашем примере мы осуществляем расчет площади квадрата или круга.


Листинг 1.7. Совместная работа if..then..else с оператором begin..end




var S:Char;

X,Y:Double;

begin

WriteLn('Calculation area: "S" - square, "C" - circle'); ReadLn(S); //пользователь вводит символ "S" или "C"

if S='S' then begin

WriteLn('The side of square=?'); ReadLn(X);

Y:=X*X;

WriteLn('Area=',Y);

end else if s='C' then

begin


WriteLn('Radius=?'); ReadLn(X); Y:=pi*X*X; WriteLn('Area=',Y);

end else WriteLn('Wrong symbol!'); ReadLn;