Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Розробити клас трикутника, чотирикутника, кола, точки

Клас точки

Даний клас добавлено один член класу який задає колір точки та переоприділений метод show базового класу. Також в конструкторі викликається конструктор базового класу в якому параметр конструктора задає кількість точок в класі. В даному класі використовується одна точка.

class CPoint:public shape {

private:

int color; /*колір точки*/

public:

CPoint();/*конструктор*/

virtual~point();/*деструктор*/

virtual void show();//переоприділення функції показу фігури

};

/*реалізація конструктора*/

CPoint::CPoint():shape(1) {

}

/*реалізація деструктора*/

CPoint::~CPoint(){

}

реалізація функції показу(show)

void CPoint::show(){

setcolor(2);

line(p[0].x,p[0].y,p[0].x,p[0].y);

}

Клас трикутника

Реалізація подібна попередньому класові за винятком кількості точок які зберігає в собі клас (3 точки)

class CTriangle:public CShape {

public:

CTriangle();

~CTriangle();

virtual void show();

};

CTriangle::CTriangle():shape(3) {

}

CTriangle::~CTriangle() {

}

void Сtriangle::show() {

moveto(p[0].x,p[0].y);

lineto(p[1].x,p[1].y);

lineto(p[2].x,p[2].y);

lineto(p[0].x,p[0].y);

}

Клас чотирикутника

Аналогічно попередньому класові за винятком кількості точок для даного класу кількість точок рівняється 4

class CQuadrorange: public CShape {

public:

CQuadrorange();

~CQuadrorange();

virtual void show();

};

CQuadrorange::CQuadrorange():shape(4){

}

CQuadrorange::~CQuadrorange() {

}

void CQuadrorange::show() {

moveto(p[0].x,p[0].y);

lineto(p[1].x,p[1].y);

lineto(p[2].x,p[2].y);

lineto(p[3].x,p[3].y);

lineto(p[0].x,p[0].y);

}

Клас кола

В даному класі використовується одна точка яка задає координати центра кола. Добавлено один член класу, який зберігає в собі радіусом кола, і одну функцію, яка задає радіус кола. Переоприділена віртуальна функція show, яка відповідає за відображення геометричної фігури на екрані.

class CColo: public CShape {

private:

int radius; /* зберігає радіус кола */

public:

CColo();

~CColo();

void set_radius(int); /*функція що встановлює радіус кола*/

virtual void show();

};

/* задає тільки одну точку – центр кола на екрані */

CColo::CColo():shape(1) {

radius =0 ;

}

CColo::~CColo() {

}

void CColo::set_radius(int r) {

radius=r;

}

void CColo::show() {

circle(p[0].x,p[0].y,radius);}

Розробити контейнер класів фігур для управління групою фігур на екрані.

Створимо клас за допомогою якого можна керувати групою геометричних фігурами на екрані. В класі створено вказівник на групу фігур. Добавлені функції руху всіх геометричних фігур та добавлення геометричних фігур в контейнер.

class CConteiner {

private:

CShape *CShapes[MAX_SHAPE];/*масив фігур якими потрібно керувати на екарані монітора*/

int count;/*кількість заданих фігур*/

int exit;

public:

CConteiner();/*конструктор */

~CConteiner();/*деструктор*/

void action();/*виконує рух групи фігур на екрані*/

void add_shape(shape*);/*добавляє фігуру до контейнера */

};

CConteiner::CConteiner() {

count=0;

}

CConteiner::~CConteiner() {

}

void CConteiner::add_shape(shape* fig) {

if (count<MAX_SHAPE) {

shapes[count]=fig;

count++;

}

}

void CConteiner::action() {

for (int i=0;i<count;i++) {

shapes[i]->get_move()->current_movex=0;

shapes[i]->get_move()->current_movey=0;

}

while (1) {

exit=1;

for (int i=0;i<count;i++) {

if((shapes[i]->get_move()->current_movex<shapes[i]->get_move()->endx)

||(shapes[i]->get_move()->current_movey<shapes[i]->get_move()->endy)){

shapes[i]->move();

shapes[i]->get_move()->current_movex+=shapes[i]->get_move()->stepx;

shapes[i]->get_move()->current_movey+=shapes[i]->get_move()->stepy;

exit=0;

delay(10);

}

}

if (exit) break;

}

}

Літинг програми

#include <iostream.h>

#include <conio.h>

#include <graphics.h>

#include <stdio.h>

#include <math.h>

#include <dos.h>

структура точки яка зберігає в собі координати по х и по y

typedef struct _point {

int x;

int y;

} POINT, *PPOINT;

/* об’явлення типу функції для вирахування координат при русі фігури на екрані /*

typedef double (func)(double);

/* об’явлення типів руху фігури */

enum TYPE {MT_LINE=0, /* рух по прямій лінії */

MT_OBERT, /*поворот фігури */

MT_RESHAPE, /* зміна розмірів фігури */

MT_USER} ; /* рухи користувачів, тип руху може задавати користувач за допомогою функції */

/*Структура, яка зберігає в собі дані про рух фігури */

typedef struct _move {

TYPE type; /* тип руху */

int stepx; /* крок по х */

int stepy; /* крок по y */

int endx; /* кінцева точка по х */

int endy; /* кінцева точка по y */

int centr_x; /* центр координат */

int centr_y; /* центр координат */

func*func_x; /* функції руху по х */

func*func_y; /* функції руху по y */

void*tag; /* можна зберігати різні дані */

int erase; /* визначає стирати фігури при русі чи ні */

int current_movex; /* зарезервовано програмою */

int current_movey; /* зарезервовано програмою */

} MOVE,*PMOVE;

class shape {

protected:

POINT* p; /* вказівник на масив точок */

int count; /* кількість точок */

int current; /* поточна точка */

PMOVE m_move; /* структура типу руху фігури */

public:

shape(int); /* конструктор вхідний параметр кількість точок у фігури */

virtual~shape();/* деструктор */

void set_point(int,int); /* додає точку */

void set_move(PMOVE); /* встановлює тип руху */