Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:


Оглавление

1) Исходная постановка задачи

) Анализ задачи

) Формальная постановка задачи

) Спецификация программы

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

) Разработка структур данных и алгоритмов

) Таблица параметров функций программы

) Текст прогаммы на языке C++

) Тестирование программы

) Итог

11) Вывод


1 Исходная постановка задачи

Разработать и протестировать класс фигура, который должен:

- представлять фигуру согласно индивидуальному заданию (окружность, часть которой (сектор, в основании которого заданный угол) вырезана);

- использовать экземпляр класса точка в качестве члена-данного класса фигура;

- обладать интерфейсными проблемными функции: симметричное отражение фигуры, а также поворот фигуры на заданный угол (относительно заданных точек);

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

Анализ задачи

Задача реализуется с использованием типа данных класс, на языке С++. В роли входных данных выступает фигура, описываемая центральной точкой (центр окружности), точкой на внешней границе фигуры (точка на окружности) и углом разворота сектора. Также входными параметрами являются точки, относительно которых осуществляется симметричное отражение и «поворот» фигуры. В качестве выходных параметров выступают параметры фигуры, изменённые вследствие исполнения проблемных функций.

Формальная постановка задачи

1. Входные данные:

CenFig : Point;: Point;: double;

2. Исходные данные:

CenFig :Point;:Point;:double;

3. Выходные данные

CenFig : Point;PtOnFig : Point;SecAng : double;: double;AreaFigure : double;

4 Спецификация программы

1. Исходные данные:

2. В описании класса присутствует 4 атрибута класса: центр окружности (Point), точка на окружности (Point), угол в основании сектора (double) и радиус окружности (double). Доступ к членам-данным класса - “private”, что объясняется стремлением обезопасить класс от неконтролируемого метода доступа.

3. Функции программы при обработке исключительных ситуаций:

4. В программе реализован контроль на допустимый диапазон значений и формат входных данных.

. Выходные данные:

Выходные данными также являются атрибуты класса.

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

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


6 Разработка структур данных и алгоритмов

Решение данной задачи можно разбить на этапы:

1. Выбор членов-данных класса

2. Создание конструктора

. Создание деструктора

. Реализация функций ввода (и расчёта) параметров фигуры

. Вывод значенийпараметров фигурына текущий момент

. Осуществление поворота фигуры, относительно заданной точки

. Построение симметричного отраженияфигуры относительно заданной точки

Модель структуры данных:

а) В программе описаны два класса: фигура(Figure) и точка (Point);

б) В описании класса Figureприсутствует 4 атрибута класса - центр окружности (Point), точка на окружности (Point), угол в основании сектора (double) и радиус окружности (double). Доступ к членам-данным класса - “private”, что объясняется стремлением обезопасить класс от неконтролируемого метода доступа.

в) Точки являются экземплярами класса Point, который был описан в предыдущей лабораторной работе “Разработка класса Точка.

в) Состав набора членов-функций определяется поставленными проблемными задачами. В данном случае в этот набор входят:

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

- вспомогательные функции вывода координат;

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

- функция поворота фигурыотносительно заданной точки- для осуществления решения проблемы поворота;

- вспомогательные функцииввода/вывода параметров фигуры;

- функция симметричного отражения фигуры относительно заданной точки- для осуществления решения проблемы построения симметричной точки.

Параметры функций программы

Тип

Имя функции

Назначение

Параметры

Сообщения в ходе выполнения

Предусловие

Постусловие

Входные

Выходные

void

RotateFig

Поворот фигуры на заданный угол

(Figure &, int)

-

Сообщения: - о работе конструктора и деструктора; - диалог ввода координат; - диалог ввода угла поворота.

Существует экземпляр класса Figure

Изменены значения CenFig и PtOnFig

void

CalcRadCirc

Расчёт радиуса фигуры

-

-

-

Существует экземпляр класса Figure

Изменено значениеFigRad

void

GetParamFigure

Вывод значений параметров фигуры

(Figure&)

-

Значения параметров фигуры

Существует экземпляр класса Figure

-

void

