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

Лабораторная работа 3

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

Министерство Образования Российской Федерации.

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра МО ЭВМ

Лабораторная работа № 3

Выполнил: студент группы № 3341 Волков А.Н.

Проверил:

Санкт-Петербург

2006 год

Постановка задачи.

Содержательная постановка задачи.

На квадратном планшете реализовать размещение цветных треугольников

Уточнение постановки задачи.

Треугольники задаются списком из трех точек и цвета, при этом треугольник может быть произвольным.

Сценарий диалога с пользователем.

Тестирующая программа выполняет необходимые действия по тестированию методов классов и выводит текущие результаты на экран.

Разработка программы.

Разработка классов

Были разработаны необходимые для реализации Планшета класс треугольник, класс цветной треугольник, а также класс Квадратный планшет.

Для реализации данных классов активно использовались ранее разработанные классы.

Описание программы.

Классовая структура.

В программе разработаны 3 новых класса:

  1. класс «cTriangle» - реализация треугольника

  2. класс «cColTriangle» - реализация цветного треугольника

  3. класс «cBoard» - реализация квадратного планшета

cBoard

члены-данные

Члены-функции

Er

Список цветных тр-ков

Correct

Проверка треугольника

addontable

Проверка на возможность добавить треугольник

reform

Иодификатор планшета

SetLi

Модификатор списка треугольников

Add

Добавление треугольника

boardout

Вывод на экран состояние планшета

cTriangle

члены-данные

члены-функции

Top

Три вершины

GetTopXY

Селектор координат вершины

SetTopXY

Модификатор координат вершины

GetTop

Селектор вершины

Move

Движение треугольника

Rotate

Вращение треугольника

Mirror

Зеркальное отображение

Scale

Масштабирование

GetX

Модификатор абсциссы

GetY

Модификатор ординаты

out

Вывод состояния треугольника на экран

cColTriangle

Члены-данные

члены-функции

Colors Color

Цвета

SetColor

Модификатор цвета

GetColor

Селектор Цвета

Set

Установка треугольника

Out

Вывод треугольника на экран

Характеристика программы.

Список файлов.

cpoint.h, cpoint.cpp класс точка

cfig.h, cfig.cpp класс квадрат

cLEl.h, cLiEl.cpp класс элемент списка

cList.h, cList.cpp класс циклический однонаправленный список

test3.cpp тестирующая программа.

ic.h дополнительный класс целого числа

ctria.h,ctria.cpp класс треугольник

ccoltria.h,ccoltria.cpp класс цветной треугольник

cboard.h,cboard.cpp класс квадратный планшет

Исследование.

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

Приложения.

Листинг исходного кода программы.

СTRIA.H

#ifndef _triangle_

#define _triangle_

#include <conio.h>

#include <math.h>

#include <iostream.h>

#include <fstream.h>

#include "cPoint.cpp"

#include <values.h>

#include <stdlib.h>

class cTriangle

{

cPoint Top[3];

public:

cTriangle();

cTriangle(cPoint P1,cPoint P2,cPoint P3);

void GetTopXY(int i, double &x,double &y);

void SetTopXY(int i, double x, double y);

cPoint GetTop(int i);

void Move(double dx, double dy);

void Rotate(double x0,double y0, double a);

void Mirror(double x0, double y0);

void Scale(double coef);

double GetX(int i);

double GetY(int i);

void Set(cTriangle F);

void out();

~cTriangle() {};

};

#endif

CTRIA.CPP

#ifndef _trianglexe_

#define _trianglexe_

#include "cTria.h"

cTriangle::cTriangle()

{

double p1=0.0,p2=1.0;

Top[0].SetXY(p1,p1);

Top[1].SetXY(p2,p1);

Top[2].SetXY(p1,p2);

};

cTriangle::cTriangle(cPoint P1,cPoint P2,cPoint P3)

{

Top[0].SetXY(P1.GetX(),P1.GetY());

Top[1].SetXY(P2.GetX(),P2.GetY());

Top[2].SetXY(P3.GetX(),P3.GetY());

};

