Помощь в написании студенческих работ
Антистрессовый сервис

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

Лабораторная работаПомощь в написанииУзнать стоимостьмоей работы

Федеральное агентство по науке и образованию РФ Санкт-Петербургский университет «ЛЭТИ» имени В. И. Ульянова (Ленина) Кафедра МО ЭВМ Отчет по лабораторной работе УВП Разработка класса точка Выполнил: Сценарий диалога с пользователем Общаясхемадиалога: пользователю предлагается ввести координаты точек, затем с ними выполняются действия в соответствии с индивидуальным заданием. Функции перевода… Читать ещё >

Разработка класса Точка (реферат, курсовая, диплом, контрольная)

Федеральное агентство по науке и образованию РФ Санкт-Петербургский университет «ЛЭТИ» имени В. И. Ульянова (Ленина) Кафедра МО ЭВМ Отчет по лабораторной работе УВП Разработка класса точка Выполнил:

Куприянов Н.Н.

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

1. Исходная постановка задачи Разработать и протестировать класс Точка. Представление координат точки в классе — полярные координаты. Способ задания координат точкидекартовы координаты. Требуется реализовать два проблемных действия: поворот точки, относительно заданной, а также построение ей симметричной (относительно заданной точки).

2. Анализ задачи Задача реализуется с использованием типа данных класс, на языке С++. В роли входных данных выступает пара координат точки в декартовой системе координат, которые затем преобразуются в полярные координаты. Для реализации поворотаи построения симметричного отражения требуются дополнительные входные данные: точка, относительно которой производится действие. В роли выходных данных выступают координаты точки (декартовы и полярные) после каждой операции над экземпляром в процессе тестирования.

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

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

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

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

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

1. Исходные данные: В описании класса присутствует 4 атрибута класса — пара полярных и декартовых координат (double). Доступ к членам-данным класса — «private», что объясняется стремлением обезопасить класс от неконтролируемого метода доступа и изменения данных.

2. Функции программы при обработке исключительных ситуаций: В программе реализован контроль на допустимый диапазон значений и формат входных данных.

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

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

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

6. Разработка структур данных и алгоритмов Решение данной задачи можно разбить на этапы:

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

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

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

4. Перевод координат из декартовой системы в полярную и наоборот

5. Вывод значения координат точки на данный момент

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

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

а) В описании класса присутствует 4 атрибута класса — пара полярныхи пара декартовых координат. Доступ к членам-данным класса — «private», что объясняется стремлением обезопасить класс от неконтролируемого метода доступа.

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

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

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

— функции перевода между полярной и декартовой системами координат (для удобства реализации функций поворота и формирования симметричной точки относительно заданной);

— функция инициализации отдельных координат экземпляра класса;

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

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

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

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

Тип

Имя функции

Назначение

Параметры

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

Предусловие

Постусловие

Входные

Выходные

void

RotatePoint

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

int j

;

Сообщения: — о работе конструктора и деструктора;

— диалог ввода координат;

— диалог ввода угла поворота.

Заданы значенияXи Y

Изменены значения X, Y, RO и Fi

void

ConvertToRF

Перевод декартовых координат в полярные

;

;

Информация о точке

Заданы значения Xи Y

Изменены значения RO и Fi

void

ConvertToXY

Переводполярныхкоординат в декартовы

;

;

Информация о точке

Заданы значения ROи Fi

Изменены значения X и Y

void

GetCoordFi

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

;

;

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

Задано значения Fi

;

void

GetCoordRO

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

;

;

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

Задано значения Ro

;

void

GetCoordX

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

;

;

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

Задано значения X

;

void

GetCoordY

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

;

;

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

Задано значения Y

;

double

SetCoord

Инициализация координаты точки

char ch

double

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

;

Инициализация координаты точки

Point

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

(doubleX, double Y)

;

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

;

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

~Point

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

;

;

Сообщение о работе деструктора, удаляет экземпляр из памяти

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

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

void

main

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

;

;

;

;

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

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

ФайлUnit1.CPP:

#include

#include

#include

#include

#include

#include «Unit2.h»

//—————————————————————————————————————;

// File: Unit1. cpp

// Project: The Class of point

// Author: Kupriyanov N.N.

// Date: 01.07.2012 Version 1.3

class Point

{

private:

doubleCoordX; //Х — координататочки

doubleCoordY; //У — координата точки

doubleCoordRO; //Ро — радиальная координата точки

doubleCoordFi; //Фи — угловая координата точки

public:

Point (double X, double Y); //Конструкторэкземпляракласса

~Point (); //Деструктор экземпляра класса

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

voidGetCoordRO () const;

voidGetCoordFi () const;

voidGetCoordX () const;

voidGetCoordY() const;

//Преобразование координат экземпляра класса

voidConvertToRF();

voidConvertToXY();

doubleSetCoord(char); //Задать координату для экземпляра класса

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

};

