3.Алгоритм
Алгоритм функции проверки параллельности 2 прямых;
{
if (first.x0)
{
k->second.x/double (first.x);
if (k*first.y second.y)
flag->0;
else
flag->1;
}
else
if (second.x 0)
{
k->first.x/double (second.x);
if (k*second.y first.y)
flag->0;
else
flag->1;
}
else
if (second.y = first.y)
flag->0;
else
flag->1;
}
Алгоритм функции проверки, является ли фигура трапецией;
{
if (никакая из координат ppt не больше Xmax, Ymax)
ppt->Координаты трапеции first;
if(никакая из координат ppt не совпадают)
{
one.x->ppt[0].x-ppt[1].x;
one.y->ppt[0].y-ppt[1].y;
two.x->ppt[2].x-ppt[3].x;
two.y->ppt[2].y-ppt[3].y;
flag -> проверка параллельности one и two;
if (flag)
{
one.x->ppt[0].x-ppt[3].x;
one.y->ppt[0].y-ppt[3].y;
two.x->ppt[1].x-ppt[2].x;
two.y->ppt[1].y-ppt[2].y;
flag -> проверка параллельности one и two;
if (flag)
{
one.x->ppt[0].x-ppt[2].x;
one.y->ppt[0].y-ppt[2].y;
two.x->ppt[1].x-ppt[3].x;
two.y->ppt[1].y-ppt[3].y;
flag -> проверка параллельности one и two;
if (flag)
{
f->ppt[2];
ppt[2]->ppt[3];
ppt[3]->f;
}
}
Алгоритм поиска точки внутри трапеции;
{
ppt=Координаты трапеции first;
one.x->ppt[0].x-ppt[2].x;
one.y->ppt[0].y-ppt[2].y;
two.x->ppt[1].x-ppt[3].x;
two.y->ppt[1].y-ppt[3].y;
if (one.x 0)
{
k->(-1)*(one.y)/double(one.x);
u->(-1)*((two.x*k) + two.y);
point1.x->ppt[1].x-ppt[0].x;
point1.y->ppt[1].y-ppt[0].y;
point1.y->point1.x*k + point1.y;
l->(point1.y/u);
point.x->ppt[1].x+l*two.x;
point.y->ppt[1].y+l*two.y;
}
else
{
l->(ppt[1].x-ppt[0].x)/(-two.x);
point.x->ppt[1].x+l*two.x;
point.y->ppt[1].y+l*two.y;
}
}
Алгоритм функции рисующую контур трапеции
{
rt->Размеры окна;
Xmax->rt.right;
Ymax->rt.bottom;
flag->Проверка является ли фигура first трапецией
if (flag)
Нарисовать контур трапеции first;
else
flag->false;
}
Алгоритм функция конструктор для класса Figure_contour
{
this->цвет пера зелёный;
this->размер пера 1 пиксель;
Координаты трапеции (10.10)(10.20)(20.20)(20.10);
flag->false;
}
Алгоритм функции смещающий контур трапеции
{
Закрасить данную трапецию белой трапецией;
for (i->0;i<4;i++)
{
ppt[i].x->ppt[i].x+enter.x;
ppt[i].y->ppt[i].y+enter.y;
}
Нарисовать трапецию с новыми координатами;
}
Алгоритм функции рисующую закрашенную трапецию;
{
Функция рисующая контур трапеции;
point->точка внутри трапеции first;
Закрасить данную трапецию по точки point
}
Алгоритм функции конструктор для класса Shaded_figure
{
this->цвет пера зелёный;
this->цвет кисти красный;
this->цвет ограничивающего контура зелёный;
this->размер пера 1 пиксель;
Координаты трапеции (10.10)(10.20)(20.20)(20.10);
flag->false;
}
Алгоритм функции смещающий закрашенную трапецию
{
Закрасить данную трапецию белой трапецией;
for (i->0;i<4;i++)
{
ppt[i].x->ppt[i].x+enter.x;
ppt[i].y->ppt[i].y+enter.y;
}
Нарисовать трапецию с новыми координатами;
if (flag)
Закрасить трапецию с новыми координатами;
}
Алгоритм поиска площади равной сумме площадей треугольников, на которые некоторая точка делит трапецию;
{
side_vnut[0]->sqrt( double (((ppt[0].x-point.x)*(ppt[0].x-point.x)+(ppt[0].y-point.y)*(ppt[0].y-point.y))));
side_vnut[1]->sqrt( double (((ppt[1].x-point.x)*(ppt[1].x-point.x)+(ppt[1].y-point.y)*(ppt[1].y-point.y))));
side_vnut[2]->sqrt( double (((ppt[2].x-point.x)*(ppt[2].x-point.x)+(ppt[2].y-point.y)*(ppt[2].y-point.y))));
side_vnut[3]->sqrt( double (((ppt[3].x-point.x)*(ppt[3].x-point.x)+(ppt[3].y-point.y)*(ppt[3].y-point.y))));
side_vnesh[0]->sqrt( double (((ppt[0].x-ppt[1].x)*(ppt[0].x-ppt[1].x)+(ppt[0].y-ppt[1].y)*(ppt[0].y-ppt[1].y))));
side_vnesh[1]->sqrt( double (((ppt[1].x-ppt[2].x)*(ppt[1].x-ppt[2].x)+(ppt[1].y-ppt[2].y)*(ppt[1].y-ppt[2].y))));
side_vnesh[2]->sqrt( double (((ppt[2].x-ppt[3].x)*(ppt[2].x-ppt[3].x)+(ppt[2].y-ppt[3].y)*(ppt[2].y-ppt[3].y))));
side_vnesh[3]->sqrt( double (((ppt[3].x-ppt[0].x)*(ppt[3].x-ppt[0].x)+(ppt[3].y-ppt[0].y)*(ppt[3].y-ppt[0].y))));
p->(side_vnut[0]+side_vnut[1]+side_vnesh[0])/2.0;
square -> sqrt(p*(p-side_vnut[0])*(p-side_vnut[1])*(p-side_vnesh[0]));
p->(side_vnut[1]+side_vnut[2]+side_vnesh[1])/2.0;
square ->sqrt(p*(p-side_vnut[1])*(p-side_vnut[2])*(p-side_vnesh[1]))+square;
p->(side_vnut[2]+side_vnut[3]+side_vnesh[2])/2.0;
square -> sqrt(p*(p-side_vnut[2])*(p-side_vnut[3])*(p-side_vnesh[2]))+square;
p->(side_vnut[3]+side_vnut[0]+side_vnesh[3])/2.0;
square -> sqrt(p*(p-side_vnut[3])*(p-side_vnut[0])*(p-side_vnesh[3]))+square;
}
Алгоритм проверки вложенности 2 трапеций одна в другую;
{
flag->true;
plosh1->Площадь трапеции;
plosh2-> Площадь трапеции second;
if (plosh1<plosh2)
{
for (int i=0;i<4;i++)
{
third->first;
first->second;
second->third;
}
plosh1->plosh2;
}
ppt1->координаты трапеции first;
ppt2->координаты трапеции second;
for (int i->0;i<4&&flag;i++)
if (plosh1< площади равной сумме площадей треугольников на которые точка ppt[i] делит трапецию с координатами ppt1 )
flag->false;
}
Алгоритм функции рисующей две вложенных трапеции (одна в другую) и закрашивающая пространство между ними;
{
flag->Проверка является ли фигура трапецией;
if (flag)
flag->Проверка является ли фигура с координатами second трапецией;
if (flag)
flag->проверка вложенности 2 трапеции second ;
if (flag)
{Нарисовать трапецию first;
Закрасить трапецию first;
Нарисовать трапецию second;
}
}
Алгоритм функции конструктор для класса Shaded_figure
{
this->цвет пера зелёный;
this->цвет кисти красный;
this->цвет ограничивающего контура зелёный;
this->размер пера 1 пиксель;
Координаты трапеции (10.10)(10.20)(20.20)(20.10);
координаты second (15.10)(10.15)(15.20)(20.15);
цвет контура second- зелёный
flag->false;
}
Алгоритм функции смещающий вложенные трапеции
{
Закрасить данную трапецию белой трапецией;
for (i->0;i<4;i++)
{
ppt[i].x->ppt[i].x+enter.x;
ppt[i].y->ppt[i].y+enter.y;
}
Нарисовать трапецию с новыми координатами;
if (flag)
Функция смещения second на enter от начального положения;
}
Алгоритм функции конструктора
{
top->NULL;
}
Алгоритм функции деструктора
{
Алгоритм функции удаления вершин дерева при концевом обходе;
}
Алгоритм функции сохранения данных;
{
Алгоритм функции занесение в файл с название enter,элементы дерева при прямом обходе;
}
Алгоритм функции загрузки данных;
{
Чтение из файла enterэлементаpromи его ключа;
Функция добавления элемента promв дерево поиска;
}
Алгоритм функции распечатки данных;
{
Записать элементы дерева при прямом обходе в линейный список resuolt;
}
Алгоритм функции, добавляющей элементы в дерево поиска(шаблон)
{
if (top- не существует)
{
top->Добавляемый элемент
}
else
{
prom->top;
flag->true;
while (flag)
if (ключ(prom)> key)
{
if (левый потомок prom-не существует)
{
elem->левый потомок prom;
}
else
prom->левый потомок prom;
}
else
if (правый потомок prom-не существует)
{
elem->правый потомок prom;
}
else
prom->левый потомок prom;
}
}
Алгоритм поиска элементов в дереве поиска
{
if (top-не существует)
spis->
else
{
prom -> top;
flag->true;
while (flag)
if (ключ(prom)=key)
{
Добавить элемент трапеции prom в список spis;
if (правый потомок prom-существует)
prom-> правый потомок prom
else
flag->false;
}
else
if(ключ(prom) > key)
if (левый потомок prom-существует)
prom-> левый потомок prom
else
flag->false;
else
if (левый потомок prom-существует)
prom-> левый потомок prom
else
flag->false;
}}
Алгоритм функции поиска элементов с целью удаления
{
pred_l->NULL;
pred_r->NULL;
flag->true;
while (flag)
if (prom-существует)
if (ключ(prom)=key)
{
Добавить элемент трапеции в список resoult
if (prom=enter)
{
Функция удаления элемента из дерева поиска c заданным ключом;
prom->enter;
}
else
{
Функция удаления элемента из дерева поиска c заданным ключом;
if (prom-не существует)
if (pred_l-не существует)
правый потомок pred_r ->NULL;
else
левый потомок pred_l->NULL;
}
}
else
if(ключ prom > key)
if (левый потомок prom-существует)
{
pred_l->prom;
pred_r->NULL;
prom->левый потомок prom;
}
else
flag->false;
else
if (правый потомок prom-существует)
{
pred_l->NULL;
pred_r->prom;
prom->правый потомок prom;
}
else
flag->false;
else
flag->false;}
Алгоритм функции удаления элемента из дерева поиска
{
elem2->NULL;
if (правый потомок elem не существует)
{
if (левый потомок elem существует)
{
элемент elem заменяется его левым потомком;
удаляем левого потомка elem;
}
else
{
удаляем элемент elem;
}
}
else
{
if (левый потомок правого потомка элемента elem не существует)
{
элемент elem заменяется его правым потомком;
удаляем правого потомка elem;
}
else
{
elem-> левый потомок правого потомка элемента elem;
if (левый ключ потомка правого потомка элемента elem равен искомому ключу)
Функция поиска элементов с целью удаления;
Функция удаления элемента из дерева поиска;
}}}