void cTriangle::GetTopXY(int i, double &x, double &y)

{

Top[i].GetXY(x,y);

}

double cTriangle::GetX(int i)

{

return Top[i].GetX();

}

double cTriangle::GetY(int i)

{

return Top[i].GetY();

}

void cTriangle::SetTopXY(int i, double x, double y)

{

Top[i].SetXY(x,y);

}

void cTriangle::Move(double dx,double dy)

{

Top[0].Move(dx,dy);

Top[1].Move(dx,dy);

Top[2].Move(dx,dy);

}

void cTriangle::Rotate(double x0,double y0,double a)

{

Top[0].Rotate(x0,y0,a);

Top[1].Rotate(x0,y0,a);

Top[2].Rotate(x0,y0,a);

}

void cTriangle::Mirror(double x0,double y0)

{

Top[0].Mirror(x0,y0);

Top[1].Mirror(x0,y0);

Top[2].Mirror(x0,y0);

}

void cTriangle::Scale(double coef)

{

double x,y;

if (!((coef<=MAXFLOAT)&&(coef>=-MAXFLOAT))) exit(1);

Top[0].GetXY(x,y);

x*=coef;

y*=coef;

Top[0].SetXY(x,y);

Top[1].GetXY(x,y);

x*=coef;

y*=coef;

Top[1].SetXY(x,y);

Top[2].GetXY(x,y);

x*=coef;

y*=coef;

Top[2].SetXY(x,y);

}

cPoint cTriangle::GetTop(int i)

{

cPoint P(GetX(i),GetY(i));

return P;

}

void cTriangle::Set(cTriangle F)

{

SetTopXY(0,F.GetX(0),F.GetY(0));

SetTopXY(1,F.GetX(1),F.GetY(1));

SetTopXY(2,F.GetX(2),F.GetY(2));

}

void cTriangle::out()

{

int i;

for (i=0;i<3;i++) {

Top[i].Out();Top[i].Out();

cout<<endl;}

}

#endif

CCOLTRIA.H

#ifndef _coltriangle_

#define _coltriangle_

#include "cTria.cpp"

enum Colors

{

red=1,green,blue

};

class cColTriangle : public cTriangle

{

private:

Colors Color;

public:

cColTriangle(cPoint P1, cPoint P2, cPoint P3);

cColTriangle();

void SetColor(Colors C);

Colors GetColor();

void Set(cColTriangle F);

void Out();

};

#endif

CCOLTRIA.CPP

#ifndef _coltriangleexe_

#define _coltriangleexe_

#include "ccoltria.h"

cColTriangle::cColTriangle()

{

cTriangle T;

int i;

for (i=0;i<3;i++)

SetTopXY(i,T.GetX(i),T.GetY(i));

SetColor(red);

}

void cColTriangle::Set(cColTriangle F)

{

int i;

for (i=0;i<3;i++)

SetTopXY(i,F.GetX(i),F.GetY(i));

SetColor(F.GetColor());

}

cColTriangle::cColTriangle(cPoint P1, cPoint P2, cPoint P3)

{

cTriangle T(P1,P2,P3);

int i;

for (i=0;i<3;i++)

SetTopXY(i,T.GetX(i),T.GetY(i));

SetColor(red);

}

void cColTriangle::SetColor(Colors C)

{

Color = C;

}

Colors cColTriangle::GetColor()

{

return Color;

}

void cColTriangle::Out()

{

cout<<"The ";

Colors CurColor;

CurColor = GetColor();

if (CurColor == blue)

cout<<"blue";

else if (CurColor == green)

cout<<"green";

else

cout<<"red";

cout<<" triangle:"<<endl;

int i;

for (i=0;i<3;i++)

GetTop(i).Out();

cout<<endl<<endl;

}

#endif

CBOARD.H

CBOARD.CPP #ifndef _planshet_

#define _planshet_

#include "clist.cpp"

#include "cfig.cpp"

