функция симметричного отражения фигуры относительно заданной точки- для осуществления решения проблемы построения симметричной точки.
Параметры функций программы
ТипИмя функцииНазначениеПараметрыСообщения в ходе выполненияПредусловиеПостусловиеВходныеВыходныеvoidRotateFigПоворот фигуры на заданный угол(Figure &, int)-Сообщения: - о работе конструктора и деструктора; - диалог ввода координат; - диалог ввода угла поворота.Существует экземпляр класса FigureИзменены значения CenFig и PtOnFigvoidCalcRadCircРасчёт радиуса фигуры---Существует экземпляр класса FigureИзменено значениеFigRadvoidGetParamFigureВывод значений параметров фигуры(Figure&)-Значения параметров фигурыСуществует экземпляр класса Figure-voidGetCoordPtВывод значения координат точки(Point&)-Координаты точкиСуществует экземпляр класса Point-doubleSetAngleИнициализация угла в основании сектора-doubleДиалог ввода угла в основании сектора и сообщения о корректности данных-Изменено значение SecAngvoidSetFigureИнициализация параметров фигуры(Point&, Point&)voidДиалог ввода угла в основании сектора и сообщения о корректности данныхСуществуют экземпляры класса PointИзменены значения CenFig, PtOnFig, SecAng, FigRadvoidAreaFigureРасчёт площади фигуры(Figure&)voidВывод величины площади фигурыСуществует экземпляр класса Figure-FigureКонструктор, для формирования экземпляра(Point&, Point&, double)-Сообщения о работе конструктора-Создан экземпляр класса с инициализированными членами класса~PointДеструктор, для деинициализации экземпляра--Сообщение о работе деструктораСуществует экземпляр классаУдален экземпляр из памятиvoidmainГлавная функция----Программа выполнена
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.
{();(" 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 "
{<<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)
<< "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)AngleArea(.) sim(RO,Fi)(RO,Fi)Radius1.(1;1)(0;0)0.7855.49819(5,5)12.7279 0.78539814.1421 0.7853981.414212.(3;4)(4;12)0.314193.999(-1,-6)16.7631 4.409524.7386 4.46741193.9993.(100;1000)(100;-700)5.781725658(33,18)964.599 4.67713736.785 1.6469617004.(-150;-5)(70,-49)6.2111816.76(0,22;1.76)150.681 0.05657387.1604 2.49488224.357
№(X0,Y0)(X1,Y1)Angle(X,Y)Rotate(RO,Fi)(RO,Fi)Area1.(1;1)(0;0)0.785(5,5)0.141.66815 0.2924740.989141 5.567795.498192.(3;4)(4;12)0.314(-1,-6)4.56914.1069 5.3436921.025 5.58466193.9993.(100;1000)(100;-700)5.781(33,18)2.356947.615 3.86724756.171 0.859867256584.(-150;-5)(70,-49)6.211(0,22;1.76)5.555151.32 2.4484484.6179 4.933051816.76
Итог
Общее количество строк текста: 208+168+122 = 498;
Количество строк комментариев, занимающих отдельные строки: 14;
Количество пустых строк: 38.
Вывод
Разработанная программа отвечает поставленным требованиям. Работоспособность программы подтверждается разработчиком на основании и тестирования основных функций программы. Несомненными достоинствами класса является легкая интегрируемость за счет понятности текста класса, удобство и надежность.