Скачиваний:
17
Добавлен:
01.05.2014
Размер:
106.5 Кб
Скачать

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

Университет «ЛЭТИ»

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

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

Объектно-ориентированному программированию

О Т Ч Е Т

Факультет КТИ

группа 3341

студент Марьяскин Е.

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

2006 г.

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

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

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

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

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

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

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

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

  1. класс «cColTriangle» - реализация цветного равнобедренного треугольника. Наследник класса равнобедренный треугольник

  2. класс «cMapboard» - реализация круглого планшета.

  3. класс «сTrOnBoard» - реализация размещения кольцевого списка цветных равнобедренных треугольников на круглом планшете. Наследник класса кольцевой список и класса круглый планшет.

В программе использованы классы, разработанные в ходе выполнения предыдущих заданий: реализация точки, равнобедренного треугольника, элемента списка и кольцевого списка.

cColTriangle

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

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

Colors Color

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

cColTriangle

конструктор

Тип Colors – перечисление цветов

void SetColor

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

Colors GetColor

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

void Set

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

void out

Вывод на экран

cMapboard

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

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

cPoint Center

Данные

cMapboard

Конструктор

Double Radius

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

void SetCenter

Модификатор точки центра

void SetRad

Модификатор значения радиуса

void Set

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

void GetX

Селектор абсциссы центра

void GetY

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

void GetRad

Селектор радиуса планшета

inc inv

Инвариант

сTrOnBoard

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

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

cTrOnBoard

Конструктор

inc Correct

Проверка треугольника на вместимость на планшет

void addontable

Добавление треугольника при (Correct == 1)

void reform

Удаление треугольников, не отвечающих Correct

void SetNewCenter

cMapboard::SetCenter + reform

void SetNewRad

cMapboard::SetRad + reform

void boardout

Вывод списка на экран

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

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

сСolTriangle.h, cColTriangle.cpp класс цветной равнобедренный треугольник

cMapboard.h, cMapboard.cpp класс круглый планшет

cTrOnBoard.h, cTrOnBoard.cpp класс набор треугольников на планшете

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

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

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

Приложения.

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

1. cColTriangle.h

#ifndef H005

#define H005

#include "cTriangle.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

2. cColTriangle.cpp

#ifndef CPP005

#define CPP005

#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

3. cMapBoard.h

#ifndef H006

#define H006

#include "cPoint.cpp"

class cMapboard

{

private:

cPoint Center;

double Radius;

public:

cMapboard();

cMapboard(cPoint P, double R);

void SetCenter(cPoint P);

void SetRad(double R);

void Set(cPoint P, double R);

double GetX();

double GetY();

double GetRad();

~cMapboard();

int inv();

};

#endif

4. cMapBoard.cpp

#ifndef CPP006

#define CPP006

#include "cMapboard.h"

void cMapboard::SetCenter(cPoint P)

{

Center.SetXY(P.GetX(),P.GetY());

}

void cMapboard::SetRad(double R)

{

if ((R>0)&&(R<MAXFLOAT))

Radius = R;

else

Radius = 1;

}

void cMapboard::Set(cPoint P,double R)

{

SetCenter(P);

SetRad(R);

}

cMapboard::cMapboard()

{

cPoint P;

Set(P,1.0);

}

cMapboard::cMapboard(cPoint P,double R)

{

Set(P,R);

}

double cMapboard::GetX()

{

return Center.GetX();

}

double cMapboard::GetY()

{

return Center.GetY();

}

double cMapboard::GetRad()

{

return Radius;

}

int cMapboard::inv()

{

return ( (GetRad() > 0)&&(GetRad() < MAXFLOAT));

}

cMapboard::~cMapboard(){};

#endif

5. cTrOnBoard.h

#ifndef H007

#define H007

#include "List1.cpp"

#include "cMapboard.cpp"

class cTrOnBoard : public List , public cMapboard

{

public:

cTrOnBoard();

cTrOnBoard(cPoint P, double R);

int Correct(cColTriangle T);

void addontable(cColTriangle T);

void reform();

void SetNewCenter(cPoint P);

void SetNewRad(double R);

void boardout();

~cTrOnBoard();

};

