Вероятность четных случайных чисел

Задача

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

Пояснение к задаче и алгоритм решения

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

  1. Создадим счетчик четных случайных чисел и присвоим ему значение 0.
  2. Сгенерируем 1000 случайных чисел (например, от 0 до 99) и проверим каждое из них на четность. Четным является то число, при делении которого на 2 остаток равен 0. Если очередное число четное, то будем увеличивать счетчик на 1.
  3. Вероятность выпадения четных чисел оценим в процентах. Для этого количество четных чисел разделим на общее количество сгенерированных (в данном случае 1000) и умножим на 100.

Программа должна выдать около 50%. Можно увеличить число генераций, например до 10 тысяч. В таком случае отклонение от 50% будет меньше.

Исходный код на языке программирования Pascal

const N = 1000;
var i,q: integer;
begin
    randomize;
    q := 0;
    for i:=1 to N do
        if random(100) mod 2 = 0 then
            q := q + 1;
    writeln(q / N * 100:4:2,'%');
end.

Пример(ы) выполнения программы на языке Pascal

48.80%

Исходный код на языке программирования C

#include <stdio.h>
#define N 1000
main() {
    int i,q;
    q = 0;
    srand(time(NULL));
    for (i=0; i<N; i++)
        if (rand()%100 % 2 == 0)
            q += 1;
    printf("%.2f%%\n", (float)q/N * 100);
}

Пример(ы) выполнения программы на языке C

51.10%

Исходный код на языке программирования Python

from random import random
N = 1000
q = 0
for i in range(N):
    if int(random()*100) % 2 == 0:
        q += 1
print("%.2f%%" % (q / N * 100))

Пример(ы) выполнения программы на языке Python

49.90%

Исходный код на языке программирования КуМир

алг
нач
  цел N = 1000
  цел i,q
  q := 0
  нц для i от 1 до N
    если mod(irnd(100),2) = 0 то
      q := q + 1
    все
  кц
  вывод q / N * 100, "%"
кон

Пример(ы) выполнения программы на языке КуМир

50.5%

Особенности решения задачи в среде КуМир

Функция irnd() генерирует целое число от 1 до указанного в скобках включительно.

Исходный код на языке программирования Basic

N = 1000
q = 0
for i=0 to N
        if int(rand*100) % 2 = 0 then
                q = q + 1
        endif
next i
print (q/N * 100) + "%"

Пример(ы) выполнения программы на языке Basic

48.3%

Тема

Циклы

Уровень сложности

Простой

Дата публикации