GetCoordPt

Вывод значения координат точки

(Point&)

-

Координаты точки

Существует экземпляр класса Point

-

double

SetAngle

Инициализация угла в основании сектора

-

double

Диалог ввода угла в основании сектора и сообщения о корректности данных

-

Изменено значение SecAng

void

SetFigure

Инициализация параметров фигуры

(Point&, Point&)

void

Диалог ввода угла в основании сектора и сообщения о корректности данных

Существуют экземпляры класса Point

Изменены значения CenFig, PtOnFig, SecAng, FigRad

void

AreaFigure

Расчёт площади фигуры

(Figure&)

void

Вывод величины площади фигуры

Существует экземпляр класса Figure

-

Figure

Конструктор, для формирования экземпляра

(Point&, Point&, double)

-

Сообщения о работе конструктора

-

Создан экземпляр класса с инициализированными членами класса

~Point

Деструктор, для деинициализации экземпляра

-

-

Сообщение о работе деструктора

Существует экземпляр класса

Удален экземпляр из памяти

void

main

Главная функция

-

-

-

-

Программа выполнена

8 Текст программы на языке C++

ФайлMain.CPP:

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <math.h>

#include <time.h>

#include "Point.h"

#include "Figure.h"

// File: Figure.cpp

// Project: Class of figure

// Author: Kupriyanov N.N.

// Date: 04.07.2012 Version 1.0() //Функция вывода главного меню программы

{();(" Menu:");("1 - Initialize the figure");("2 - Output parameters initialized figures");("3 - Construct a symmetrical reflection to figure");("4 - Expand the figure at a given angle");("5 - About program");("0 - Exit");

};main()

{= NULL;flag = 0;();<< " Project: The class of figure" <<endl

<< " Author: Kupriyanov N.N." <<endl

<< " Date: 04.07.2012 Version 1.0" <<endl

<<endl<<endl

<< " This program on the set parametres of"

<< " a figure counts its square, and also " <<endl

<< "carries out turn and symmetric reflexion "

<< "of a figure."<<endl;("\n\nPlease press Enter\n");

{= getch();

}while(ch != 13);Cen(0,0);PtOnSh(0,0);Shape(Cen,PtOnSh,0);

{();<<endl<< "User response - ";(stdin);("%c",&ch);(ch)

{'1':

{();<< "Please enter the coordinates of the center figure" <<endl;.SetCoord('P');();<< "Please enter the coordinates of points on the "

<< "outer boundary of a shape (circle)";.SetCoord('P');.SetFigure(Cen,PtOnSh);= 1;;

}'2':

{(flag)

{();.GetParamFigure(Shape);

}("\n\n >>Please enter the parameters figure<<");();;

}'3':

{(flag)

{();.RotateFig(Shape,0);("");.GetParamFigure(Shape);

}("\n\n >>Please enter the parameters figure<<");();;

}'4':

{(flag)

{();.RotateFig(Shape,1);("");.GetParamFigure(Shape);

}("\n\n >>Please enter the parameters figure<<");();;

}'5':

{();("File: Figure.exe");("Project: The class of point");("Author: Kupriyanov N.N.");("Date: 04.07.2012 Version 1.0");();;

}

}

}while(ch!='0');

}

ФайлFigure.h:

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <math.h>

#include <time.h>

// File: Figure.h

// Project: Class of figure

// Author: Kupriyanov N.N.

// Date: 03.07.2012 Version 1.0Figure

{:; //Центр окружности

PointPtOnFig; //Точка на кружности

doubleSecAng; //Угол разворота сектора (образован между точками 1 и 2)

doubleFigRad; //Радиус окружности

voidCalcRadCirc(); //Расчёт радиуса окружности

public:

voidSetFigure(Point&, Point&); //Инициализация параметров фигуры

Figure(Point &, Point &, double); //Конструкторэкземплярафигуры

~Figure(); //Деструкторэкземплярафигуры

voidAreaFigure(Figure &); //Площадьфигуры

voidGetParamFigure(Figure &); //Выводпараметровфигуры

doubleSetAngle(); //Вводугла в основаниисектора

voidGetCoordPt(Point &); //Выводкоординатыточки

voidRotateFig(Figure &, int); //Повернутьфигуру

};Figure::GetParamFigure(Figure &Shape)