voidMainMenu(); //Функция вывода главного меню программы

void main ()

{

charch;

int flag = 0;

clrscr ();

cout<< « Project: The class of point» <

<< «Author: Kupriyanov N.N.» <

<< «Date: 01.07.2012 Version 1.3» <

<

<< «This program makes the transition»

<<" from Cartesian to polar coordinate system." <

<< «Produces a symmetrical construction of the point «

<< «and the rotation by an angle «<

<< «relative to a given point.» <

printf («nnnPlease press Entern»);

do

{

ch = getch ();

}while (ch ≠ 13);

Point First (0,0);

do

{

MainMenu ();

cout<< «User response — «;

fflush (stdin);

scanf («%c» ,&ch);

switch (ch)

{

case '1':

{

clrscr ();

First.SetCoord ('X');

First.SetCoord ('Y');

First.ConvertToRF ();

flag = 1;

break;

}

case '2':

{

if (flag)

{

clrscr ();

First.GetCoordX ();

First.GetCoordY ();

First.GetCoordRO ();

First.GetCoordFi ();

}

else

printf («nn >>Please enter the X and Y coordinates<<»);

getch ();

break;

}

case '3':

{

if (flag)

{

First.RotatePoint (0);

First.GetCoordX ();

First.GetCoordY ();

First.GetCoordRO ();

First.GetCoordFi ();

}

else

printf («nn >>Please enter the X and Y coordinates<<»);

getch ();

break;

}

case '4':

{

if (flag)

{

First.RotatePoint (1);

First.GetCoordX ();

First.GetCoordY ();

First.GetCoordRO ();

First.GetCoordFi ();

}

else

printf («nn >>Please enter the X and Y coordinates<<»);

getch ();

break;

}

case '5':

{

clrscr ();

puts («File: POINT. exe»);

puts («Project: The class of point»);

puts («Author: Kupriyanov N.N.»);

puts («Date: 01.07.2012 Version 1.3»);

getch ();

break;

}

}

}while (ch≠'0');

}

voidMainMenu ()

{

clrscr ();

cout<< «Menu» <

cout<< «1 — Enter the X and Y coordinates operating point» <

cout<< «2 — Output coordinates of operating point» <

cout<< «3 — Calculate the coordinates of the point symmetric» <

cout<< «4 — To make the rotation of the operating point of a predetermined point» <

cout<< «5 — About programm» <

cout<< «0 — Exit» <

}

ФайлUnit2.CPP:

#pragma hdrstop

#include «Unit1.cpp»

//—————————————————————————————————————;

#pragma package (smart_init)

Point:Point (double X, double Y)

{

time_t seconds = time (NULL);

tm* timeinfo = localtime (&seconds);

CoordX = X;

CoordY = Y;

ConvertToRF ();

cout<

<

<< «Point:» <

<< «RO = «<

<< «Fi = «<

<< «X = «<

<< «Y = «<

<< «Point.» <

getch ();

}

Point:~Point ()

{

time_t seconds = time (NULL);

tm* timeinfo = localtime (&seconds);

cout<

<

<< «~Point:» <

<< «RO = «<

<< «Fi = «<

<< «X = «<

<< «Y = «<

<< «~Point.» <

getch ();

}

void Point: RotatePoint (int j)

{

doubleCrdX, CrdY, X, Y, Angle;

X = SetCoord ('x');

Y = SetCoord ('y');

Point Second (X, Y);

if (j)

Angle = SetCoord ('F');

else

Angle = M_PI;

CrdX = Second. CoordX + (CoordX — Second. CoordX)*cos (Angle) — (CoordY — Second. CoordY)*sin (Angle);

CrdY = Second. CoordY + (CoordX — Second. CoordX)*sin (Angle) + (CoordY — Second. CoordY)*cos (Angle);

CoordX = CrdX;

CoordY = CrdY;

ConvertToRF ();

}

void Point: ConvertToXY ()

{

CoordX = CoordRO*cos (CoordFi);

CoordY = CoordRO*sin (CoordFi);

}

void Point: ConvertToRF ()

{

CoordRO = sqrt (pow (CoordX, 2)+pow (CoordY, 2));

if (CoordX> 0)

{

if (CoordY>= 0)

CoordFi = atan (CoordY/CoordX);

else

CoordFi = atan (CoordY/CoordX) + 2*M_PI;

}

else

if (CoordX< 0)

CoordFi = atan (CoordY/CoordX) + M_PI;

else

if (CoordY> 0)

CoordY = M_PI/2;

else

if (CoordY< 0)

CoordFi = 3*M_PI/2;

else

CoordFi = 0;

}

