Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
1.51 Mб
Скачать

Задание для самостоятельной работы

  1. Выполните вывод дерева слева направо (Левый-Корень-Правый) и снизу вверх (Левый – Правый - Корень).

  2. Напишите функцию проверки наличия заданного элемента в дереве.

  3. Напишите функцию поиска наибольшего элемента в дереве.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Дайте определение бинарного дерева поиска

  2. Где применяются бинарные деревья поиска?

  3. Построить бинарное дерево поиска. Записать прохождение дерева сверху вниз, слева направо и снизу вверх : 14 15 9 2 4 8 11 3 19 1

  4. Построить дерево – формулу. Получить префиксную и постфиксную записи выражения: A / (B ^ C – D) / (E + F) + G

Лабораторная работа №18. Основы объектно-ориентированного программирования

ЦЕЛЬ РАБОТЫ: Познакомиться с основами объектно-ориентированного программирования (ООП), классами, объектами и механизмом наследования. Получения практического навыка создания пользовательских классов.

ПОДГОТОВКА К РАБОТЕ:

  1. Изучить основные принципы ООП.

  2. Ознакомиться с составляющими класса – полями, свойствами и методами.

  3. Ознакомиться с базовым классом Object и механизмом наследования.

ЗАДАНИЕ: Разработать приложение, содержащее следующие классы: TLocation (Расположение), TPoint (Точка), TCircle ( Круг).Диаграмма классов приведена на рисунке 18.1.

Класс TLocation состоит из следующих полей и методов:

  • x, y - координаты;

  • Image – поверхность, на которой определяются координаты x и y;

  • ClearWin – процедура очистки поверхности (закраска поверхности белым цветом);

  • Draw – абстрактная процедура изображения фигуры на поверхности.

  • Класс TPoint состоит из следующих полей, свойств и методов:

  • FColor – поле «цвет точки с координатами x и y»;

  • PColor – свойство «цвет точки с координатами x и y». Для получения цвета точки используется функция GetColor. Для получения цвета точки используется функция SetColor;

  • Show – процедура «Показать точку»;

  • Hide – процедура «Скрыть точку»;

  • Draw – процедура «Нарисовать точку».

Класс TCircle состоит из следующих полей, свойств и методов:

  • r – радиус круга;

  • Draw – процедура «Нарисовать круг».

П риложение должно иметь вид, изображенный на рисунке 18.2.

Компоненты приложения приведены в таблице 18.1.

Последовательность действий по созданию приложения:

  1. В блоке Type после объявления класса формы объявите пользовательские классы:

TForm1 = class(TForm)

…………………….

end;

// Class TLocation

TLocation=Class

x,y:Integer;

Image:TImage;

Procedure Draw (IsShow:Boolean;aImage:TImage); virtual;abstract;

Procedure ClearWin(aImage:TImage);

end;

// Class TPoint

TPoint=Class(TLocation)

FColor:DWord;

Function GetColor:DWord;

Procedure SetColor(NewColor:DWord);

Procedure Draw(IsShow:Boolean;aImage:TImage);override;

Procedure Show(aImage:TImage);

Procedure Hide(aImage:TImage);

Property PColor:DWord read GetColor write SetColor;

end;

// Class TCircle

Tcircle=Class(TPoint)

r:Integer;

Procedure Draw(IsShow:Boolean;aImage:TImage);override;

end;

Таблица 18.1 Компоненты приложения

Компонент

Класс

Описание

Image1

Tmage

Поверхность для изображения объекта

Button1

TButton

Командная кнопка «Вверх»

Button2

TButton

Командная кнопка «Вниз»

Продолжение таблицы 18.1

Компонент

Класс

Описание

Button3

TButton

Командная кнопка «Влево»

Button4

TButton

Командная кнопка «Вправо»

Button5

TButton

Командная кнопка «Увеличить»

Button6

TButton

Командная кнопка «Уменьшить»

  1. Создайте блок объявления констант:

const dy=10; // смещение фигуры по оси y

dx=10; // смещение фигуры по оси x

var

