Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
47
Добавлен:
10.02.2015
Размер:
55.81 Кб
Скачать

Практикум 5.

1.Генератор случайных чисел.

2.Вероятность угадывания числа из заданного диапазона.

3.Вероятность реализации нескольких случайных событий.

1. Генератор случайных чисел.

Во многих алгоритмах требуется генерация случайных чисел. В DELPHI для этих целей используются две стандартные подпрограммы:

•Процедура Randomize без параметров, устанавливающая начальное состояние генератора случайных чисел в «почти случайное» состояние.

•Функция Random(NMax), возвращающая целое случайное (точнее псевдослучайное) число в диапазоне от 0 до NMax-1. Функция Random без параметров возвращает действительное число в диапазоне от 0.0 до 1.0.

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

Вероятность угадывания числа из заданного диапазона.

Особенностью алгоритмов по определению вероятности с использованием датчика случайных чисел является очень большое число попыток, поэтому все счетчики надо устанавливать по максимальной мощности типа в longword. Кроме того, следует заранее предусмотреть меры против зацикливания вычислений. Отладка должна проводиться на малых числах (в пределах 10…100).

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

Эта переменная в дальнейшем будет использоваться для
накопления числа неудачных попыток. Сейчас nfail=1 означает, что не за imax попыток не
достигнуто ни одного совпадения r=n

Достижение одного успешного события.

Const min=0; max=10; imax=100; Var r, n, i, nfail: longword; BEGIN

randomize; nfail:=0; r:=min+random(max-min+1); i:=0;

repeat

inc(i); // i:=i+1; n:=min+random(max-min+1);

until (r=n) or (i>imax);

writeln(' r=',r,' n=', n,' i=',i); if i>imax then inc(nfail); writeln(' nfail=',nfail);

readln;

END.

Несколько удачных попыток

randomize; itry:=0; nfail:=0; r:=min+random(max-min+1); for j:=1 to npr do

begin i:=0; repeat

inc(i); n:=min+random(max-min+1); until (r=n) or (i>imax); itry:=itry+i;

if i>imax then inc(nfail); end;

if (npr-nfail)>0 then

aver:=itry div (npr-nfail) else aver:=0;

writeln(' nfail=',nfail,' nOK=',npr-nfail,' AvCount=', aver);

Вероятность реализации нескольких случайных событий.

Игральная кость с шестью гранями, каждая из которых соответствует выигрышу от 1 до 6 очков), бросается 10 раз, найти вероятность того, что грань с 6 очками выпадет 2 раза.

Эта задача имеет аналитическое решение, которое находится по формуле Бернулли.

Pn(m)=pmqn-m(n!)/((n-m)!m!)

Pn(m) - Вероятность m–кратного успеха при n испытаниях; p

вероятность выигрыша при одном испытании; q –

вероятность проигрыша при одном испытании. Применительно к нашей задаче n=10, m=6, p=1/6, q=5/6.

Эту формулу мы будем использовать только для проверки

правильности решения. На всякий случай (чтобы не работать головой) приведу две готовые цифры P4(1)=0,386; P4(2)=0,116.

Const n=10; m=2; npv=100000;//Число попыток

Var i, j, nOK, ntry, ntryOK : longword;

BEGIN

randomize; ntry:=0; ntryOK:=0; for j:=1 to npv do

begin nOK:=0;

for i:=1 to n do

if (random(6)+1)=6 then inc(nOK); if nOK=m then inc(ntryOK);

//Ниже – отладочный вывод, заблокирован //writeln(' nOK=',nOK,' ntryOK=', ntryOK);

end;

writeln(' P=', ntryOK/(npv):7:3); readln

END.

Задание 1.

1.Определить величину выигрыша или проигрыша при одной покупке трех лотерейных билетов ценой 10 рублей каждый, если известно, что в пачке из 1000 билетов с номерами от 000 до 999, есть 10 выигрышных билетов. Уникальные номера выигрышных билетов должны быть заданы. Выигрыш по каждому билету равен 100 рублей.

2.Сколько светофоров в среднем может проехать автомобиль, если на его пути по трассе расположены светофоры с равновероятным состоянием запрещающего и разрешающего сигналов. Количество попыток ограничено только мощностью компьютера.

3.Вариант задачи 2. Светофоры имеют три равновероятных состояния: красный, желтый и зеленый. Проехать можно на зеленый и желтый.

Задание* 2.

1.Два стрелка одновременно стреляют по 3 мишеням, не зная, куда стреляет сосед. Вероятность поражения мишени для каждого стрелка, является случайной величиной из диапазона 0…10 баллов. Для поражения одной мишени требуется 10 баллов, после чего огонь ведется по оставшейся. Найти среднее количество выстрелов, необходимое для поражения мишеней.

Соседние файлы в папке Практикумы 1 курс