
Лабораторная работа 5.
Лабораторная работа посвящена работе со структурой данных – запись (RECORD).
Запись представляет собой структуру данных, объединяющую под одним общим именем данные различных типов. Отдельные данные записи называются полями. Существуют простые записи и записи с вариативной частью.
Постановка задачи.
Написать приложение, реализующее различные задачи с использованием структуры - запись.
Используемые компоненты:
Form, Label, Edit, Button, Image, StringGrid.
Каждый вариант должен быть оформлен как отдельный проект, с произвольным интерфейсом.
Примеры и задания для самостоятельной работы.
Вариант 1.
Точка на плоскости.
Как известно точка на плоскости характеризуется двумя координатами. Т.е. есть величина «точка», хранимая в памяти как самостоятельная величина. Данные о точке включают в себя поля координат X и Y. Таким образом, для представления точки следует воспользоваться структурой запись, следующего вида:
Type
TPoint = record
x,y:real;
end;
Задания:
Используя данное определение точки реализовать следующие функции:
- отображение окружности с центром в точке, заданной пользователем;
- вычисление длины отрезка, заданного координатами двух точек;
- определить, является ли фигура заданная 3 точками, треугольником;
- построение замкнутой ломанной по заданным точкам, указывая их координаты на рисунке.
Примерный вид интерфейса и некоторые решения поставленных задач:
implementation
{$R *.dfm}
type TPoint = record
x,y:real;
end;
var Center:TPoint; //центр рабочей области для рисования
PointArray: array of TPoint; //массив точек ломанной
procedure TForm1.FormCreate(Sender: TObject);
begin
Center.x := Image1.Width / 2;
Center.y := Image1.Height / 2;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
//Строим оси координат. Остальные объекты будем смещать относительно этих осей
//производим округления, т.к. координаты на экране мониторы двобными быть не могут
Image1.Canvas.MoveTo(round(Center.x), 0);
Image1.Canvas.LineTo(round(Center.x), Image1.Height);
Image1.Canvas.MoveTo(0, round(Center.y));
Image1.Canvas.LineTo(Image1.Width, round(Center.y));
end;
Отображение окружности с центром в заданной точке
procedure TForm1.Button1Click(Sender: TObject);
var CircleCenter:TPoint;
begin
CircleCenter.x := StrToFloat(Edit1.Text);
CircleCenter.y := StrToFloat(Edit2.Text);
//окр вписывается в квадрат с центром смещенным относительно осей координат
Image1.Canvas.Ellipse(round(CircleCenter.x)-5+round(Center.x),
round(CircleCenter.y)-5+round(Center.y),
round(CircleCenter.x)+5+round(Center.x),
round(CircleCenter.y)+5+round(Center.y));
end;
procedure TForm1.Button1Click(Sender: TObject);
var CircleCenter:TPoint;
begin
CircleCenter.x := StrToFloat(Edit1.Text);
CircleCenter.y := StrToFloat(Edit2.Text);
Заполнение массива координатами точек для построения ломанной
procedure TForm1.Button2Click(Sender: TObject);
var NextPoint:TPoint; //текущая точка звена ломанной
begin
SetLength(PointArray, Length(PointArray) + 1);
NextPoint.x := StrToFloat(Edit1.Text);
NextPoint.y := StrToFloat(Edit2.Text);
PointArray[High(PointArray)] := NextPoint;
//очистить поля ввода
Edit1.Text := '';
Edit2.Text := '';
end;