Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

09.21.12 / Повторение / 0_Пример структурный

.doc
Скачиваний:
46
Добавлен:
08.06.2015
Размер:
272.9 Кб
Скачать

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

Сформировать и протестировать два массива: элементов типа Фигура и их площадей.

Состояние экземпляра - полярные координаты центра фигуры и ее радиус, а состояние задаваемое пользователем – Декартовы координаты центра и радиус.

Действия по формированию и выводу массива должны быть реализованы с помощью отдельных функций.

Возврат сформированных массивов должен быть осуществлен через список параметров.

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

Задача реализуется с использованием типа данных класс на языке С++.

В роли входных данных выступает пара координат центра в декартовой системе и радиус для каждого элемента массива.

В роли выходных данных выступает пара координат центра и радиус экземпляра, а также его площадь.

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

  1. Исходные данные: Входные данные были рассмотрены в отчете к классу Фигура. Количество элементов массива задается пользователем и не должно быть: num.

  2. Выходные данные: Выходные данные были рассмотрены в отчете к классу Фигура, за исключением того, что в данной программе никаких проблемных действий (кроме вычисления площади) над экземплярами не производится.

  3. Связь выходных данных с исходными данными: Связь выходных данных с исходными прослеживается аналогично связи в отчете к классу Точка и классу Фигура,

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

  1. Исходные данные: Исходные данные представляют собой массив из элементов типа класса Фигура (CFigure Ms_Fig[max_num]), количество элементов в котором представляется поименованной константой const int max_num=10, но количество используемых элементов – int size

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

Никакого контроля при вводе самих элементов по сравнению с программой для класса Фигура не добавлено.

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

В роли выходных данных служит набор из выходных данных для экземпляров класса фигура (CFigure Ms_Fig[max_num]) и массив площадей этих фигур (float Ms_Area[max_num]), учитывая введенные выше уточнения.

Сценарий диалога:

  1. Общая схема диалога:

Вид интерфейса программы:

Интерфейс программы прост и понятен в обращении.

Рис. 1

Макет диалога с пользователем 1

Рис. 2

Макет диалога с пользователем 2

Рис. 3

Макет диалога с пользователем 3

Рис. 4

Макет диалога с пользователем 4

Рис. 5

Макет диалога с пользователем 5

Рис. 6

Макет диалога с пользователем 6

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

Алгоритмы:

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

  1. Выбор экземпляра массива

  2. Организация ввода массива поэлементно

  3. Организация заполнения массива площадей

  4. Организация вывода массивов

Дополнительные задачи:

  • также программа должна иметь удобный и доступный в освоении интерфейс

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

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

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

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

Имя функции

Назначение

Параметры

Результаты

Доступ

Входные

Выходные

Транзитные

vvod_x_y

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

-

float x0,y0

-

Ввод после соответствующих запросов

+

vvod_r

Ввод значения радиуса фигуры

-

float vvod_r

-

Ввод после соответствующих запросов

+

M_FInput

Ввод массива фигур

CFigure Ms_Fig[], int size

CFigure Ms_Fig[]

-

Ввод массива

+

M_AInput

Заполнение массива площадей

CFigure Ms_Fig[],float Ms_Area[], int size

float Ms_Area[]

-

-

+

M_FOutput

Вывод массива фигур и площадей

CFigure Ms_Fig[],float Ms_Area[], int size

-

-

Вывод массива фигур и площадей

+

Текст программы на С++:

//File: MS_FIG.CPP

//Projecting and testing of massive of figures

//Author: Khomyakov Marat

//gr. 2352

//Date of last edition: 8.07.04

#include<iostream.h>;//Stream library

#include<math.h>//Math library

#include<values.h>//Values library

#include<conio.h>//Screen library

#include<CL_FIG.h>//Class Figure

void vvod_x_y(float &x0,float &y0)

{

cout << endl

<< "Please insert point in Decart system from interval ["

<< -MAXFLOAT

<< ","

<< MAXFLOAT

<< "]:"

<< endl

<< "x=";

cin >> x0;

cout << endl

<< "y=";

cin >> y0;

}

float vvod_r(void)//Function that returns value of input radius

{

float r0=0;//Temporary variables for input radius process

cout << endl

<< "Please insert radius from interval [0,1000]:"

<< endl

<< "r=";

cin >> r0;

return r0;

}

