Программирования в среде Bor- land Delphi с использованием пользовательских процедур и функций

Автор работы: Пользователь скрыл имя, 25 Ноября 2014 в 18:12, курсовая работа

Описание работы

Целью работы является получение навыков программирования в среде Bor-
land Delphi с использованием пользовательских процедур и функций.
Задание на курсовую работу состоит из двух частей. В каждой из частей за-
дания приводятся этапы решения от описания математической модели до созда-
ния приложения.

Содержание работы

Введение........................................................................................................................... 4
1. Задача №1..................................................................................................................... 5
1.1 Математическая модель решения задачи ............................................................... 5
1.2 Алгоритм решения задачи........................................................................................ 5
1.3 Описание используемых операторов, функций, процедур и методов................. 7
1.4 Текст программы....................................................................................................... 8
1.5 Форма приложения ................................................................................................... 9
2 Задача №2.................................................................................................................... 11
2.1 Математическая модель.......................................................................................... 11
2.2 Алгоритм решения задачи...................................................................................... 14
2.3 Описание используемых операторов, функций, процедур и методов............... 14
2.4 Текст программного кода....................................................................................... 16
2.5 Форма приложения ................................................................................................. 19
Заключение .................................................................................................................... 21
Список литературы ...............................................

Файлы: 1 файл

Курсовой Лептеев.pdf

— 561.44 Кб (Скачать файл)
Page 1
Министерство образования Республики Беларусь
Министерство образования и науки Российской Федерации
Государственное учреждение высшего профессионального образования
«Белорусско-Российский университет»
Кафедра
«Строительные, дорожные, подъемно-транспортные машины
и оборудование»
КУРСОВАЯ РАБОТА
по дисциплине
«ИНФОРМАТИКА»
РЕШЕНИЕ ЗАДАЧИ
ПДМЗ-101 00.00.122 ПЗ
Выполнил студент
группы ПДМ-122
________________Лептеев Д.Ю.
Проверил преподаватель
_________________Сёмчен В.И.
Могилев 2013

Page 2

СОДЕРЖАНИЕ
Введение........................................................................................................................... 4
1. Задача №1..................................................................................................................... 5
1.1 Математическая модель решения задачи ............................................................... 5
1.2 Алгоритм решения задачи........................................................................................ 5
1.3 Описание используемых операторов, функций, процедур и методов................. 7
1.4 Текст программы....................................................................................................... 8
1.5 Форма приложения ................................................................................................... 9
2 Задача №2.................................................................................................................... 11
2.1 Математическая модель.......................................................................................... 11
2.2 Алгоритм решения задачи...................................................................................... 14
2.3 Описание используемых операторов, функций, процедур и методов............... 14
2.4 Текст программного кода....................................................................................... 16
2.5 Форма приложения ................................................................................................. 19
Заключение .................................................................................................................... 21
Список литературы ....................................................................................................... 22
Изм. Лист
№ докум.
Подпись Дата
Лист
3
ПДМЗ-101 00.00.122 ПЗ
Разраб.
Лептеев
Провер.
Сёмчен
Реценз.
Н. Контр.
Утверд.
РЕШЕНИЕ ЗАДАЧ.
Пояснительная записка
Лит.
Листов
22
БРУ гр.ПДМ 122

Page 3

Изм. Лист
№ докум.
Подпись Дата
Лист
4
ПДМЗ-101 00.00.122 ПЗ
Введение
Целью работы является получение навыков программирования в среде Bor-
land Delphi с использованием пользовательских процедур и функций.
Задание на курсовую работу состоит из двух частей. В каждой из частей за-
дания приводятся этапы решения от описания математической модели до созда-
ния приложения. В первой задаче необходимо найти точку из множества, наибо-
лее близкую к заданной точке. Координаты точек заданы пользователем. Во вто-
рой задаче необходимо выполнить расчет кинематической схемы механизма и
отобразить ее перемещение в зависимости от перемещения ведущего звена с по-
мощью графических средств отображения Delphi.
Структура расчетно-пояснительной записки состоит из пяти частей. В первом
пункте приведена математическая модель, описывающая решение задачи; во вто-
ром пункте представлен алгоритм решения в виде блок-схем; в третьем и четвер-
том пунктах дан список операторов, процедур и функций, включая пользователь-
ские, используемых в среде Delphi, а также исходный текст программы; в пятом
пункте представлен внешний вид созданного программного приложения.

Page 4

Изм. Лист
№ докум.
Подпись Дата
Лист
5
ПДМЗ-101 00.00.122 ПЗ
1. Задача №1.
Дано множество A из N точек на плоскости и точка B (точки заданы своими
координатами x, y). Найти точку из множества A, наиболее близкую к точке B.
1.1 Математическая модель решения задачи
Для решения задачи необходимо вычислить расстояние от точки B до каждой
точки из множества A по формуле:

 

2
2
Ai
B
Ai
B
i
y
y
x
x
L




,
(1.1)
где i - порядковый номер точки из множества A,
N
i
,1