#include "ccoltria.cpp"

class cBoard : public List<cColTriangle>, public cFig

{

List<cColTriangle> Er;

public:

cBoard();

cBoard(const cPoint P1,const cPoint P2,const cPoint P3,const cPoint P4);

int Correct(cColTriangle T);

void addontable(cColTriangle T);

void reform();

void SetLi(List<cColTriangle> G)

{Er=G;}

void Add(cColTriangle T)

{

ListEl<cColTriangle> G;

G.SetDate(T);

Er.add(G);

}

void boardout();

~cBoard();

};

#endif

#ifndef _planshetexe_

#define _planshetexe_

#include "cBoard.h"

cBoard::cBoard()

{

Er.SetFirst(NULL);

List<cPoint> L;

L=GetL();

cPoint P5(0,0),P6(0,1),P7(1,0),P8(1,1);

ListEl<cPoint> G1,G2,G3,G4;

G1.SetDate(P5);G2.SetDate(P6);G3.SetDate(P7);G4.SetDate(P8);

L.add(G1);L.add(G2);L.add(G3);L.add(G4);

SetL(L);

}

cBoard::cBoard(const cPoint P1,const cPoint P2,const cPoint P3,const cPoint P4)

{

List<cPoint> L;

Er.SetFirst(NULL);

ListEl<cPoint> G1,G2,G3,G4;

G1.SetDate(P1);G2.SetDate(P2);G3.SetDate(P3);G4.SetDate(P4);

L.add(G1);L.add(G2);L.add(G3);L.add(G4);

if(correct()==0) {L.del();L.del();L.del();L.del();

cPoint P5(0,0),P6(0,1),P7(1,0),P8(1,1);

G1.SetDate(P5);G2.SetDate(P6);G3.SetDate(P7);G4.SetDate(P8);

L.add(G1);L.add(G2);L.add(G3);L.add(G4);

SetL(L);

}

}

int cBoard::Correct(cColTriangle T)

{

float X1,X2,X3,X4,Y1,Y2,Y3,Y4,a,b,c,d,e;

X1=GetX(2);

X2=GetX(4);

X3=GetX(3);

X4=GetX(1);

Y1=GetY(2);

Y2=GetY(4);

Y3=GetY(3);

Y4=GetY(1);

if(

((T.GetTop(0)).GetX()>=X1)&&

((T.GetTop(0)).GetX()>=X2)&&

((T.GetTop(0)).GetY()>=Y1)&&

((T.GetTop(0)).GetY()<=Y2)&&

((T.GetTop(1)).GetX()>=X1)&&

((T.GetTop(1)).GetX()>=X2)&&

((T.GetTop(1)).GetY()>=Y3)&&

((T.GetTop(1)).GetY()<=Y4)&&

((T.GetTop(2)).GetX()>=X3)&&

((T.GetTop(2)).GetX()>=X4)&&

((T.GetTop(2)).GetY()>=Y1)&&

((T.GetTop(2)).GetY()<=Y2)&&

((T.GetTop(2)).GetX()>=X3)&&

((T.GetTop(2)).GetX()>=X4)&&

((T.GetTop(2)).GetY()>=Y3)&&

((T.GetTop(2)).GetY()<=Y4)

) {return 1;}else{return 0;};

};

void cBoard::addontable(cColTriangle T)

{

if (Correct(T)){

List<cColTriangle> L;

ListEl<cColTriangle> G;

G.SetDate(T);

L.add(G);

SetLi(L);}

}

void cBoard::reform()

{

tobegin();

cColTriangle T;

if (!Empty())

while ( ((Er.GetCur()).GetNext() ) != (Er.GetFirst()) )

{

if (Correct(Er.GetInf()))

Er.move();

else

del();

};

if (!Empty())

{

if (!Correct(Er.GetInf()))

del();

};

Er.tobegin();

}

void cBoard::boardout()

{

cout<<endl<<"The map-board: ";cout<<endl<<endl;

Er.Out();

}

cBoard::~cBoard(){}

#endif