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

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

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

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

Добавлен: 10.01.2024

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

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

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

СОДЕРЖАНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

Множества

Записи

Массивы

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

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

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

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

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

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

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

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

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

Полиморфизм

ЗАДАНИЕ

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

Класс TControl

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

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

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

Задание

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

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

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

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

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

Задание

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

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


b)сумму элементов массива, расположенных между максимальным и минимальным элементами

  1. Дан целочисленный двумерный массив. Определите сумму элементов находящихся ниже главной диагонали

    1. сумму элементов массива с нечётными номерами;

    2. сумму элементов массива, расположенных между первым и последним отрицательными элементами

2) Дан целочисленный двумерный массив. Определить сумму элементов находящихся выше главной диагонали

Вариант 11


  1. В одномерном массиве, состоящем из n вещественных элементов,

    1. найти 3 самых маленьких по значению элемента;

    2. вычислить сумму самого маленького и самого большого элементов массива.

  2. Дан целочисленный двумерный массив. Определить суммы каждой строки элементов



Вариант 12


  1. В одномерном массиве, состоящем из n вещественных элементов

    1. найти 3 самых больших по значению элемента;

    2. сумму чётных элементов массива.

  2. Дан целочисленный двумерный массив. Вычислите среднее арифметическое значений элементов массива.




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


Основной структурной единицей всей концепции ООП выступает класс. Класс— это программное описание будущего объекта, включающее в себя определение полей, методов и свойств. Объявление класса начинается с ключевого слова type, включает имя и признак класса class (листинг 3.1).


Листинг 3.1 Синтаксическая конструкция объявления класса




type

Имя_класса= class [abstract | sealed] (класс-предок)

//поля и методы

end;
При объявлении класса можно воспользоваться одним из ключевых слов: abstract и sealed. Класс, отмеченный словом abstract, называют абстрактным. Основная особенность абстрактного класса заключается в том, что непосредственно на его основе невозможно создать самостоятельный объект или, как говорят программисты, экземпляр класса. Назначение абстрактного класса заключается в другом — он определяет концепцию построения всех своих наследников. Еще одно ключевое слово sealed запрещает классу иметь наследников.
По умолчанию новый класс создается на основе базового для всей иерархии классов визуальной библиотеки компонентов класса TObject. Но никто не запрещает нам, немного "порывшись" в дереве классов VCL или FMX, найти для своего класса наиболее подходящего предка.

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


Допустим, что перед нами поставлена задача разработать класс, моделирующий автомобиль. На первых порах мы не станем углубляться в детали и обсуждать предпочтительную для нас коробку передач или особенности обвода кузова. Будем проще, в качестве прообраза будущего класса предлагаю взять листинг 3.2.


Листинг 3.2 Объявление класса TAutomobile




type

TAutomobile= class(TObject) fSpeed:single; // поле скорости движения

function SetSpeed(Value:single):single; //установить скорость движения

end;
Предлагаемый прототип автомобиля снабжен полем fSpeed, отвечающим за хранение данных о текущей скорости движения. За управление полем несет ответственность метод SetSpeed(), он позволит нам увеличить или уменьшить скорость автомобиля.

Каждый знает, что автомобиль без двигателя — не более чем груда металлолома. Поэтому создадим класс двигателя TEngine (листинг 3.3) и интегрируем его в автомобиль.


Листинг 3.3. Объявление класса TEngine




type TEngine= class

fEnabled :boolean; //двигатель включен - true, выключен - false procedure SetEnabled(Value:Boolean); //запуск или останов двигателя function GetEngineState:boolean; //состояние двигателя

end;
function TEngine.GetEngineState: boolean;//состояние двигателя

begin

Result:= fEnabled; //если true - двигатель включен

end;
procedure TEngine.SetEnabled(Value: Boolean);

begin

fEnabled:=Value;

end;
В нашем примере в состав двигателя вошло поле fEnabled, которое определяет состояние двигателя (true включен, false отключен). Метод SetEnabled() отвечает за запуск и остановку двигателя. Функция GetEngineState() информирует о текущем состоянии двигателя.

Для того чтобы двигатель оказался "под капотом" класса TAutomobile, (листинг 3.4) объявляется поле fEngine:TEngine (если вас устроит такое сравнение — поле fEngine является аналогом двигательного отсека в корпусе реального автомобиля).


Листинг 3.4. Инкапсуляция двигателя TEngine в автомобиль TAutomobile





type TAutomobile= class(TObject) fSpeed:single; //поле скорости движения fEngine:TEngine; //поле двигателя
function SetSpeed(Value:single):single; //установить скорость движения

end;
Для того чтобы продемонстрировать пример взаимодействия автомобиля и его двигателя, в состав методов автомобиля добавим функцию SetSpeed(), она возьмет на себя ответственность за управление скоростью движения автомобиля (листинг 3.5).


Листинг 3.5. Реализация класса TAutomobile




function TAutomobile.SetSpeed(Value:single):single;

begin

Result:=0;

if fEngine.GetEngineState=true then {если двигатель заведен}

begin

if (Value>=0) and (Value<=240) then {проверим корректность значения}

begin

fSpeed:=Value;

Result:=fSpeed; //скорость успешно изменена

end

else Raise Exception.Create('Допустимый диапазон 0...240 км/ч');

end else begin

fSpeed:=0;

Raise Exception.Create('Необходимо запустить двигатель!');

end;

end;

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


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

  • конструктор (constructor), который отвечает за создание из класса нового объекта (экземпляра класса). По существующей договоренности конструктор описывается в рамках метода Create();

  • деструктор (destructor), в обязанности которого входит уничтожение объекта. Функционал деструктора обычно закладывается в процедуру Destroy().

Описание класса автомобиля, включающее конструктор и деструктор, выглядит примерно так, как представлено в листинге 3.6.


Листинг 3.6. Объявление конструктора и деструктора класса TAutomobile




type TAutomobile= class(TObject)

...

constructor Create; //конструктор объекта

destructor Destroy; //деструктор объекта

end;
constructor TAutomobile.Create; //создание автомобиля

begin

fEngine:=TEngine.Create; //создаем двигатель fEngine.SetEnabled(False); //в исходном состоянии двигатель выключен fSpeed:=0; //скорость автомобиля 0 км/ч

end;
destructor TAutomobile.Destroy; //уничтожение автомобиля

begin

fSpeed:=0; //автомобиль должен быть остановлен fEngine.Destroy; //уничтожаем двигатель

end;
В коде конструктора мы создаем двигатель автомобиля и присваиваем ссылку на него в поле fEngine. Затем мы устанавливаем параметры автомобиля в состояние по умолчанию: двигатель выключен, скорость равна 0. Во время вызова деструктора мы решаем обратную задачу — останавливаем автомобиль и уничтожаем двигатель.

Если программист, по каким-то причинам отказался от описания конструктора и деструктора разрабатываемого класса