B
B
y
x ,
- координаты точки B;
Ai
Ai
y
x ,
- координаты i-той точки множества A.
Затем необходимо определить элемент вектора
i
L
с минимальным значением
и вывести координаты ближайшей точки на форму приложения.
1.2 Алгоритм решения задачи
На рисунке 1 приведены блок-схемы алгоритма решения задачи. На рисунке
1 а представлена блок-схема алгоритма работы приложения.
При нажатии кнопки «Задать точки» выполняется процедура Button1Click,
заполняющая таблицу случайными значениями координат N точек множества A.
Количество точек предварительно указывается в форме приложения. Блок-схема
алгоритма процедуры представлена на рисунке 1 б.
При нажатии кнопки «Расчет» выполняется процедура Button2Click, произ-
водящая считывание значений координат точек множества A и точки B, вычисле-
ние вектора
i
L
длин отрезков
B
A
i
и вывод его в таблицу формы приложения, вы-
вод порядкового номера и координат точки из множества
A
, а также минимальной
длины отрезка
min
B
A
i
. Блок-схема алгоритма процедуры представлена на рисунке
1 в.
На рисунке 1 г представлена блок-схема алгоритма пользовательской функ-
ции вычисления расстояния между двумя точками с известными координатами.
На рисунке 1 д представлена блок-схема алгоритма пользовательской проце-
дуры очистки полей для вывода значений порядкового номера точки, координат
точки и расстояния до точки.

Page 5

Изм. Лист
№ докум.
Подпись Дата
Лист
6
ПДМЗ-101 00.00.122 ПЗ
Нач
а
ло
UN
IT 1
Кон
е
ц
TF
o
r
m
1
.
B
u
t
t
o
n
2Click
а
TF
o
r
m
1
.
B
u
t
t
o
n
1Click
На
ча
ло
TFo
rm
1.
Bu
tt
on
1C
l
i
c
k
Ко
не
ц
б
На
ч
а
ло
pro
c
ed
ure
TFor
m
1.
Bu
t
t
o
n2Clic
k
Ко
не
ц
i=
1
,
n
a[
i,
1]
:
=
s
t
r
t
of
l
oat
(
C
e
l
l
s
[
1
,i
]
)
;
в
a[
i,
2]
:
=
s
t
r
t
of
l
oat
(
C
e
l
l
s
[
2
,i
]
)
;
a[
i,
3]
:
=
s(x0
,
y
0
,
a
[
i,
1
],a
[
i
,2
]);
n
i=
1
,
n
mx
y
.
C
e
l
l
s
[0
,
i
]:
=
i
n
tt
o
s
tr
(i
)
;
mx
y
.
C
e
l
l
s
[1
,
i
]:
=
f
l
oa
t
t
o
s
t
r
(
r
and
om(3
00
));
mx
y
.
C
e
l
l
s
[2
,
i
]:
=
f
l
oa
t
t
o
s
t
r
(
r
and
om(3
00
));
i= 1
,
n
Нач
а
ло
s
(
x
0
,
y
0,
x1,
y
1:
re
al):rea
l
Кон
е
ц
s:
=
sq
rt
(sq
r
(
x
0
-
x1
)
+s
qr
(y
0
-
y
1
));
г
m
xy.RowCount:
=n+1;
mx
y
.
ColCou
nt
:=3;
m
x
y
.
C
e
l
l
s
[1
,0
]
:
=
'X';
m
x
y
.
C
e
l
l
s
[2
,0
]
:
=
'Y';
r
a
ndo
m
i
z
e
ed
it
5.
Tex
t
:=
f
l
o
a
t
t
os
t
r
(r
and
om(
300
));
ed
it
6.
Tex
t
:=
f
l
o
a
t
t
os
t
r
(r
and
om(
300
));
n,
x0
,
y
0
cl
ear
l
i=
1
mi
n
:
=a
[
i
,
3
]
a[
i
,
3]
<
m
in
min
:
=
a
[
i
,3
];
ii:=i
;
la
bel1
2
.V
is
ib
le:
=
t
r
ue;
labe
l
3
.
V
is
ible
:
=
t
r
ue;
la
bel1
1
.V
is
ib
le:
=
t
r
ue;
labe
l
7
.
V
is
ible
:
=
t
r
ue;
label
12.C
a
ption
:=floattostr
(
ii
);
label
3
.
Capt
io
n
:
=
f
loat
t
o
st
r
(
a[
i
,
1]
);
label
11
.
C
apt
io
n
:
=
f
loat
t
o
st
r
(
a[
i
,
2]
);
mxy
.
C
e
lls[3
,
i
]:=For
m
a
tF
l
oat
(
'
###
##
00
.
00
',
a[
i,
3]
)
;
На
ча
ло
cl
ea
r
l
Ко
не
ц
form
1.label
12.V
isible
:=false
;
form
1.label
3.V
isibl
e
:=false
;
form
1.label
11.V
isible
:=false
;
form
1.label
7.V
isibl
e
:=false
;
д
label
7.
Capt
io
n
:
=
Form
at
Fl
oat
(
'##00
.
0
0
',
a
[
i
,
3]
);
m
xy.
Col
C
ount
:
=
4
;
mx
y
.
C
e
lls
[3
,0
]:='
Дл
и
н
а
';
да
нет
да
нет
Рисунок
1 -
Блок
-
схемы
алгоритма
решения
задачи

Page 6

