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

Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 21.07.2012
Размер файла 43,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство по науке и образованию РФ

Санкт-Петербургский университет “ЛЭТИ” имени В. И. Ульянова (Ленина)

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

Отчет по лабораторной работе УВП

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

Выполнил:

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

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

2012

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 <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <math.h>

#include <ctime>

#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" <<endl

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

<< " Date: 01.07.2012 Version 1.3" <<endl

<<endl<<endl

<< " This program makes the transition"

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

<< "Produces a symmetrical construction of the point "

<< "and the rotation by an angle "<<endl

<< "relative to a given point."<<endl;

printf("\n\n\nPlease press Enter\n");

do

{

ch = getch();

}while(ch != 13);

Point First(0,0);

do

{

MainMenu();

cout<<endl<< "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("\n\n >>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("\n\n >>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("\n\n >>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" <<endl;

cout<< "1 - Enter the X and Y coordinates operating point" <<endl;

cout<< "2 - Output coordinates of operating point" <<endl;

cout<< "3 - Calculate the coordinates of the point symmetric" <<endl;

cout<< "4 - To make the rotation of the operating point of a predetermined point" <<endl;

cout<< "5 - About programm" <<endl;

cout<< "0 - Exit" <<endl;

}

Файл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<<endl<<endl

<<asctime(timeinfo)

<< "Point:" <<endl

<< "RO = " <<CoordRO<<endl

<< "Fi = " <<CoordFi<<endl

<< "X = " <<CoordX<<endl

<< "Y = " <<CoordY<<endl

<< "Point."<<endl<<endl;

getch();

}

Point::~Point()

{

time_t seconds = time(NULL);

tm* timeinfo = localtime(&seconds);

cout<<endl<<endl

<<asctime(timeinfo)

<< "~Point:" <<endl

<< "RO = " <<CoordRO<<endl

<< "Fi = " <<CoordFi<<endl

<< "X = " <<CoordX<<endl

<< "Y = " <<CoordY<<endl

<< "~Point."<<endl<<endl;

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: " <<CoordRO<<endl;

}

void Point::GetCoordFi() const

{

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

}

void Point::GetCoordX() const

{

cout<< "The ordinate of the point - X: " <<CoordX<<endl;

}

void Point::GetCoordY() const

{

cout<< "The abscissa of the point - Y: " <<CoordY<<endl;

}

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!<<\n");

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!<<\n");

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!<<\n");

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!<<\n");

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!<<\n");

getch();

if (num == 0)

scanf("%*[^\n]");

}

else

if (work < 0)

{

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

"be greater than 0<<" <<endl;

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!<<\n");

getch();

if (num == 0)

scanf("%*[^\n]");

}

else

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

{

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

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

getch();

}

else

break;

}

return work;

}

}

}

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

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

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

(X0,Y0)

RO,Fi

(X,Y)

RO,Fi

(.) sim

Angle

(.) Rotate

1.

(1;1)

1.41421

0.785398

(0;0)

0

0

1.41421

3.92699

0.785

1.41421

1.5704

2.

(3;4)

5

0.927295

(4;12)

12,6491

1.24905

20.6155

1.32582

1.314

14.5908

0.664785

3.

(100;1000)

1004,99

1.47113

(100;-700)

707.107

4.85429

2402.08

4.75403

4.56

2021.72

5.78949

4.

(-150;-5)

150,083

3.17491

(70,-49)

85,4459

5.67246

304.547

5.97286

6.283

150.074

3.17464

10)Итог

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

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

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

11.Вывод

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

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

Размещено на Allbest.ru


Подобные документы

  • Формальная постановка задачи и спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров и текст программы на языке C++. Тестирование программы с целью определения корректности ее работы.

    контрольная работа [27,5 K], добавлен 07.07.2012

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

    курсовая работа [532,7 K], добавлен 20.07.2014

  • Использование класса статических массивов структур и базы данных "ODER" при создании программы на языке С++. Основные формы выдачи результатов. Технические и программные средства. Тесты для проверки работоспособности алгоритма создания программы.

    курсовая работа [1,1 M], добавлен 17.03.2015

  • Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.

    курсовая работа [742,6 K], добавлен 03.07.2011

  • Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.

    курсовая работа [560,1 K], добавлен 18.07.2012

  • Разработка эскизного и технического проектов программы, ее назначение и область применения, технические характеристики. Организация входных и выходных данных, выбор состава технических и программных средств. Текст программы, ее описание и тестирование.

    курсовая работа [1,3 M], добавлен 15.11.2009

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

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

    курсовая работа [1,5 M], добавлен 21.09.2010

  • Проектирование программы "Будильник" с использованием программной среды, позволяющей осуществлять получение и обработку значений времени и воспроизведение звукового файла. Разработка технического и эскизного проектов программы. Спецификация программы.

    курсовая работа [84,2 K], добавлен 15.04.2013

  • Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.

    курсовая работа [22,6 K], добавлен 10.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.