Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая ООП для заочников

.doc
Скачиваний:
66
Добавлен:
01.05.2014
Размер:
60.93 Кб
Скачать

ЗАДАНИЕ:

1.Спроектировать иерархию классов геометрических объектов:

1)точка

2)простая фигура

3)композиционная фигура,представленная частью вершин и способами расчета других вершин и ключевых точек.

2.Математическими способами реализовать вложенность объектов на основе объекты класса.

3.Обеспечить выполнение операций с геометрическими фигурами.

а)перемещение на указанное расстояние вдоль заданной прямой;

б)поворот на указанный угол относительно середины фигуры;

в)отображение относительно одной из вершин фигуры;

г)проекцию фигуры на ось У;

д)определение периметра,длинны дуги;

е)определение максимального расстояния от фигуры до начала координат

4.Спроектировать класс для организации из фигур односвязного списка.

5.Провести на основе исходного списка построение нескольких содержащих фигуры обладающие свойствами 4.е вне заданного диапазона.

6.Выполнить сортировку полученных списков на основе 4.е не возрастанию.

Используемые математические формулы:

X=x1cos(a)+y1sin(a) Y=-x1sin(a)+y1cos(a) –для сдвига фигуры на угол а.

X=sqr(l*l/(k*k+1))+x1 Y=k*X+c –для сдвига фигуры по заданной прямой

где k=tg(a)

L=sqr(x*x+y*y) –для вычисления расстояния от вершины до начала координат

Исходная фигура создана с центром в начале координат с вершинами в точках

(-2;2)(-2;-2)(2;-2)(2;2) дуга (полу-окружность) с центром (0;2) и радиусом R=2.

Созданные классы.

class tochka -для работы с вершинами и точками

class figura -для работы с прямоугольником

class duga -для работы с дугой

class compos -для создания и работы с композицией фигур

class spisok -для работы со списком фигур

Для сортировки массива используется метод пузырька.

Код программы:

#include "iostream.h"

#include "conio.h"

#include "math.h"

float xx,yy;

class tochka {

float x;

float y;

public:

tochka(){x=0;y=0;};

void izmena_koordinat(float x1,float y1)

{x=x1;y=y1;

};

void sdvig(float ygol,float otrezok)

{ float x0,y0;

if (otrezok && ygol)

{x0=sqrt(otrezok*otrezok/(tan(ygol)+1))+x;

cout <<"("<<x0;

y0=tan(ygol)*x0+y-tan(ygol)*x;

cout <<";"<<y0<<") ";

};

if (otrezok==0 && ygol)

{x0=x*cos(ygol)+y*sin(ygol);

cout <<"("<<x0;

y0=-x*sin(ygol)+y*cos(ygol);

cout <<";"<<y0<<") ";

}

}

float get_x(){ return x;};

float get_y(){ return y;};

~tochka(){};

};

class figura {

tochka a1,a2,a3,a4;

float dlinna;

float x,y;

public:

figura()

{

a1.izmena_koordinat(-2,2);

a2.izmena_koordinat(2,2);

a3.izmena_koordinat(2,-2);

a4.izmena_koordinat(-2,-2);

};

float get_dlinna()

{return dlinna;};

void sdvig(float ygol,float otrezok)

{

cout << "Koordinaty vershin posle sdviga\n";

a1.sdvig(ygol,otrezok);

a2.sdvig(ygol,otrezok);

a3.sdvig(ygol,otrezok);

a4.sdvig(ygol,otrezok);

}

void otnositelno_vershin()

{xx=a1.get_x();

yy=a1.get_y();

cout <<xx<<" "<<yy<<"\n";

cout <<"Koordinati vershin\n";

cout <<2*xx-a2.get_x()<<" "<<2*yy-a2.get_y()<<"\n";

cout <<2*xx-a3.get_x()<<" "<<2*yy-a3.get_y()<<"\n";

cout <<2*xx-a4.get_x()<<" "<<2*yy-a4.get_y()<<"\n";

}

void proekci()

{cout <<"Proekciay vershin na y \n";

cout <<a1.get_y()<<" "<<a2.get_y()<<" "<<a3.get_y()<<" "<<a4.get_y()<<"\n";

};

void perimetr()

{ cout <<"Perimetr figury\n";

cout <<2*(a2.get_x()-a1.get_x())+(a2.get_y()-a3.get_y()+(3.14*2))<<"\n";

};

void max()

{ x=a1.get_x();

y=a1.get_y();

dlinna=sqrt(x*x+y*y);

if (dlinna<(a2.get_x()*a2.get_x()+a2.get_y()*a2.get_y()))

{ x=a2.get_x();

y=a2.get_y();

dlinna=sqrt(x*x+y*y);

}

if (dlinna<(a3.get_x()*a3.get_x()+a3.get_y()*a3.get_y()))

{ x=a3.get_x();

y=a3.get_y();

dlinna=sqrt(x*x+y*y);

}

if (dlinna<(a4.get_x()*a4.get_x()+a4.get_y()*a4.get_y()))

{ x=a4.get_x();

y=a4.get_y();

dlinna=sqrt(x*x+y*y);

}

};

void print()

{ cout <<"Max dlinna "<<dlinna<<"\n";

cout <<"v vershine x="<<x<<" y="<<y<<"\n";

};

void izmena_figura(float x1,float y1)

{ a1.izmena_koordinat(a1.get_x()+x1,a1.get_y()+y1);

cout <<"("<<a1.get_x()<<";"<<a1.get_y()<<")";

a2.izmena_koordinat(a2.get_x()+x1,a2.get_y()+y1);

cout <<"("<<a2.get_x()<<";"<<a2.get_y()<<")";

a3.izmena_koordinat(a3.get_x()+x1,a3.get_y()+y1);

cout <<"("<<a3.get_x()<<";"<<a3.get_y()<<")";

a4.izmena_koordinat(a4.get_x()+x1,a4.get_y()+y1);

cout <<"("<<a4.get_x()<<";"<<a4.get_y()<<")";

};

~figura(){};

};