Изм. Лист
№ докум.
Подпись Дата
Лист
7
ПДМЗ-101 00.00.122 ПЗ
1.3 Описание используемых операторов, функций, процедур и методов
Оператор присваивания ":=".
Переменная, стоящая в левой части оператора, становится равной той вели-
чине, которая находится справа. Типы этих величин должны совпадать. В выра-
жении, стоящем справа, также может использоваться переменная, стоящая слева.
Оператор If. Форма записи:
1 if Condition then Statement;
2 if Condition then Statement else Statement;
Ключевое слово If используется для управления потоком кода в зависимости
от логического результата данного условия. Есть две формы оператора If - один с
пунктом Else, другой без. Если условие истинно, то выполняется первая инструк-
ция. Если ложно, то эта инструкция обходится, а вместо него выполняется пункт
Else, если он есть. Во всех случаях, когда инструкция содержит более одного
предложения, она должна заключаться в блок begin/end.
Оператор For. Форма записи:
1 for Variable := Integer Expression to/downto Integer Expression do Statement;
2 for Variable := Char Expression to/downto Char Expression do Statement;
3 for Variable := Enum Expression to/downto Enum Expression do Statement;
Ключевое слово For начинает управляемый цикл, который выполняется ко-
нечное число раз. Переменной (Variable) присваивается значение 1-ого Выраже-
ния (Expression). Если значение меньше чем значение 2-ого Выражения (Expres-
sion), если он определен, то Инструкция (Statement) выполняется. Затем Перемен-
ная (Variable) увеличивается 1, и процесс повторяется, пока переменное значение
не превысит 2-ое значение выражения. Для downto, переменное значение прове-
ряется является ли оно больше чем 2-ое выражение, и его значение, затем умень-
шается на 1 в конце цикла. Выражения могут быть любыми перечислимыми ти-
пами - Integer, Char или Перечисления. Инструкция (Statement) может состоять из
одной линии, или находиться в операторном блоке begin/end.
Функция Random генерирует случайные числа. Это могут быть числа с пла-
вающей запятой числами в диапазоне: 0 <= Number <1.0 или целые числа в диапа-
зоне: 0 <= Number. Delphi использует генератор псевдослучайных чисел, который,
каждый раз, при выполнении программы возвращает одну и ту же последователь-
ность значений. Чтобы избегать этой предсказуемости, используйте процедуру
Randomize. Она в качестве начального псевдослучайного значения устанавливает
текущее время.
Функция FloatToStr преобразовывает значение Value плавающей запятой в
визуализуемую строку. Значение отображается с 15 цифрами точности. Типом
Value может быть любой из типов с плавающей запятой.
Функция StrToFloat конвертирует числовую строку FloatString, например
'123.456' в значение с плавающей точкой с типом Extended. Она поддерживает це-
лый формат, формат с плавающей точкой и научный (экспоненциальный) формат.
Функция Sqrt ( Number : Extended ) : Extended - возвращает квадратный ко-
рень числа (Number).Число должно быть вещественного типа.
Функция Sqr ( Number : Extended ) : Extended - возвращает квадрат числа
(Number).Число должно быть вещественного типа.

Page 7

Изм. Лист
№ докум.
Подпись Дата
Лист
8
ПДМЗ-101 00.00.122 ПЗ
Функция FormatFloat('#####00.00', Number : Extended) - преобразует число в
строку с заданной точностью знаков после запятой.
Описание пользовательских функций и процедур.
Функция function s(x0,y0,x1,y1:real):real возвращает значение расстояния
между двумя точками с известными координатами (1.1). Формальные переменные
x0, y0, x1, y1 – координаты точек.
Процедура clearl устанавливает свойства Visible:=false компонентов label,
отвечающих за вывод номера и координат ближайшей точки, а также расстояния
между точками. для смены устаревших данных при корректировке координат то-
чек с формы приложения.
1.4 Текст программы.
unit Z1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ExtCtrls, Grids, StdCtrls, ComCtrls, math ;
type
MyArr = array [1..600,1..3] of real;
VArr = array [1..600] of real;
TForm1 = class(TForm)
Button1: TButton;
UpDown1: TUpDown;
Edit1: TEdit;
mxy: TStringGrid;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Edit5: TEdit;
Label4: TLabel;
Edit6: TEdit;
Label5: TLabel;
Label6: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label3: TLabel;
Label11: TLabel;
Label7: TLabel;
Label12: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure mxyGetEditText(Sender: TObject; ACol, ARow:
Integer;
var Value: String);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:Myarr;
n:integer;
implementation
{$R *.dfm}
function s(x0,y0,x1,y1:real):real;
begin
s:= sqrt(sqr(x0-x1)+sqr(y0-y1));
end;
procedure clearl;
begin
form1.label12.Visible:=false;
form1.label3.Visible:=false;
form1.label11.Visible:=false;
form1.label7.Visible:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
randomize;
n:=strtoint(edit1.Text);
mxy.RowCount:=n+1;
mxy.ColCount:=3;
mxy.Cells[1,0]:='X';
mxy.Cells[2,0]:='Y';
edit5.Text:=floattostr(random(300));
edit6.Text:=floattostr(random(300));
for i:=1 to n do
begin
mxy.Cells[0,i]:=inttostr(i);
mxy.Cells[1,i]:=floattostr(random(300));
mxy.Cells[2,i]:=floattostr(random(300));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,ii,n:integer;min,x0,y0,x1,y1:real;
begin
n:=strtoint(edit1.Text);
x0:=strtofloat(edit5.Text);
y0:=strtofloat(edit6.Text);
clearl;
for i:=1 to n do
with mxy do begin
a[i,1]:= strtofloat(Cells[1,i]);
a[i,2]:= strtofloat(Cells[2,i]);
a[i,3]:= s(x0,y0,a[i,1],a[i,2]);
for i:=1 to n do
mxy.Cells[3,i]:=FormatFloat('#####00.00',a[i,3]);
end;

Page 8

