- •1. Абстрактные типы данных
- •Пример 1
- •1.4. Разработка объектов
- •1.4.1. Объекты и композиция
- •Пример 3
- •1.4.3. Объекты и наследование
- •1.4.4. Наследование в программировании
- •1.4.5. Упорядоченные списки и наследование
- •1.4.6. Повторное использование кода
- •1.4.7. Спецификации класса SeqList и OrderedList
- •1.5. Приложения с наследованием классов
- •1.6. Разработка объектно-ориентированных программ
- •1.6.1. Анализ задачи/определение программы
- •1.6.2. Разработка
- •1.6.3. Кодирование
- •1.6.4. Тестирование
- •1.6.5. Иллюстрация программной разработки: Dice график
- •Замечание
- •Программа 2. Диаграмма бросания костей
- •1.7. Тестирование и сопровождение программы
- •1.7.1. Объектное тестирование
- •1.7.2. Тестирование управляющего модуля
- •1.7.3. Программное сопровождение и документирование
- •1.9. Абстрактные базовые классы и полиморфизм
- •1.9.1. Полиморфизм и динамическое связывание
- •2.1. Пользовательский тип — класс
- •2.1.1. Объявление класса
- •Пример 1.
- •2.1.2. Конструктор
- •2.1.3. Объявление объекта
- •2.1.4. Реализация класса
- •2.1.5. Реализация конструктора
- •2.1.6. Создание объектов
- •Пример 2.
- •2.2. Примеры классов
- •2.2.1. Класс Temperature
- •2.2.2. Реализация класса Temperature
- •2.2.3. Класс случайных чисел
- •Пример 3.
- •2.2.4. Реализация класса RandomNumber
- •2.3. Объекты и передача информации
- •2.3.1. Объект как возвращаемое значение
- •2.3.2. Объект как параметр функции
- •2.4. Массивы объектов
- •2.4.1. Конструктор умолчания
- •2.5. Множественные конструкторы
- •2.5.1. Реализация класса Date
- •2.6. Практическое применение: Треугольные матрицы
- •2.6.1. Свойства верхней треугольной матрицы
- •2.6.2. Хранение треугольной матрицы
- •Пример 4.
- •Пример 5.
- •2.6.3. Класс TriMat
- •2.6.5. Реализация класса TriMat
Замечание
Эмпирическая вероятность определяется моделированием большого количества событий и записью результатов. Отношение количества появлений некоторого события к количеству всех моделируемых событий представляет эмпирическую вероятность того, рассматриваемое событие произойдет. Например, если бросание костей повторится 100000 раз и сумма 4 возникнет 10000 раз, то эмпирическая вероятность этой суммы равна 0,10.
Прежде всего следует ясно определить задачу. Этот процесс включает понимание входа, выхода и промежуточных вычислений. В фазе анализа задачи клиент формирует серию требований к системе. Они включают контроль за вводом данных, указание вычислений и используемых формул и описание желаемого выхода.
Определение программы. Программа запрашивает пользователя ввести число N – количество бросаний двух костей. Поскольку бросание костей имеет случайный результат, используем для моделирования N бросаний случайные числа. Программа ведет запись количества появлений каждой возможной суммы S (2 < S < 12). Эмпирическая вероятность определяется делением количества результатов S на N. Что касается выхода, это дробное значение используется для определения высоты прямоугольника на нашей диаграмме. Результаты выводятся на экран как столбцовая диаграмма.
Объектная разработка. Программа использует класс Line для создания осей координат и класс Rectangle – для построения столбцов. Эти классы вводятся в разделе 1.4 Разработка объектов. Бросание костей – это метод в классе Dice, который обрабатывает две кости. Далее следует объявление класса Dice. Его реализация и тестирование приводятся в программе вместе с реализацией и тестированием классов Line и Rectangle.
#include random.h
class Dice
private:
// данные-члены
int diceTotal; // сумма д вух костей
int diceList[2]; // список очков двух костей
// класс генератора случайных чисел, используемый для
// моделирования бросаний
RandomNumber rnd;
public:
// конструктор
Dice(void);
// методы
void Toss(void);
int Total(void) const;
void DisplayToss(void) const;
};
Разработка управления процессом. Для построения диаграммы бросания костей главный модуль вызывает три подпрограммы, которые выполняют основные действия программы. Функция SimulateDieToss использует методы из класса Dice для бросания костей N раз. Draw Axes вызывает метод Draw в классе Line для рисования осей координат графика, a Plot рисует серию прямоугольников, которые образуют столбцовую диаграмму. Функция Plot вызывает Мах для определения максимального количества появлений любой возможной суммы. Это значение позволяет нам вычислить относительную высоту каждого прямоугольника диаграммы. Структурное дерево этой программы показано на рис. 1.8. Далее следуют объявления для каждого управляющего модуля в структурном дереве.
Главная
SimulateDieToss
DrawAxes
Plot
Рис. 1.8. Древовидная структура программы Dice Graph
main
Передаваемые параметры: Нет
Выполнение:
Запросить у пользователя количество бросаний костей в моделировании. Вызвать функцию SimulateDieToss для выполнения бросаний и записать количество раз, когда возникает каждая возможная сумма: (2 < Total <. 12). Нарисовать оси координат функцией DrawAxes и создать столбцовую диаграмму функцией Plot.
Возвращаемые параметры: Нет
SimulateDieToss
Передаваемые параметры:
tossTotal Массив tossTotal содержит количество появлений каждой суммы в диапазоне от 2 до 12. tossTotal [i] – это количество появлений суммы i при бросании костей tossCount раз.
tossCount Количество бросаний N при моделировании.
Выполнение:
Создать объект Dice и использовать его для бросания костей указанное количество раз, записывая в массив tossTotal количество раз, когда возникает сумма 2, количество раз, когда возникает сумма 3, . . . , количество раз, когда возникает сумма 12.
Возвращаемые параметры:
Массив tossTotal с количеством раз, когда возникает каждая сумма.
DrawAxes
Передаваемые параметры:
Нет Выполнение:
Создать два объекта Line: один – для вертикальной оси (оси у) и один – для горизонтальной оси (оси х). Ось у – это линия от (1.0, 3.25) до (1.0, 0.25) . Ось х – это линия от (0.75, 3.0) до (7.0, 3.0) . Вертикальный диапазон графика равен 2,75.
Возвращаемые параметры: Нет
Передаваемые параметры:
а Массив, содержащий длинные значения данных,
n Количество значений данных в а.
Выполнение:
Найти максимальное значение элементов в массиве а.
Возвращаемый параметр:
Максимальное значение в массиве.
Plot
Передаваемый параметр:
tossTotal Массив, содержащий количество появлений каждой возможной суммы, вычисленной в SimulateDieToss.
Выполнение:
Поиск максимальной суммы (maxTotal) в массиве tossTotal для диапазона индекса 2-12. Затем каждый элемент в массиве генерирует соответствующую часть (tossTotal [i]/ maxTotal) вертикального диапазона графика. Разделить 6-дюймовый интервал оси х от (1.0, 3.0) до (7.0, 3.0) на 23 равных сегмента и построить соответствующие прямоугольники, чьи высоты – это функция (tossTotal [i]) / maxTotal*2.75, 2 < i < 12.
Возвращаемые параметры: Нет