#endif

6. cTrOnBoard.cpp

#ifndef CPP007

#define CPP007

#include "cTrOnBoard.h"

cTrOnBoard::cTrOnBoard()

{

First=NULL;

cPoint P(0,0);

double R = 1;

Set(P,R);

}

cTrOnBoard::cTrOnBoard(cPoint P, double R)

{

First=NULL;

Set(P,R);

}

int cTrOnBoard::Correct(cColTriangle T)

{

int A =

((T.GetTop(0)).Distance(GetX(),GetY()) <= GetRad() + 0.01) &&

((T.GetTop(1)).Distance(GetX(),GetY()) <= GetRad() + 0.01) &&

((T.GetTop(2)).Distance(GetX(),GetY()) <= GetRad() + 0.01);

return A;

}

void cTrOnBoard::addontable(cColTriangle T)

{

if (Correct(T))

add(T);

}

void cTrOnBoard::reform()

{

tobegin();

cColTriangle T;

if (!Empty())

while ((*current).GetNext() != First)

{

GetInf(T);

if (Correct(T))

move();

else

del();

};

if (!Empty())

{

GetInf(T);

if (!Correct(T))

del();

};

tobegin();

}

void cTrOnBoard::SetNewCenter(cPoint P)

{

SetCenter(P);

reform();

}

void cTrOnBoard::SetNewRad(double R)

{

SetRad(R);

reform();

}

void cTrOnBoard::boardout()

{

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

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

P.out();

cout<<endl<<"The map-board radius: "<<GetRad()<<endl<<endl;

out();

}

cTrOnBoard::~cTrOnBoard(){}

#endif

7. tester3.cpp

#include <stdio.h>

#include "cTrOnBoard.cpp"

void main()

{

cout.precision(3);

cPoint P(0,0),P1(1,0),P2(3,0),P3(2,1);

cColTriangle T1,T2(P1,P2,P3),T3;

T2.SetColor(green);

clrscr();

textcolor(GREEN);

cprintf("This program will show you few testes for the class named");

cout<<endl;

cprintf(" 'The ring list of colored isoscales triangles,");

cout<<endl;

cprintf(" placed on round map-board'");

cout<<endl<<endl;

getch();

textcolor(RED);

cprintf("RED COLOR");

textcolor(WHITE);

cprintf(" - action");

cout<<endl;

cprintf("WHITE COLOR - result");

cout<<endl<<endl<<endl;

getch();

textcolor(RED);

cprintf("initializing by arguments");

cout<<endl<<endl;

cTrOnBoard Board(P,10);

Board.boardout();

cout<<endl<<endl;

getch();

////////////////////////////////////////

cprintf("Adding 2 triangles(created by default and by arguments)");

cout<<endl<<endl;

Board.addontable(T1);

Board.addontable(T2);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Rotate ((1;0) (3;0) (2;1)) by ((3;0);-Pi/2)");

cout<<endl<<endl;

Board.move();

Board.GetCur(T3);

T3.Rotate(3,0,-1.57089632679);

Board.addontable(T3);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Change the ((1;0) (3;0) (2;1))'s color ");

cout<<endl<<endl;

Board.GetCur(T3);

T3.SetColor(blue);

Board.addontable(T3);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Try to add ((0;0) (11;0) (0;11))");

cout<<endl<<endl;

T1.Scale(11);

Board.addontable(T1);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Rotate ((0;0) (1;0) (0;1)) by ((-6;0);Pi)");

cout<<endl<<endl;

Board.GetCur(T3);

T3.Rotate(-6,0,3.14159265358);

Board.addontable(T3);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Change board center to (3;0)");

cout<<endl<<endl;

cPoint NC(3,0);

Board.Set(NC,Board.GetRad());

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

cprintf("Change board radius to 1.5");

cout<<endl<<endl;

Board.SetNewRad(1.5);

Board.boardout();

cout<<endl;

getch();

////////////////////////////////////////

}

Вывод.

Разработана программа, отвечающая заданию и корректная с точностью до всех проведенных тестов.