Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактные классы.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
2.25 Mб
Скачать

Программа 2. Диаграмма бросания костей

Главная программа запрашивает пользователя ввести количество бросаний костей для моделирования. Наш запуск программы тестирует случай 500 000 бросаний костей. В конце выполнения задачи система ожидает нажатия клавиши или щелчка кнопкой мыши для завершения работы. Классы Line и Rectangle содержатся в файле figures.h, а класс Dice содержится в файле dice.h. Подпрограммы рисования графических примитивов находятся в graphlib.h.

#include <iostream.h>

#include "figures.h"

#include "dice.h"

#include "graphlib.h"

// Бросание двух костей tossCount раз.

// Запись числа выпавших "двоек" в tossTotal[2],

// "троек" – в tossTotal [3] и так далее

void SimulateDieToss( long tossTotal[], long tossCount )

{

long tossEvent;

int i;

Dice D;

// очистить каждый элемент массива tossTotal

for (i=2; i 12; i++)

tossTotal[i] = 0;

// Бросание костей tossCount раз

for (tossEvent = 1; tossEvent tossCount; tossEvent++ )

{

D.Toss();// бросание костей

tossTotal[D.Total()]++; // увеличение счетчика

}

}

// Нахождение максимального значения в массиве их n элементов

long Max(long а[ ] , int n)

{

long Imax = a[0] ;

int i;

for (i=l; i n; i++)

if (a[i] Imax)

Imax = a [ i ];

return Imax;

}

// Рисование двух осей void DrawAxes (void)

{

const float vertspan = 3.0;

Line VerticalAxis (Point(1.0, vertspan+0.25),

Point(1.0, 0.25) );

VerticalAxis . Draw ( );

Line HorizontalAxis(Point(0.75,vertspan),Point(0.75,vertspan));

HorizontalAxis . Draw ( );

}

// Рисование графического столбца

void Plot (long tqssTotal [] )

{

const float vertspan =3.0, scaleHeight = 2 .75;

float x, rectHeight, dx;

long maxTotal;

int i;

// Нахождение максимального значения в массиве tossTotal.

// Поиск для индексов в диапазоне 2-12

maxTotal = Max (stossTotal [2] , 11);

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

dx = 6.0/23.0; х= 1.0 +dx;

// Цикл- 11 раз.

// В цикле :

//определяется высота столбца для рисования в текущем положении;

//создается объект Rectangle для соответствующего

//положения, высота и ширина;

//рисуется столбец и происходит переход к следующему столбцу

for (i=2; i 12; I++)

rectHeight = (float (tossTotal [i] ) /maxTotal) *scaleHeight;

Rectangle CurrRect(Point(x,vertspan-rectHeight), Point(x+dx,

vertspan);

CurrRect . Draw ( );

x += 2.0*dx;

void main (void)

{

long numTosses;

long tossTotal [13] ;

// запрос числа моделирования бросаний

cout << "Введите число бросаний: ";

cin >> numTosses;

SimulateDieToss(tossTotal, numTosses); //бросание

InitGraphics();// инициализация графической системы

DrawAxes();// рисование осей

Plot(tossTotal); // построение графика

ViewPause();// ожидание нажатия клавиши или щечка мышью

ShutdownGraphics (); // закрытие графической системы

1.7. Тестирование и сопровождение программы

Использование объектно-ориентированного программирования способствует созданию систем, позволяющих выполнять независимое тестирование объектов и повторно использовать написанные ранее классы. Эти преимущества уменьшают риск появления ошибок при создании сложных программных систем, поскольку они развиваются, расширяясь из меньших систем, в которых вы уверены. Тестирование выполняется в процессе разработки программной системы.