Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ооп55.docx
Скачиваний:
6
Добавлен:
27.03.2015
Размер:
91.24 Кб
Скачать

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 равен искомому ключу)

Функция поиска элементов с целью удаления;

Функция удаления элемента из дерева поиска;

}}}