{<< "Parameters of the figure:" <<endl

<< "Coordinate centre of figure = ";>GetCoordPt(this->CenFig);<<endl

<< "Coordinate point on circle = ";>GetCoordPt(this->PtOnFig);<<endl

<< "The angle at the base of the sector = " << this->SecAng<<endl

<< "Radius of figure = " << this->FigRad<<endl;>AreaFigure(Shape);

}Figure::AreaFigure(Figure &Shape)

{square;((this->SecAng*180/M_PI) > 360)<< "Area of ​​the figure is = "

<<square;= pow(this->FigRad,2)*(2*M_PI - this->SecAng)/2;<< "Area of the figure is = "

<<square;

}Figure::RotateFig(Figure &Shape, int j)

{Angle;Rotate(0,0);<< "Please enter the coordinates of the point around which "

<< "to make his turn" <<endl;.SetCoord('P');(j)

{<<endl

<< "Please enter a corner where you want to rotate a shape - ";>> Angle;

}= M_PI;>CenFig.RotatePoint(Rotate, Angle, j);>PtOnFig.RotatePoint(Rotate, Angle, j);

}Figure::SetFigure(Point &Centre, Point &OnFigure)

{>CenFig = Centre;>PtOnFig = OnFigure;>SecAng = this->SetAngle();>CalcRadCirc();

}Figure::SetAngle()

{Angle;[2];();(;;)

{<< "Please enter a corner at the base of the sector " <<

"(in radians): ";= scanf("%lf""%1[^\n]""%*[^\n]", &Angle, str);(num != 1)

{("\n>>Only digits and only one number allowed!<<\n");();(num == 0)("%*[^\n]");

}(Angle < 0 || Angle > 2*M_PI)

{<<endl<< ">>corner at the base of the sector must be " <<

"greater than 0 and less than 2*Pi<<" <<endl;();

};

}Angle;

}::Figure(Point &Cen, Point &Pt, double Ang) : CenFig(Cen), PtOnFig(Pt), SecAng(Ang)

{_t seconds = time(NULL);* timeinfo = localtime(&seconds);>CalcRadCirc();<<endl<<endl

<<asctime(timeinfo)

<< "Figure:" <<endl

<< "Coordinate centre of figure = ";>GetCoordPt(this->CenFig);<<endl

<< "Coordinate point on circle = ";>GetCoordPt(this->PtOnFig);<<endl

<< "The angle at the base of the sector = " << this->SecAng<<endl

<< "Radius of figure = " << this->FigRad<<endl

<< "Figure."<<endl<<endl;();

}::~Figure()

{_t seconds = time(NULL);* timeinfo = localtime(&seconds);<<endl<<endl

<<asctime(timeinfo)

<< "~Figure:" <<endl

<< "Coordinate centre of figure = ";>GetCoordPt(this->CenFig);<<endl

<< "Coordinate point on circle = ";>GetCoordPt(this->PtOnFig);<<endl

<< "Angle of a turn of sector = " << this->SecAng<<endl

<< "Radius of figure = " << this->FigRad<<endl

<< "~Figure."<<endl<<endl;();

}Figure::CalcRadCirc()

{X0, Y0, X1, Y1;>CenFig.ConvertToXY(&X0,&Y0);>PtOnFig.ConvertToXY(&X1,&Y1);>FigRad = sqrt(pow((X1-X0),2)+pow((Y1-Y0),2));

}Figure::GetCoordPt(Point &Pt)

{.GetRF();

}

ФайлPoint.h:

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <math.h>

#include <time.h>

#include <time.h>

// File: Point.h

// Project: Class of figure

// Author: Kupriyanov N.N.

// Date: 03.07.2012 Version 1.0Point

