Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМК-2.doc
Скачиваний:
192
Добавлен:
11.05.2015
Размер:
626.18 Кб
Скачать

3. Генерация «псевдослучайных» данных.

Часто возникает задача генерации случайных данных, на которых программа испытывается. Система программирования VisualС++ осуществляет поддержку решения поставленной задачи, предлагая функции:

int rand( void)

Генерация псевдослучайного целого числа из интервала от 0 до RAND_MAX (RAND_MAX определен как0x7fff)

void srand(unsigned int seed)

Установка начального значения генератора псевдослучайных чисел

Эти функции описаны в заголовочном файле stdlib.h.

Встроенный генератор позволяет получать серию псевдослучайных целых чисел. Первое обращение к функции randинициирует начальную установку генератора, эквивалентную исполнению функцииsrand(1).

Всегда можно повторить проведенный эксперимент, указывая ту же самую начальную установку, или, наоборот, проводить новые эксперименты, задавая разные начальные установки.

В случае, когда хотим получать набор значений из некоторого ограниченного интервала [a,b], достаточно неплохие результаты дает следующий прием:

a+rand()%((b–a)+1),

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

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main()

{

int i, j, a = 1, b=3; /* Display 9 numbers. */

for( i = 0; i < 9; i++ ) {

j = rand();

printf( "%2u.%6d %d\n", i+1, j, a+j%(b-a+1) );

}

getch();

}

Результат работы этой программы представлен на рисунке:

В случае, когда необходимо использование вещественных чисел, удобно воспользоваться псевдослучайными числами из интервала [0,1], которые могут быть получены как (double)rand()/(double)RAND_MAX.

Как правило, «грязные» генераторы (псевдо)случайных чисел используются тогда, когда в моделируемый процесс нужно внести некоторую стохастику (хаос), не слишком заботясь о точном соответствии свойств генерируемого распределения математически равномерному. Кроме того, к «грязным» отнесены те генераторы, которые используют свойства представления чисел в конкретном компьютере для оптимального по быстродействия коду. При этом они могут иметь хорошее распределение, а время их работы может быть в десятки раз меньшим, чем время работы чистых.

«Чистые» генераторы обеспечивают равномерное распределение случайных чисел и независимость от конкретной машины. Как плата за это - существенно меньшее быстродействие. Существуют алгоритмы, для которых период генерируемой последовательности оценивается как 1018.

4. Абстрактные типы данных.

Абстрактные структуры данных предназначены для удобного хранения и доступа к информации. Они предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя. Это позволяет добиться большей модульности программы. Абстрактные структуры данных иногда делят на две части: интерфейс, набор операций над объектами, который называют АТД (абстрактный тип данных) и реализацию. Язык программирования Си предоставляют удобный интерфейс для чисел: операции +, *, = и т.п., но при этом скрывают саму реализацию этих операций, машинные команды.