class duga {

tochka c;

float radius;

public:

duga()

{c.izmena_koordinat(0,2);

radius=2;};

~duga(){};

void sdvig(float ygol,float otrezok)

{ cout << "\nKoordinata centra dugi posle sdviga\n";

c.sdvig(ygol,otrezok);

cout << " Radius "<<radius;

}

void otnositelno_vershin()

{

cout <<"Koordinati centra dugi\n";

cout <<2*xx-c.get_x()<<" "<<2*yy+4-c.get_y()<<"\n";

}

void proekci()

{cout <<"Proekciay dugi na y\n";

cout <<"Center "<<c.get_y()<<"\n";

cout <<"Vershina "<<c.get_y()+radius<<"\n";

};

void perimetr()

{ cout <<"dlina dugi\n";

cout <<radius*3.14;

};

};

class compos {

figura kvadrat;

duga okr;

public:

compos(){};

void sdvig(float ygol,float otrezok)

{kvadrat.sdvig(ygol,otrezok);

okr.sdvig(ygol,otrezok);

};

void otnositelno_vershin()

{ cout << "Posle sdviga otnositelno vershini ";

kvadrat.otnositelno_vershin();

okr.otnositelno_vershin();

}

void proekci()

{ kvadrat.proekci();

okr.proekci();

};

void perimetr()

{kvadrat.perimetr();

okr.perimetr();

};

void max()

{kvadrat.max();

kvadrat.print();

};

~compos(){};

};

class spisok

{

figura f;

public:

spisok *next;

void izmena_figura(float x1,float y1)

{ f.izmena_figura(x1,y1);f.max();};

float get_dlinna()

{ return f.get_dlinna();};

spisok(){};

~spisok(){};

};

main()

{ int nomer=1;

float ygol,otrezok;

compos composition;

spisok *p,*q,*q1,*q3;

while (nomer)

{ clrscr();

cout << "1.Sdvig na rasstoaynie\n";

cout << "2.Povorot na ygol\n";

cout << "3.Otnositelno tochki\n";

cout << "4.Proekciay\n";

cout << "5.Perimetr\n";

cout << "6.Maximalnoe rasstoaynie\n";

cout << "0.EXIT\n";

cin>>nomer;

switch(nomer)

{

case 1:cout << "1.Sdvig na rasstoaynie\n";

cout << "Vvedite ygol\n";

cin>>ygol;

cout << "Vvedite otrezok\n";

cin>>otrezok;

composition.sdvig(ygol,otrezok);

break;

case 2:cout << "2.Povorot na ygol\n";

cout << "Vvedite ygol\n";

cin>>ygol;

composition.sdvig(ygol,0);

break;

case 3:cout << "3.Otnositelno vershini\n";

composition.otnositelno_vershin();

break;

case 4:cout << "4.Proekciay na y\n";

composition.proekci();

break;

case 5:cout << "5.Perimetr\n";

composition.perimetr();

break;

case 6:cout << "6.Maximalnoe rasstoaynie\n";

composition.max();

break;

default:cout << "0.exit\n";break;

}

getch();

}

p=new spisok;

q=p;

cout << "Isxodnii spisok\n";

for (float i=-4;i<7;i++)

{ cout << "i="<<i<<" "<<q->get_dlinna()<<" ";

q->izmena_figura(i,i);

cout << "\n";

q->next=new spisok;

q=q->next;

}

q=p;

for (float j=-4;j<7;j++)

{

if (q->get_dlinna()>q->next->get_dlinna())

{ p=q->next;

q1=q->next->next;

q->next->next=q;

q->next=q1;

q=p->next;

}

else

{

q=q->next;

}

}

q=p;

for (float k=-4;k<7;k++)

{ cout << "i="<<k<<" ";

cout <<q->get_dlinna()<<"\n";

q=q->next;

}

getch();

}