Реализация класса 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!