Изм. Лист
№ докум.
Подпись Дата
Лист
9
ПДМЗ-101 00.00.122 ПЗ
if i=1 then min:=a[i,3];
if a[i,3]<min then
begin
min:=a[i,3];
ii:=i;
end;
end;
label12.Visible:=true;
label3.Visible:=true;
label11.Visible:=true;
label7.Visible:=true;
label12.Caption:=floattostr(ii);
label3.Caption:=floattostr(a[ii,1]);
label11.Caption:=floattostr(a[ii,2]);
label7.Caption:=FormatFloat('#####00.00',a[ii,3]);
mxy.ColCount:=4;
mxy.Cells[3,0]:='Длина';
procedure TForm1.mxyGetEditText(Sender: TObject;
ACol, ARow: Integer;
var Value: String);
begin
clearl;
end;
procedure TForm1.Edit5KeyPress(Sender: TObject;
var Key: Char);
begin
clearl;
end;
procedure TForm1.Edit6KeyPress(Sender: TObject;
var Key: Char);
begin
clearl;
end;
end.
1.5 Форма приложения
В соответствии с алгоритмом решения задачи был разработан интерфейс
программы, представленный на рисунке 2.
На форме размещены следующие компоненты:
StrigGrid – компонент, используемый для вывода таблиц (матриц);
Label - компонент для вывода однострочного текста;
Edit - компонент для ввода/вывода данных;
Button - компонент кнопка,
UpDown – компонент ассоциируемый полями типа TEdit и служащий для
увеличения или уменьшения численного значения поля на величину инкремента.
При запуске приложения пользователю предлагается задать координаты то-
чек множества
A
и координаты точки
B
случайным образом с помощью кнопки
«Задать точки» либо самостоятельно ввести их с клавиатуры предварительно за-
дав количество точек множества
A
в поле «Число точек». При нажатии кнопки
«Задать точки» в таблице в полях «X» и «Y» выводятся координаты
x
,
y
точек
множества
A
, а также порядковые номера точек в нулевом столбце. А в полях XB
и YB выводятся соответствующие координаты точки
B
. После заполнения табли-
цы пользователь при необходимости может изменить координаты любой выбран-
ной точки множества
A
в таблице, выделив соответствующую ячейку, либо коор-
динаты точки
B
в полях XB и YB. Также пользователь может изменить количест-
во точек, участвующих в расчете (по умолчанию количество точек равно 25), на-
жав на компонент UpDown1 окна «Число точек».
После нажатия кнопки «Расчет», приложение вычисляет ближайшую точку
из множества
A
по отношению к точке
B
, а также расстояние от каждой точки
множества
A
до точки
B
. Значения данных расстояний заносятся в таблицу при-
ложения 3-м столбцом «Длина». После чего порядковый номер ближайшей точки,
ее координаты и расстояние до точки
B
выводятся на форму приложения.

Page 9

Изм. Лист
№ докум.
Подпись Дата
Лист
10
ПДМЗ-101 00.00.122 ПЗ
Рисунок 2 — Интерфейс приложения задачи 1

Page 10

Изм. Лист
№ докум.
Подпись Дата
Лист
11
ПДМЗ-101 00.00.122 ПЗ
2 Задача №2
Создать программу для визуального отображения перемещений механизма в
соответствии с представленной на рисунке 3 схемой объекта с обозначением то-
чек шарниров.
C
B
A
D
Рисунок 3 – Кинематическая схема объекта
2.1 Математическая модель
Число степеней свободы плоского рычажного механизма
W
определяется по
формуле:
W
=
3n

2p
1

p
2
(2.1)
где
n
- число подвижных звеньев механизма;
p
1
- число низших кинематических пар;
p
2
-число высших кинематических пар.
Заданный механизм содержит
n=
5 подвижных звеньев и
p
1
=7 низших кине-
матических пар. Подставляя эти параметры в формулу 2.1, получаем выражение:
W = 35-27-0 = 1.
При W=1 механизм обладает одной степенью свободы и является однопод-
вижным, что необходимо для осуществления условия работоспособности.
Для визуального отображения перемещений механизма необходимо рассчи-
тать положение шарниров и звеньев. Составим систему уравнений описывающих
положение шарниров механизма. На рисунке 4 представлена расчетная схема ме-
ханизма. Ведущим звеном механизма является ползун
C
, совершающий возврат-
но-поступательное перемещение, величина которого равна
Y
. Положение опоры
O
принимается в точке с координатами (0,0). Расстояние от точки
O
до оси переме-
щения ползуна
C
и ползуна
A
по горизонтали равно соответственно
X
1
и
X
2
. На-
правления координатных осей представлены на рисунке 4.

Page 11

Изм. Лист
№ докум.
Подпись Дата
Лист
12
ПДМЗ-101 00.00.122 ПЗ
Рисунок 4 – Расчетная схема плоского рычажного механизма с дополнитель-
ными обозначениями
Математическая модель механизма имеет вид:
 
 




 














































sin
2/
sin
2/
cos
0
0
sin
cos
2
1
BA
B
A
X
A
OB
O
B
OB
O
B
O
O
CD
C
D
CD
C
D
Y
C
X
C
y
y
x
y
y
x
x
y
x
y
y
x
x
y
x
(2.2)
Установим зависимости углов  , и , от перемещения Y ползуна С. Ис-
пользуя уравнения проекций C
y
и C
x
(2.2) запишем систему уравнений:
 
 
 
 


















0
cos
cos
0
sin
sin
1
X
CD
OD
Y
CD
OD
(2.3)
Решая систему 2.3 относительно углов  и  при известном значении пере-
мещения ползуна С
y
= Y. Для решения системы нелинейных алгебраических урав-

Page 12