Form1: TForm1;

…………………………

  1. В области объявления глобальных переменных объявите объект «круг»:

var

Form1: TForm1;

Circle:TCircle;

  1. В блоке implementation опишите методы класса TLocation:

// Методы класса TLocation

// Очистка окна

Procedure TLocation.ClearWin(aImage:TImage);

begin

Image:=aImage;

// Установить черный цвет пера

Image.Canvas.Pen.Color:=clBlack;

// Нарисовать прямоугольник, размер которого равен размеру окна

Image.Canvas.Rectangle(0,0,Image.Width,Image.Height);

// Установить белый цвет кисти

Image.Canvas.Brush.Color:=clWhite;

// Закрасить прямоугольник белым цветом

Image.Canvas.FloodFill(1,1,clBlack,fsBorder);

end;

  1. В блоке implementation опишите методы класса TPoint:

// Методы класса TPoint

// Получить значение цвета точки

Function TPoint.GetColor:DWord;

begin

Result:=FColor;

end;

// Установить цвет точки

Procedure TPoint.SetColor(NewColor:DWord);

begin

FColor:=NewColor;

end;

// рисовать точку

Procedure TPoint.Draw(IsShow:Boolean;aImage:TImage);

begin

Image:=aImage;

// Очистить окно

ClearWin(Image);

// Если флаг равен True, показать точку

If IsShow then Image.Canvas.Pixels[X,Y]:=FColor;

end;

// Показать точку

Procedure TPoint.Show(aImage:TImage);

begin

Image:=aImage;

// Установить флаг равным True

Draw(True,Image);

end;

// Скрыть точку

Procedure TPoint.Hide(aImage:TImage);

begin

Image:=aImage;

// Установить флаг равным False

Draw(False,Image);

end;

  1. В блоке implementation опишите методы класса TCircle:

// Методы класса TCircle

// рисовать круг

Procedure TCircle.Draw(IsShow:Boolean;aImage:TImage);

begin

Image:=aImage;

ClearWin(Image);

If IsShow then

With Image.Canvas do

begin

Brush.Color:=FColor;

// Установить координаты центра круга

MoveTo(x,y);

// Рисовать круг

Ellipse(x-r,y-r,x+r,y+r);

// Закрасить круг

FloodFill(x,y,clBlack,fsBorder);

end;

end;

  1. Для события OnActivate компонента Form1 напишите следующий программный код:

procedure TForm1.FormActivate(Sender: TObject);

begin

// Создать объект «круг»

Circle:=TCircle.Create;

// Координаты круга в центре окна

Circle.x:=Image1.Width div 2;

Circle.y:=Image1.Height div 2;

// Радиус круга равен 10

Circle.r:=10;

// Цвет круга - голубой

Circle.FColor:=clSkyBlue;

// Нарисовать объект «круг»

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button1 (вверх) напишите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

begin

// Изменить координату по оси Y

Circle.y:=Circle.y-dy;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button2 (вниз) напишите следующий программный код:

procedure TForm1.Button2Click(Sender: TObject);

begin

// Изменить координату по оси Y

Circle.y:=Circle.y+dy;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button3 (влево) напишите следующий программный код:

procedure TForm1.Button3Click(Sender: TObject);

begin

// Изменить координату по оси X

Circle.x:=Circle.x-dx;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button4 (вправо) напишите следующий программный код:

procedure TForm1.Button4Click(Sender: TObject);

begin

// Изменить координату по оси X

Circle.x:=Circle.x+dx;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button5 (увеличить) напишите следующий программный код:

procedure TForm1.Button5Click(Sender: TObject);

begin

// Увеличить радиус в 2 раза

Circle.r:=Circle.r*2;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Для события OnClick командной кнопки Button5 (уменьшить) напишите следующий программный код:

procedure TForm1.Button6Click(Sender: TObject);

begin

// Уменьшить радиус в 2 раза

Circle.r:=Circle.r div 2;

// Нарисовать круг

Circle.Show(Image1);

end;

  1. Откомпилируйте приложение и проверьте его работу.