Реализация класса Temperature
Каждый метод в классе записывается вне тела класса с использованием оператора области действия. Конструктор принимает начальные показания высокой и низкой температуры, которые присваиваются полям highTemp и lowTemp. Эти значения могут изменяться только методом UpdateTemp, когда новая высокая или низкая температура передаются в качестве параметра. Функции доступа GetHighTemp и GetLowTemp возвращают значение высокой и низкой температуры.
//Конструктор: присвоить данные: highTemp=h и lowTemp=l
Temperature::Temperature(float h, float l): highTemp(h),
lowTemp(l)
{}
//обновление текущих показаний температуры
void Temperature::UpdateTemp (float temp)
{
if (temp>highTemp)
highTemp = temp;
else if (temp<lowTemp)
lowTemp = temp;
}
//возвратить high (самая высокая температура)
float Temperature::GetHighTemp (void) const
{
return highTemp;
}
//возвратить low (самая низкая температура)
float Temperature::GetLowTemp (void) const
{
return lowTemp;
}
Программа 2. Использование класса Temperature
// Example2.cpp
#include <iostream.h>
#include "temp.h"
void main (void)
{
Temperature today (70,50);
float temp;
cout << "Введите температуру в полдень: ";
cin >> temp;
// обновить объект для включения дневной температуры
today.UpdateTemp (temp) ;
cout << "В полдень: Наивысшая :" << today.GetHighTemp ();
cout << " Низшая " << today.GetLowTemp ()<<endl;
cout << "Введите вечернюю температуру: ";
cin >> temp;
//обновить объект для включения вечерней температуры
today.UpdateTemp (temp) ;
cout << "Сегодня наивысшая :" << today.GetHighTemp();
cout << " Низшая " << today.GetLowTemp() << endl;
|
|
}
/*
<3апуск программы pr03_02.cpp>
Введите температуру в полдень: 80
В полдень: Наивысшая :80 Низшая 50
Введите вечернюю температуру: 40
Сегодня наивысшая :80 Низшая 40
*/
Класс случайных чисел
Для многих приложений требуются случайные данные, представляющие случайные события. Моделирование самолета, тестирующее реакцию летчика на непредвиденные изменения в поведении самолета, карточная игра, предполагающая, что сдающий использует тасованную колоду, и изучение сбыта, предполагающее вариации в прибытии клиентов, – все это примеры компьютерных приложений, которые опираются на случайные данные. Компьютер использует генератор случайных чисел (random number generator), который выдает числа в фиксированном диапазоне таким образом, что числа равномерно распределяются в этом диапазоне. Генератор использует детерминистический алгоритм, который начинается с начального значения данных, называемого значением, инициализирующим алгоритм, или seed-значением. Алгоритм манипулирует этим значением для генерирования последовательности чисел. Этот процесс является детерминистическим, так как он берет начальное значение и выполняет фиксированный набор инструкций. Выход является уникальным, определенным данными и инструкциями. По существу, компьютер не производит истинные случайные числа, а создает последовательности псевдослучайных чисел (pseudorandom numbers), которые распределяются равномерно в диапазоне. Вследствие начальной зависимости от seed-значения, генератор создает ту же последовательность при использовании одного и того же seed-значения. Способность повторять случайную последовательность используется в исследованиях моделирования, где в приложении необходимо сравнить различные стратегии, реагирующие на один и тот же набор случайных условий. Например, имитатор полета использует одну и ту же последовательность случайных чисел для сравнения эффективности реакции двух летчиков на аварию самолета. Каждый летчик подвергается одному и тому же набору событий. Однако, если seed-значение изменяется каждый раз при запуске имитатора, мы имеем уникальное моделирование. Эта уникальность свойственна игре, которая обычно создает различную последовательность событий каждый раз в процессе игры.
|
|
Большинство компиляторов предоставляют библиотечные функции, реализующие генератор псевдослучайных чисел, К сожалению, вариация этой реализации в зависимости от компилятора является значительной. Для предоставления генератора случайных чисел, переносимого из системы в систему, мы создаем класс RandomNumber, Этот класс содержит seed-значение, которое должно инициализироваться клиентом. В соответствии с начальным seed-значением генератор создает псевдослучайную последовательность. Класс обеспечивает автоматический выбор seed-значения, когда конструктору не передается никакого значения, и позволяет клиенту создавать независимые псевдослучайные последовательности.
|
|
Спецификация класса RandomNumber
ОБЪЯВЛЕНИЕ
#include <time.h>
// используется для генерации случайного числа
//по текущему seed-значению
const unsigned long maxshort = 65536L;
const unsigned long multiplier = 1194211693L;
const unsigned long adder = 12345L;
class RandomNumber
private:
// закрытый член класса, содержащий текущее seed-значение
unsigned long randSeed;
public:
//конструктор, параметр 0 задает автоматический
// выбор seed-значения
RandomNumber(unsigned long s = 0);
// генерировать случайное целое в диапазоне [0, n-1]
unsigned short Random(unsigned long n);
// генерировать действительное число в диапазоне [0, 1.0]
double fRandom(void);
};
ОПИСАНИЕ
Начальное seed-значение – это беззнаковое длинное число. Метод Random принимает беззнаковый длинный параметр n <= 65536 и возвращает 16-битовое беззнаковое короткое значение в диапазоне 0,..., n–1. Заметьте, что если возвращаемое методом Random значение присваивается целой переменной со знаком, то это значение может интерпретироваться как отрицательное, если n не будет удовлетворять неравенству n<215=32768. Функция fRandom возвращает число с плавающей точкой в диапазоне 0 < fRandom() < 1.0.
|
|
ПРИМЕР
RandomNumber rnd; // seed-значение выбирается автоматически
RandomNumber R(1); // создает последовательность с
// seed пользователя 1
cout << R.fRandom(); // выводит действительное число
// в диапазоне 0—1
//выводит 5 случайных целых чисел в диапазоне 0—99
for (int i = 0; i < 5; i++)
cout << R.Random(100) << " "; // <sample> 93 21 45 5 3
Пример 3.
Создание случайных данных
1.Значение грани кости находится в диапазоне 1¸6 (шесть вариантов). Для имитации бросания кости используйте функцию die.Random(6), которая возвращает значения в диапазоне 0¸5. Затем прибавьте 1 для перевода случайного числа в нужный диапазон.
RandomNumber Die //использует автоматически seeding
dicevalue = die.Random(6) +1;
2.Объект FNum использует автоматическое задание seed-значения для создания случайной последовательности:
RandomNumber FNum;
Для вычисления плавающего значения в диапазоне 50<=х<75 генерируйте случайное число в диапазоне 0¸25, умножая результат f Random на 25. Это расширяет диапазон случайных чисел от 1-й единицы (0<х<1) до 25 единиц (0<х<25). Преобразуйте нижнюю границу нового диапазона, добавив 50:
value=FNum.fRandom()*25+50; //умножение на 25;прибавление 50
Дата добавления: 2018-10-25; просмотров: 174; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!