Изм. Лист
№ докум.
Подпись Дата
Лист
13
ПДМЗ-101 00.00.122 ПЗ
нений в алгоритме программы используется численный метод Ньютона.
Алгоритм метода Ньютона в многомерном случае имеет вид:
 
X
F
J
X
X
S
S









1
1
,
(2.4)
где:
1
,

S
S
X
X


- вектор приближения к корню системы на S и S+1 итерации;
 
X
F


- вектор-функция системы нелинейных уравнений;
1
J
- обратная матрица Якоби.
Матрица Якоби системы функций – матрица составленная из частных произ-
водных этих функций в точке x:
 
 
 
 
 
 
 
 
 
 







































x
x
u
x
x
u
x
x
u
x
x
u
x
x
u
x
x
u
x
x
u
x
x
u
x
x
u
x
J
n
m
m
m
n
n
n







2
1
2
2
1
2
1
2
1
1
1
(2.5)
На каждой итерации решая линейную систему алгебраических уравнений
вычисляется последующее приближение к корню системы. Оценка сходимости
метода производится вычислением длины приращения вектора приближения на
каждой итерации:




S
S
X
X


1
,
(2.6)
где

- допустимая величина погрешности.
При выполнении условия 2.6 вектор
1
S
X

принимается в качестве решения
системы уравнений.
Запишем уравнение, описывающее положение звеньев
OB
,
BA
и ползуна
A
по
оси
x
:


 
2
cos
2/
cos
X
AB
OB








(2.7)
Выразим 
:















BA
X
OB
2
2/
cos
arccos
(2.8)
Выбор длин звеньев механизма производится из условия обеспечения его ра-
ботоспособности. При правильном соотношении длин звеньев исключается за-
клинивание механизма при любом перемещении ведущего звена.
Максимальное значение перемещения ползуна C вычисляются из условия



, тогда максимальное значение перемещения ползуна равно:


2
1
2
MAX
X
CD
OD
С
x



;
(2.9)
Минимальное значение перемещения ползуна C вычисляется из условия



если
OD
+
X
1
<
CD
либо





если
OD
+
X
1

CD
. Максимальное значение
перемещения ползуна равно:

Page 13

Изм. Лист
№ докум.
Подпись Дата
Лист
14
ПДМЗ-101 00.00.122 ПЗ




CD
X
OD
X
CD
OD
CD
X
OD
X
CD
OD
С
x










1
2
1
2
1
2
1
2
MIN
при
,
при
,
.
(2.10)
Также необходимо обеспечить условие сборки механизма:
2
1
X
BA
OB
X
CD
OD




(2.11)
Принимаются следующие длины звеньев:
.
80
,
25
,
40
,
80
,
40
,
20
2
1







BA
OB
OD
CD
X
X
2.2 Алгоритм решения задачи
На основе математической модели составим алгоритм программы в вербаль-
ной форме. Цикл работы программы имеет следующий вид:
1. Чтение/Изменение координат опоры, смещения осей ползуна, положения
ведущего звена, длин звеньев; определение диапазона перемещения ползуна
C
;
2. Проверка условия 2.11;
3. Решение системы нелинейных алгебраических уравнений (2.3) относи-
тельно величин неизвестных углов  , ;
4. Вычисление по формуле (2.8);
5. Возврат в п.1 и вывод предупреждения в случае отсутствия решения сис-
темы;
6. Определение координат всех точек плоского рычажного механизма в соот-
ветствии с математической моделью (2.2);
7. Очистка графического окна системы;
8. Графическое отображение кинематической схемы плоского рычажного
механизма.
2.3 Описание используемых операторов, функций, процедур и методов
Подробное описание оператора присваивания, оператора цикла for, операто-
ра if, а также описание математических функций и функций символьно-
численного конвертирования представлено в п.1.3 пояснительной записки.
Функция
Round( const Number: Extended ):Int64
округляет число с пла-
вающей запятой (Number) до целого значения. Округление использует банковские
правила, где точная половина значения вызывает округление к четному числу.
Оператор
Repeat
начинает управляемый цикл, который всегда выполняется
не менее одного раза и заканчивается, когда Выражение(Expression) будет удов-
летворено (возвратится True). Цикл используется, когда важно, чтобы инструкции
выполнились не менее одного раза.
Repeat
Statement1;
{Statement2; ...}
Until Expression
Для создания и изменения изображения кинематической схемы плоского ры-

Page 14

