Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M_RIO2.DOC
Скачиваний:
7
Добавлен:
21.03.2015
Размер:
1.01 Mб
Скачать

Приложение 2. Текст программы-драйвера

// Проект "Бильярд". Драйвер для тестирование подпрограммы

// void TBall::HitOnBall(TBall* aBall)

#include<iostream.h>

#include<graphics.h>

#include"billiard.h"

// Подпрограмма сравнения результатов

// с ожидаемыми значениями

void OutputResults

(TBall *ActiveBall, TBall *PassiveBall,

/*активный и пассивный шары*/

float ExDirection1, float ExEnergy1,

/*Ожидаемые направление и энергия активного шара*/

float ExDirection2, float ExEnergy2)

/*Ожидаемые направление и энергия пассивного шара*/

{

cout << "Результаты теста:" << endl;

cout << " Активный шар" << endl;

cout << " атрибут theDirection: ";

if(ActiveBall->GetDirection() != ExDirection1)

cout << "ОШИБКА !";

cout << " факт " << ActiveBall->GetDirection()

<< "; ожидается " << ExDirection1 << endl;

cout << " атрибут theEnergy: ";

if(ActiveBall->GetEnergy() != ExEnergy1)

cout << "ОШИБКА !";

cout << " факт " << ActiveBall->GetEnergy()

<< "; ожидается " << ExEnergy1 << endl;

cout << " Пассивный шар" << endl;

cout << " атрибут theDirection: ";

if(PassiveBall->GetDirection() != ExDirection2)

cout << "ОШИБКА !";

cout << " факт " << PassiveBall->GetDirection()

<< "; ожидается " << ExDirection2 << endl;

cout << " атрибут theEnergy: ";

if(PassiveBall->GetEnergy() != ExEnergy2)

cout << "ОШИБКА !";

cout << " факт " << PassiveBall->GetEnergy()

<< "; ожидается " << ExEnergy2 << endl;

};

// Подпрограмма исполнения отдельного теста

void Testing

(int NTest,/*номер теста*/ float aRadius,

/*радиус шаров*/ TPoint aCenter1, float aDirection1,

float anEnergy1, /*Заданные центр, направление и энергия активного шара*/

TPoint aCenter2, float aDirection2, float anEnergy2,

/*Заданные направление и энергия пассивного шара*/

float ExDirection1, float ExEnergy1,

/*Ожидаемые направление и энергия активного шара*/

float ExDirection2, float ExEnergy2

/*Ожидаемые направление и энергия пассивного шара*/

)

{

TBall *theBall1, *theBall2;

// указатели на активный и пассивный шары

// Инициализация входных данных (объектов)

theBall1 = new TBlackBall(aCenter1, aRadius);

theBall2 = new TBlackBall(aCenter2, aRadius);

theBall1->SetDirection(aDirection1);

theBall1->SetEnergy(anEnergy1);

theBall2->SetDirection(aDirection2);

theBall2->SetEnergy(anEnergy2);

// Вывод входных данных в листинг

cout << endl << "---------Тест N " << NTest << endl;

cout << "Входные данные:" << endl;

cout << " Активный шар" << endl;

cout << " theCenter "

<< theBall1->GetCenter().X << ","

<< theBall1->GetCenter().X

<< "; theRadius " << aRadius << endl;

cout << " theDirection " << theBall1->GetDirection()

<< "; theEnergy " << theBall1->GetEnergy() << endl;

cout << " Пассивный шар" << endl;

cout << " theCenter "

<< theBall2->GetCenter().X << ","

<< theBall2->GetCenter().X

<< "; theRadius " << aRadius << endl;

cout << " theDirection " << theBall2->GetDirection()

<< "; theEnergy " << theBall2->GetEnergy() << endl;

// Выполнение тестируемой подпрограммы

theBall1->HitOnBall(theBall2);

// Анализ результатов теста

OutputResults( theBall1, theBall2, ExDirection1, ExEnergy1,

ExDirection2, ExEnergy2);

delete theBall1;

delete theBall2;

};

// Головная программа драйвера

int main()

{

// Заголовок

cout << "Тестирование подпрограммы" << endl;

cout << "void TBall::HitOnBall(TBall* aBall)"

<< endl << endl;

// Подготовка входных данных

const int cBallRadius = 5;

const float cMaxEnergy = 200;

TPoint thePoint1 = {5,10};

TPoint thePoint2 = {10,10};

TPoint thePoint3 = {100,20};

// установить графический режим для дисплея

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode,"\\bc\\bin");

// Реализация тестов

Testing(5, cBallRadius, thePoint1, Pi/4+Pi/2, 0.1*cMaxEnergy,

thePoint2, Pi/4, 0.3*cMaxEnergy,

Pi/4, 0.2*cMaxEnergy, Pi/4+Pi/2, 0.2*cMaxEnergy);

Testing(6, cBallRadius, thePoint1, Pi/4, 0.7*cMaxEnergy,

thePoint2, Pi/4+Pi/2, 0.3*cMaxEnergy,

Pi/4, 0.5*cMaxEnergy, Pi/4+Pi/2, 0.5*cMaxEnergy);

Testing(7, cBallRadius, thePoint1, Pi/4+Pi/2, cMaxEnergy/2,

thePoint3, Pi/4, cMaxEnergy/3,

Pi/4+Pi/2, cMaxEnergy/2, Pi/4, cMaxEnergy/3);

closegraph(); // отменить графический режим для дисплея

// Сравнение полученных данных с ожидаемым результатом

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]