{:; //Ро - радиальнаякоординататочки; //Фи - угловая координата точки;:(){};(double, double); //Преобразование в полярные координаты экземпляра класса(double*, double*); //Преобразование в декартовы координаты экземпляра класса(int);(double, double);//Конструкторэкземпляракласса

~Point();//Деструкторэкземпляракласса() const; //Выводрадиальнойкоординатыэкземпляракласса() const;//Выводугловойкоординатыэкземпляракласса(char); //Задать координату для экземпляра класса

voidRotatePoint(Point&, double, int); //Осуществить поворот экземпляра класса

voidGetRF();

};Point::GetRF()

{<< "RO: " <<CoordRO<< " Fi: " <<CoordFi;

}Point::SetQuiet(int q)

{(!q)= 0;= 1;

}::Point(double CoordX, double CoordY)

{_t seconds = time(NULL);* timeinfo = localtime(&seconds);>ConvertToRF(CoordX, CoordY);>SetQuiet(0);(Qu)

{<<endl<<endl

<<asctime(timeinfo)

<< "Point:" <<endl

<< "RO = " << this->CoordRO<<endl

<< "Fi = " << this->CoordFi<<endl

<< "Point."<<endl<<endl;();

}

}::~Point()

{_t seconds = time(NULL);* timeinfo = localtime(&seconds);>SetQuiet(0);(Qu)

{<<endl<<endl

<<asctime(timeinfo)

<< "~Point:" <<endl

<< "RO = " << this->CoordRO<<endl

<< "Fi = " << this->CoordFi<<endl

<< "~Point."<<endl<<endl;();

}

}Point::RotatePoint(Point &Second, double Angle, int j)

{, CrdY, X, Y;, CoordY;(&CoordX, &CoordY);.ConvertToXY(&X, &Y);= X + (CoordX - X)*cos(Angle) - (CoordY - Y)*sin(Angle);= Y + (CoordX - X)*sin(Angle) + (CoordY - Y)*cos(Angle);(CrdX,CrdY);

}Point::ConvertToXY(double *CoordX, double *CoordY)

{

*CoordX = CoordRO*cos(CoordFi);

*CoordY = CoordRO*sin(CoordFi);

}Point::ConvertToRF(double CoordX, double CoordY)

{= sqrt(pow(CoordX,2)+pow(CoordY,2));(CoordX> 0)

{(CoordY>= 0)= atan(CoordY/CoordX);= atan(CoordY/CoordX) + 2*M_PI;

}(CoordX< 0)= atan(CoordY/CoordX) + M_PI;(CoordY> 0)= M_PI/2;(CoordY< 0)= 3*M_PI/2;= 0;

}Point::GetCoordRO() const

{<< "The radial coordinate of the point - RO: " <<CoordRO<<endl;

}Point::GetCoordFi() const

{<< "The angular coordinate of a point in radians - Fi: " <<CoordFi<<endl;

}Point::SetCoord(char ch)

{

charstr[2]; // Будем вводить макс. один символ для проверки наличия лишнего

double work = NULL;(ch)

{'P':

{= NULL, CoordY = NULL;(;;)

{<<endl<< "Please enter a value of X coordinate (numeric) - ";= scanf("%lf""%1[^\n]""%*[^\n]", &CoordX, str);(num != 1)

{("\n>>Only digits and only one number allowed!<<\n");();(num == 0)("%*[^\n]");

}; // Из for(;;)

}(;;)

{<<endl<< "Please enter a value of Y coordinate (numeric) - ";= scanf("%lf""%1[^\n]""%*[^\n]",&CoordY,str);(num != 1)

{("\n>>Only digits and only one number allowed!<<\n");();(num == 0)("%*[^\n]");

};

}>ConvertToRF(CoordX, CoordY);0;

}'F':

{(;;)

{();<< "Enter the angular coordinate of a point " <<

"(in radians) - Fi: ";= scanf("%lf""%1[^\n]""%*[^\n]", &work, str);(num != 1)

{("\n>>Only digits and only one number allowed!<<\n");();(num == 0)("%*[^\n]");

}(work < 0 || work > 2*M_PI)

{<<endl<< ">>Radial coordinate of the point must be " <<

"be greater than 0 and less than 2*Pi<<" <<endl;();

};

}work;

}

}

return 0;

}