Изм. Лист
№ докум.
Подпись Дата
Лист
15
ПДМЗ-101 00.00.122 ПЗ
чажного механизма в программе использованы методы Canvas. Canvas обеспечи-
вает пространство (холст, канву) для создания, хранения и модификации графиче-
ских объектов. Canvas является основой графической подсистемы Delphi.
Метод
Arc(x1,y1,x2,y2,x3,y3,x4,y4: Integer)
рисует дугу окружности или эл-
липса. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс.
Начальная точка дуги определяется пересечением эллипса с прямой, проходящей
через его центр и точку (x3,y3). Конечная точка дуги определяется пересечением
эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется
против часовой стрелки от начальной до конечной точки.
Метод
Chord(x1,y1,x2,y2,x3,y3,x4,y4:Integer)
рисует заполненную замкну-
тую фигуру, ограниченную дугой окружности или эллипса и хордой. Точки
(x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная
точка дуги определяется пересечением эллипса с прямой, проходящей через его
центр и точку (x3,y3). Конечная точка дуги определяется пересечением эллипса с
прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часо-
вой стрелки от начальной до конечной точки. Хорда соединяет точки(x3,y3) и
(x4,y4).
Метод
Draw(x,y:Integer;Graphic:TGraphic)
рисует изображение, содержа-
щееся в объекте, указанном параметром Graphic, сохраняя исходный размер изо-
браженя в его источнике и перенося изображение в область канвы объекта
TCanvas, верхний левый угол которой определяется параметрами x и y.
Метод
DrawFocusRect (const Rect:TRect)
рисует на канве в области Rect
изображение прямоугольника в виде, используемом обычно для отображения
рамки фокуса. При рисовании используется операция XOR, что позволяет удалить
изображение прямоугольника его повторной прорисовкой.
Метод
Ellipse (x1,y1,x2,y2:Integer)
рисует окружность или эллипс с помо-
щью текущих параметров пера Pen. Фигура заполняется текущим значением
Brush. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс.
Метод
FillRect(const: TRect)
заполняет прямоугольник канвы, указанный
параметром Rect, используя текущее значение Brush.
Метод
FloodFill (x,y:Integer;Color:TColor;FillStyle:TFillStyle)
закрашивает
текущей кистью Brush замкнутую область канвы, определенным цветом и началь-
ной точкой закрашивания (x,y). Точка с координатами x и y является произволь-
ной внутренней точкой заполняемой области, которая может иметь произвольную
форму. Граница этой области определяется сочетанием параметров Color и
FillStyle.
Метод
FrameRect(const Rect:TRect)
рисует на канве прямоугольную рамку
вокруг области Rect, используя установку текущей кисти Brush. Толщина рамки
— 1 пиксель. Область внутри рамки кистью не закрашивается.
Метод
LineTo (x,y:Integer)
рисует на канве прямую линию, начинающуюся с
текущей позиции пера PenPos и кончающуюся точкой (x,y). Текущая позиция пе-
ра PenPos перемещается в точку (x,y). При рисовании используются текущие ус-
тановки пера Pen.
Метод
MoveTo(x,y:Integer)
изменяет текущую позицию пера на заданную
точкой (x,y). При перемещении пера методом MoveTo ничего не рисуется.
Метод
Pie (x1,y1,x2,y2,x3,y3,x4,y4:Longint)
рисует замкнутую фигуру - сек-

Page 15

Изм. Лист
№ докум.
Подпись Дата
Лист
16
ПДМЗ-101 00.00.122 ПЗ
тор окружности или эллипса, с помощью текущих параметров пера Pen. Фигура
заполняется текущим значением Brush. Точки (x1,y1) и (x2,y2) определяют пря-
моугольник, описывающий эллипс. Начальная точка дуги определяется пересече-
нием эллипса с прямой, проходящейчерез его центр и точку (x3,y3). Конечная
точка дуги определяется пересечением эллипса с прямой, проходящей через его
центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до ко-
нечной точки. Рисуются прямые, ограничивающие сегмент и проходящие через
центр эллипса и точки (x3,y3) и (x4,y4).
Метод
Polygon (Points: array of TPoint)
рисует на канве замкнутую фигуру
(полигон, многоугольник) по множеству угловых точек, заданному массивом
Points. Первая из указанных точек соединяется прямой с последней. Рисование
проводится текущим пером Pen. Внутренняя область фигуры закрашивается те-
кущей кистью Brush.
Метод
Polyline(Points: array of TPoint)
рисует на канве кусочно-линейную
кривую по множеству точек, заданному массивом Points. Рисование проводится
текущим пером Pen. Метод не изменяет текущей позиции PenPos пера Pen.
Метод
Rectangle(x1,y1,x2,y2:Integer)
рисует на канве текущим пером Pen
прямоугольник, верхний левый угол которого имеет координаты (x1,y1), а ниж-
ний правый — (x2,y2). Прямоугольник закрашивается текущей кистью Brush.
Метод
RoundRect(x1,y1,x2,y2,x3,y3:Integer)
рисует на канве прямоугольную
рамку со скругленными углами, используя текущие установки пера Pen и запол-
няя площадь фигуры текущей кистью Brush. Рамка определяется прямоугольни-
ком с координатами углов (x1,y1) и (x2,y2). Углы скругляются с помощью эллип-
сов с шириной x3 и высотой y3.
Процедуры и функции пользователя.
Для отображения опор кинематической схемы использована процедура
Drop(x,y:integer;pb:TPaintBox;n:integer)
. В качестве формальных аргументов
принимаются координаты точки шарнира, сторона опоры и имя графического
элемента класса TPaintBox.
Пользовательская функция
Eset(x:integer;alf,bet:real):VArr
возвращает век-
тор значений функций описывающих систему 2.3. В качестве формальных аргу-
ментов принимаются углы , и
x
– перемещение ведущего звена механизма.
Пользовательская функция
New(x:integer;alf,bet:real):VArr
возвращает век-
тор корней системы уравнений 2.3 используя метод Ньютона. В качестве фор-
мальных аргументов принимаются углы , и
x
– перемещение ведущего звена
механизма.
Процедура
readP
производит присвоение переменным значений параметров
опор и звеньев механизма из формы приложения; производит обработку условий
2.92.11; изменяет параметры объекта ScrollBar1.
Процедура
solve(y:integer)
производит отображение перемещений механизма
в окне приложения в соответствии с изменением значения координаты ведущего
звена y.
2.4 Текст программного кода
unit Unit1;
a,b,c,d,x1,x2,x0,y0: integer;

Page 16

Изм. Лист
№ докум.
Подпись Дата
Лист
17
ПДМЗ-101 00.00.122 ПЗ
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graph-
ics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, math, jpeg;
type
VArr = array [1..2] of real;
TForm1 = class(TForm)
Edit6: TEdit;
GR: TPaintBox;
Edit7: TEdit;
Edit8: TEdit;
Edit10: TEdit;
UpDown6: TUpDown;
UpDown7: TUpDown;
UpDown8: TUpDown;
UpDown10: TUpDown;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Edit9: TEdit;
Label11: TLabel;
Button2: TButton;
Label2: TLabel;
ScrollBar1: TScrollBar;
Label1: TLabel;
Edit3: TEdit;
UpDown3: TUpDown;
Label5: TLabel;
Edit4: TEdit;
UpDown4: TUpDown;
Image1: TImage;
procedure UpDown9Changing(Sender: TObject; var Al-
lowChange: Boolean);
procedure UpDown1Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown2Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown10Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown6Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown7Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown8Click(Sender: TObject; Button:
TUDBtnType);
procedure UpDown9Click(Sender: TObject; Button:
TUDBtnType);
procedure ScrollBar1Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure GRClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
alf0,bet0:real;
flag:boolean;
implementation
{$R *.dfm}
procedure drop(x,y:integer;pb:TPaintBox;n:integer);
begin
with pb.Canvas do begin
moveto(x,y);
LineTo(x+round(n*cos(pi/3)),y+round(n*sin(pi/3)));
LineTo(x-round(n*cos(pi/3)),y+round(n*sin(pi/3)));
LineTo(x,y);
end;
end;
function ESET(y:integer;alf,bet:real):VArr;
begin
ESET[1]:=c*cos(alf)-d*cos(bet)-x1;
ESET[2]:=-c*sin(alf)+d*sin(bet)+y;
end;
function New(x:integer;alf,bet:real):VArr;
var j11,j21,j12,j22,r1,r2,r3,r4,k,m: extended;
alfs,bets:real;
i:byte;
const eps=0.0001; dx=0.00001;
begin
i:=0;
repeat
j11:= (ESET(x,alf+dx,bet)[1]-ESET(x,alf,bet)[1])/dx;
j12:= (ESET(x,alf,bet+dx)[1]-ESET(x,alf,bet)[1])/dx;
j21:= (ESET(x,alf+dx,bet)[2]-ESET(x,alf,bet)[2])/dx;
j22:= (ESET(x,alf,bet+dx)[2]-ESET(x,alf,bet)[2])/dx;
k:=1/(j11*j22-j21*j12);
r1:=j22*k;
r2:=-j12*k;
r3:=-j21*k;
r4:=j11*k;
alfs:=alf-(r1*ESET(x,alf,bet)[1]+r2*ESET(x,alf,bet)[2]);
bets:=bet-(r3*ESET(x,alf,bet)[1]+r4*ESET(x,alf,bet)[2]);
m:=sqrt(sqr(alf-alfs)+sqr(bet-bets));
alf:=alfs;
bet:=bets;
i:=i+1;
until (m<eps) or (i>200);
if i<=200 then begin NEW[1]:=alf; NEW[2]:=bet; alf0:=alf;
bet0:=bet; end
else flag:=false;
end;
procedure readP;
begin
a:=strtoint(form1.edit10.Text);
b:=strtoint(form1.edit6.Text);
c:=strtoint(form1.edit7.Text);
d:=strtoint(form1.edit8.Text);
x1:=strtoint(form1.edit3.Text);
x2:=strtoint(form1.edit4.Text);
flag:=true;
if (abs(x1/(c+d))<=1) and (abs(x2/(a+b))<=1) then begin
form1.scrollbar1.Max:=floor(sqrt(sqr(c+d)-sqr(x1)));
if (c+x1)<d then
form1.scrollbar1.Min:=ceil(sqrt(sqr(c-d)-sqr(x1)))
else form1.scrollbar1.Min:=-floor(sqrt(sqr(c+d)-sqr(x1)));
end
else flag:=false;
if (strtoint(form1.edit9.Text)>(form1.scrollbar1.Max)) then
begin
ellipse(tcx-3,tcy-3,tcx+3,tcy+3);
ellipse(tdx-3,tdy-3,tdx+3,tdy+3);
pen.Width:=1;

Page 17

Изм. Лист
№ докум.
Подпись Дата
Лист
18
ПДМЗ-101 00.00.122 ПЗ
form1.edit9.Text:=inttostr(form1.scrollbar1.Max);
form1.scrollbar1.Position:=form1.scrollbar1.Max;
end
else if (strtoint(form1.edit9.Text)<(form1.scrollbar1.Min))
then begin
form1.edit9.Text:=inttostr(form1.scrollbar1.Min);
form1.scrollbar1.Position:=form1.scrollbar1.Min;
end
else form1.scrollbar1.Position:=strtoint(form1.edit9.Text);
end;
procedure solve(y:integer);
var area:Trect;
tax,tay,tbx,tby,tcx,tcy,tdx,tdy,tox,toy:integer;
alf,bet,gam: real;
res:Varr;
begin
flag:=true;
res:= NEW(y,alf0,bet0);
bet:= res[2];
alf:= res[1];
if abs((x2+b*cos(alf+pi/2))/a)<=1
then gam:=arccos((x2+b*cos(alf+pi/2))/a)
{else begin
form1.scrollbar1.Max:=y-1;
form1.edit9.Text:=inttostr(form1.scrollbar1.Max);
form1.scrollbar1.Position:=form1.scrollbar1.Max;
end;}
else flag:=false;
if flag=true then
begin
form1.label2.Visible:=false;
tox:= x0;
toy:= y0;
tdx:= tox+x1;
tdy:= toy+y;
tcx:= round(tdx+d*cos(bet));
tcy:= round(tdy+d*sin(bet));
tbx:= round(tox-b*cos(alf+pi/2));
tby:= round(toy-b*sin(alf+pi/2));
tax:= tox+x2;
tay:= round(tby+a*sin(gam));
area.Left:=0;
area.Top:=0;
area.Right:=2*form1.gr.Width;
area.Bottom:=2*form1.gr.Height;
with form1.gr.Canvas do
begin
Brush.Color:=clwhite;
FillRect(area);
pen.Width:=2;
moveto(tdx,tdy);
lineto(tcx,tcy);
lineto(tox,toy);
lineto(tbx,tby);
LineTo(tax,tay);
drop(tox,toy,form1.gr,10);
rectangle(tdx-5,tdy-10,tdx+5,tdy+10);
rectangle(tax-5,tay-10,tax+5,tay+10);
ellipse(tox-3,toy-3,tox+3,toy+3);
ellipse(tax-3,tay-3,tax+3,tay+3);
ellipse(tbx-3,tby-3,tbx+3,tby+3);
moveto(tdx,340);lineto(tdx,180);
moveto(tax,340);lineto(tax,180);
end;
end
else
begin
form1.label2.Visible:=true;
form1.gr.Canvas.Brush.Color:=clwhite;
form1.gr.Canvas.FillRect(area);
end;
end;
procedure TForm1.UpDown9Changing(Sender: TObject;
var AllowChange: Boolean);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown1Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown2Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown10Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown6Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown7Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown8Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.UpDown9Click(Sender: TObject; But-
ton: TUDBtnType);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
edit9.Text:= inttostr(scrollbar1.Position);
solve(scrollbar1.Position);
end;
begin
GetCursorPos(p);
x0:= p.x-gr.Left-form1.Left-8;

Page 18

Изм. Лист
№ докум.
Подпись Дата
Лист
19
ПДМЗ-101 00.00.122 ПЗ
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.GRClick(Sender: TObject);
var
p: tpoint;
y0:= p.y-gr.Top-form1.Top-30;
readP;
solve(scrollbar1.Position);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
x0:=180;
y0:=200;
bet0:=0.025;
alf0:=1.418;
end;
end.
2.5 Форма приложения
В соответствии алгоритмом решения задачи был разработан интерфейс про-
граммы представленный на рисунке 5. На форме размещены следующие компо-
ненты:
PaintBox – компонент, обеспечивающий пространство (холст, канву) для соз-
дания, хранения и модификации графических объектов;
Label - компонент для вывода однострочного текста;
Edit - компонент для ввода/вывода данных;
Button - кнопка;
UpDown – компонент ассоциируемый c компонентом TEdit, служащий для
увеличения или уменьшения численного значения поля на величину инкремента;
Image – компонент, содержащий изображение хранящееся в файле;
ScrollBar скроллинг, используемый для изменения какого-либо параметра.
При запуске приложения на экране отображается рисунок расчетной схемы
механизма, а также построение механизма, решенное относительно параметров
(значения длин узлов проверенных по условию работоспособности) установлен-
ных по умолчанию. Пользователю предлагается изменить текущие значения длин
звеньев и смещения осей ползунов механизма с помощью компонентов Edit либо
UpDownt, а также задать положение ведущего звена – ползуна
C
, с помощью ком-
понента ScrollBar. При изменении параметров кинематической схемы графиче-
ское изображение механизма меняется динамически. Также изменяется диапазон
возможного перемещения ползуна. В случае отсутствия решения системы (закли-
нивание механизма) с текущими параметрами, на экране отображается сообщение
о невозможности отображения механизма. Положение опоры
O
механизма воз-
можно изменить щелчком левой кнопкой мыши в любой точке пространства кан-
вы PaintBox. Выбранная точка будет принята за точку
O
.

Page 19

Изм. Лист
№ докум.
Подпись Дата
Лист
20
ПДМЗ-101 00.00.122 ПЗ
Рисунок 5 — Интерфейс приложения для решения задачи 2.

Page 20

Изм. Лист
№ докум.
Подпись Дата
Лист
21
ПДМЗ-101 00.00.122 ПЗ
Заключение
В результате выполнения курсового проекта было создано два программных
приложения для решения поставленных задач.
Были систематизированы знания в области программирования в среде
Borland Delphi с использованием языка программирования Object Pascal.

Page 21

Изм. Лист
№ докум.
Подпись Дата
Лист
22
ПДМЗ-101 00.00.122 ПЗ
Список литературы
1. Сурков К.А., Сурков ДА., Вальвачев А.Н. Программирование в сред1
Delphi 2.0: - Мн.: ООО "Попурри", 1997-640с.
2.Сван Т. Основы программирования в Delphi Windows95r| "Диалектна",
199б-480с.
3.Энго Ф. Как программировать на Delphi 3: - К.: "ДиаСофт", 1997-200с.
4.Краснов М. Графика в проектах Delphi: - СПб.: BHV - Санкт Петер-
бург,2000-352с.
5. Мамонтова Г.Г. Высшая математика: - Мн.: Новое знание, 2006-686с.
6. Корн Г., Корн Т. Справочник по математике для научных работников Щ
инженеров. — М.: Наука, 1970. —575 с.
7. Ильин В. А., Позняк Э. Г. Линейная алгебра: Учебник для вузов. — 6-е
изд., М.: ФИЗМАТЛИТ, 2004. — 280 с.

Информация о работе Программирования в среде Bor- land Delphi с использованием пользовательских процедур и функций