Будь умным!


У вас вопросы?
У нас ответы:) 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. Тема 5 Современные дидактические концепции Цель- ознакомиться с современными дидактическими системами ос
2. реферат дисертації на здобуття наукового ступеня доктора географічних наук Київ ~
3. а можно прочитать в ноябрьском номере журнала и на сайте www
4. Topics were discussed in socil gtherings t the courts of gret ldies in the medievl epoch.
5. Виды и значения маркировки грузов
6. Режим державної таємниці та його характеристика
7. Поэтические воззрения славян на природу.html
8.  Гигиена ~ б~л ~ылым ал санитарияб~л- 1
9. Фінанси в економічній системі держави
10. игровой поверхностью длиной 274 м и шириной 1525 м должна быть прямоугольной и лежать в горизонтальной плоск
11. на тему ldquo;Переработка зерна в крупу и мукуrdquo; Научный руководитель
12. Разработка технологического процесса производства летних женских туфель
13. тематическая логика Задача 1
14. Технология выращивания озимой пшеницы в АОО Симферопольский
15. ДЕТАЛИ МАШИН для специальности Автоматизация технологических процессов и производств факультет з
16. Восточная Русь Этот район был окружен лесами и реками меньше всего подвергался набегам монголотатар сюда
17.  Развитие эмбриона 2
18. Предмет метод и объект бухгалтерского учета
19. Эмоции и управление ими
20. Teaching sentence structure