программа геометрическая фигура

9 Тестирование программы

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

Метод классов эквивалентности:

(X0,Y0)

(X1,Y1)

Angle

Area

(.) sim

(RO,Fi)

(RO’,Fi’)

Radius

1.

(1;1)

(0;0)

0.785

5.49819

(5,5)

12.7279 0.785398

14.1421 0.785398

1.41421

2.

(3;4)

(4;12)

0.314

193.999

(-1,-6)

16.7631 4.4095

24.7386 4.46741

193.999

3.

(100;1000)

(100;-700)

5.781

725658

(33,18)

964.599 4.67713

736.785 1.64696

1700

4.

(-150;-5)

(70,-49)

6.211

1816.76

(0,22;1.76)

150.681 0.056573

87.1604 2.49488

224.357

№(X0,Y0)(X1,Y1)Angle(X,Y)Rotate(RO,Fi)(RO’,Fi’)Area

1.

(1;1)

(0;0)

0.785

(5,5)

0.14

1.66815 0.292474

0.989141 5.56779

5.49819

2.

(3;4)

(4;12)

0.314

(-1,-6)

4.569

14.1069 5.34369

21.025 5.58466

193.999

3.

(100;1000)

(100;-700)

5.781

(33,18)

2.356

947.615 3.86724

756.171 0.85986

725658

4.

(-150;-5)

(70,-49)

6.211

(0,22;1.76)

5.555

151.32 2.44844

84.6179 4.93305

1816.76

Итог

Общее количество строк текста: 208+168+122 = 498;

Количество строк комментариев, занимающих отдельные строки: 14;

Количество пустых строк: 38.

Вывод

Разработанная программа отвечает поставленным требованиям. Работоспособность программы подтверждается разработчиком на основании и тестирования основных функций программы. Несомненными достоинствами класса является легкая интегрируемость за счет понятности текста класса, удобство и надежность.




1. Про загальну середню освіту визначено- Педагогічним працівником повинна бути особа з високими моральним
2. тематическая дифференциация и интеграция социальная защита техническая мобильность 4
3. экономического развития регионов
4. турецкой войны деятельность уездных комитетов Красного Креста была прекращена а развернутые лечебные учре
5. Землеустроительные работы при формировании земельных участков и территориальных зон объектов нефтегазового комплекса
6. Введение На данном этапе развития и политических преобразований происходящих в Российской Федерации и сос
7. Остроумова Ольга Михайловна
8. Соединение катушек.html
9. МОСКОВСКАЯ ВЕСНА 2014 1213 апреля 2014 г
10. Лабораторная работа 4 РЕШЕНИЕ КРАЕВОЙ ЗАДАЧИ ДЛЯ ЛИНЕЙНОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО ПОРЯДКА
11. ПЯТИГОРСКИЙ ГОСУДАРСТВЕННЫЙ ЛИНГВИСТИЧЕСКИЙ УНИВЕРСИТЕТ ВЫСШАЯ ШКОЛА ПОЛИТИЧЕСКОГО УПРАВЛЕНИЯ И ИН.html
12. ФІНАНСОВЕ ЗАБЕЗПЕЧЕННЯ ВІДТВОРЕННЯ ОСНОВНИХ ЗАСОБІВ
13. ирландцам с сайта Book Zone for Boys которые заслуживают того чтобы действие еще одной моей книги разворачивалось в.
14. Регулирование валютных операций коммерческих банков
15. Лимфатическая система нижних конечностей
16. ИСТОРИЧЕСКОЕ КРАЕВЕДЕНИЕ КАК РЕСУРС ВОСПИТАНИЯ ПАТРИОТИЗМА НА УРОКАХ ИСТОРИИ
17. История подготовки социальных работников в России и за рубежом Социальная работа как профессия зародилас.html
18. Это средства необходимые для производства продукции и ее реализации
19. тема- понятие виды структура уровни элементы
20. Вопросы для экзамена по дисциплине «Управление изменениями»