void Point: GetCoordRO () const

{

cout<< «The radial coordinate of the point — RO: «<

}

void Point: GetCoordFi () const

{

cout<< «The angular coordinate of a point in radians — Fi: «<

}

void Point: GetCoordX () const

{

cout<< «The ordinate of the point — X: «<

}

void Point: GetCoordY () const

{

cout<< «The abscissa of the point — Y: «<

}

double Point: SetCoord (char ch)

{

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

double work = NULL;

switch (ch)

{

case 'X':

{

for (;;)

{

clrscr ();

cout<< «Please enter a value of X coordinate (numeric) — «;

intnum = scanf (

" %lf" // Наше число. Будет введено 0 полей,

// если первый символ не-цифра

" %1[^n]" // Проверяем что угодно кроме конца строки

" %*[^n]", // Чистим ввод до n

&CoordX, // Сюда число

str // Сюда проверку наличия чего-либо за числом

);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch();

// Вот если первый символ был не-цифра ;

//- то нужно дочистить до конца строки

if (num == 0)

scanf («%*[^n]»);

}

else

break; // Из for (;;)

}

returnCoordX;

}

case 'x':

{

for (;;)

{

clrscr ();

cout<< «Please enter a value of X coordinate (numeric) — «;

intnum = scanf (

" %lf" // Наше число. Будет введено 0 полей,

// если первый символ не-цифра

" %1[^n]" // Проверяем что угодно кроме конца строки

" %*[^n]", // Чистим ввод до n

&work, // Сюда число

str // Сюда проверку наличия чего-либо за числом

);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch();

// Вот если первый символ был не-цифра ;

//- то нужно дочистить до конца строки

if (num == 0)

scanf («%*[^n]»);

}

else

break; // Из for (;;)

}

return work;

}

case 'Y':

{

for (;;)

{

clrscr ();

cout<< «Please enter a value of Y coordinate (numeric) — «;

intnum = scanf («%lf» «%1[^n]» «%*[^n]» ,&CoordY, str);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch ();

if (num == 0)

scanf («%*[^n]»);

}

else

break;

}

returnCoordY;

}

case 'y':

{

for (;;)

{

clrscr ();

cout<< «Please enter a value of Y coordinate (numeric) — «;

intnum = scanf («%lf» «%1[^n]» «%*[^n]» ,&work, str);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch ();

if (num == 0)

scanf («%*[^n]»);

}

else

break;

}

return work;

}

case 'R':

{

for (;;)

{

clrscr ();

cout<< «Enter the radial coordinate of the point — RO: «;

intnum = scanf («%lf» «%1[^n]» «%*[^n]», &work, str);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch ();

if (num == 0)

scanf («%*[^n]»);

}

else

if (work < 0)

{

cout<< «>>Radial coordinate of the point must be «<<

" be greater than 0<<" <

getch ();

}

else

break;

}

return work;

}

case 'F':

{

for (;;)

{

clrscr ();

cout<< «Enter the angular coordinate of a point «<<

" (in radians) — Fi: «;

intnum = scanf («%lf» «%1[^n]» «%*[^n]», &work, str);

if (num ≠ 1)

{

printf («n>>Only digits and only one number allowed!<

getch ();

if (num == 0)

scanf («%*[^n]»);

}

else

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

{

cout<< «>>Radial coordinate of the point must be «<<

" be greater than 0 and less than 2*Pi<<" <

getch ();

}

else

break;

}

return work;

}

}

}

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

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

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

(X0,Y0)

RO, Fi

(X, Y)

RO, Fi

(.) sim

Angle

(.) Rotate

1.

(1;1)

1.41 421

0.785 398

(0;0)

1.41 421

3.92 699

0.785

1.41 421

1.5704

2.

(3;4)

0.927 295

(4;12)

12,6491

1.24 905

20.6155

1.32 582

1.314

14.5908

0.664 785

3.

(100;1000)

1004,99

1.47 113

(100;-700)

707.107

4.85 429

2402.08

4.75 403

4.56

2021.72

5.78 949

4.

(-150;-5)

150,083

3.17 491

(70,-49)

85,4459

5.67 246

304.547

5.97 286

6.283

150.074

3.17 464

10)Итог Общее количество строк текста: 266+149 = 415;

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

Количество пустых строк: 10+11=21.

11.Вывод

программа тестирование алгоритм

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

Показать весь текст
Заполнить форму текущей работой