int vvod_max_num(void)//Function that returns value of input radius

{

int max_num0=0;//Temporary variables for input radius process

cout << endl

<< "Please insert numbers of figures to be inputed [0,10]:"

<< endl

<< "Number=";

cin >> max_num0;

return max_num0;

}

/*

float vvod_ang(void)//Function that returns value of input angle

{

float ang0=0;//Temporary variable for rotate point process

cout << endl

<< "Input angle for rotation point around (0,0) CW ["

<< -MAXFLOAT

<< ","

<< MAXFLOAT

<< "]:"

<< endl

<< "angle=";

cin >> ang0;

return ang0;

}

void vvod_dx_dy(float &dx0,float &dy0)//Function that returns input shifts

{

//float dx,dy;//Temporary variables for shift point process

cout << endl

<< "Please insert shifts in Decart system from interval ["

<< -MAXFLOAT

<< ","

<< MAXFLOAT

<< "]:"

<< endl

<< "dx=";

cin >> dx0;

cout << endl

<< "dy=";

cin >> dy0;

}

*/

void M_FInput(CFigure Ms_Fig[],int size)

{

cout << endl

<< size

<< " element of figure massiv will be inputed:"

<< endl;

for ( int i = 0 ; i < size; i ++ )

{

float x0 = 0,y0 = 0,r0 = 0;//Temporary variables for input radius process

vvod_x_y(x0,y0);

r0=vvod_r();

if (( r0 >= 0 ) && ( r0 <= 1000 ))

{

CPoint point0(x0,y0);

CFigure fig0(r0,point0); //Temp figure to input element of massive

Ms_Fig[i]=fig0; //Input of massive element

cout << "Saved figure in "

<< i

<< " element of massiv:"

<< endl;

Ms_Fig[i].vivod();

Ms_Fig[i].vivod1();

cout << endl; //

cout << "Leave " //

<< size - i - 1 // Help message

<< " figures to enter." //

<< endl; //

}

else

{

cout << "Error. Invalid r."

<< endl

<< endl;

}

}

}

void M_FOutput(const CFigure Ms_Fig[],const float Ms_Area[],int size)

{

cout << endl

<< "Inputed massive is:"

<< endl

<< endl;

for (int i=0;i<size;i++)

{

cout << endl

<< i

<< " massive element:"

<< endl;

Ms_Fig[i].vivod();

Ms_Fig[i].vivod1();

cout << "Area: "

<< Ms_Area[i]

<< endl;

getch();

}

}

void M_AInput(float Ms_Area[],const CFigure Ms_Fig[],int size)

{

for ( int i = 0 ; i < size ; i ++ )

{

Ms_Area[i]=Ms_Fig[i].area();

}

}

void main(void)//Main function that tests class

{

/*Begin of greeting*/

clrscr();

cout << "Welcome."

<< endl

<< "This is programm that enters massive of figure."

<< endl

<< "It is demonstration version. Register to have all apartunities."

<< endl

<< endl

<< "Author: Khomyakov Marat"

<< endl

<< "Date of last edition: 8.07.04"

<< endl;

/*End of greeting*/

cout << endl

<< "Press alphabetibo-numeric key to continue."

<< endl;

getch();

const int max_num = 10;

int num = 0;

num = vvod_max_num();

if (( num >= 0 ) && ( num <= 10 ))

{

CFigure Ms_Fig[max_num];

float Ms_Area[max_num];

M_FInput(Ms_Fig,num);

M_AInput(Ms_Area,Ms_Fig,num);

M_FOutput(Ms_Fig,Ms_Area,num);

}

else

{

cout << "Error. Invalid Number of figures."

<< endl

<< endl;

}

cout << endl

<< "Thank you for using our programm."

<< endl //

<< "All rights reserved. (c)" //Parting

<< endl

<< "Press alphabetibo-numeric key to exit."

<< endl;

getch();

}

Тестирование:

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

Составим 5 тестов для вышеописанной цели в форме “Действия (Ожидаемый результат)”:

  1. Ввод 1 элемента массива (нормально)

  2. Ввод 10 элементов массива (нормально)

  3. Ввод 0 элементов (нормально)

  4. Попытка ввода -1 элемента (ошибка)

  5. Попытка ввода 11 элементов (ошибка)

Вывод:

  • Работоспособность программы на вышеописанных тестах подтверждается разработчиком.

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

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

9