Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Содержание

Генерация случайных чисел в языке Си

Пожалуйста, приостановите работу AdBlock на этом сайте.

Иногда может возникнуть необходимость в генерации случайных чисел. Простой пример.

Имеется список из 53 человек. Необходимо выбрать из них победителя. Если вы выберете его самостоятельно, то вас могут обвинить в предвзятости. Поэтому вы решили написать программу. Она будет работать следующим образом. Вы вводите количество участников N , после чего программа выводит одно число – номер победителя.

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

Функция rand().

Данная функция возвращает случайное целое число в диапазоне от нуля до RAND_MAX . RAND_MAX это специальная константа языка Си, в которой содержится максимальное целое число, которое может быть возвращено функцией rand() .

Функция rand() определена в заголовочном файле stdlib.h . Поэтому, если хотите использовать rand в своей программе, не забудьте подключить этот заголовочный файл. Константа RAND_MAX тоже определена в этом файле. Вы можете найти этот файл у себя на компьютере и посмотреть её значение.

Давайте посмотрим на эту функцию в действии. Запустим следующий код:

Пять случайных чисел, сгенерированных функцийе rand

Рис.1 Пять случайных чисел, сгенерированных функцийе rand

Но нам бы хотелось получить числа от 1 до 53 , а не всё подряд. Ниже описано несколько трюков, позволяющих наложить ограничения на функцию rand() .

Ограничить случайные числа сверху.

Пять случайных чисел меньше 100

Ограничить числа снизу.

Функция rand возвращает случайные числа из отрезка [0, RAND_MAX] . А что если нам нужны только числа большие числа M (например, 1000 )? Как быть? Всё просто. Просто прибавим к тому, что вернула функция rand, наше значение M . Тогда если функция вернёт 0 , итоговый ответ будет M , если 2394 , то итоговый ответ будет M + 2394 . Этим действием мы как бы сдвигаем все числа на M единиц вперёд.

Задать границы функции rand сверху и снизу.

Например, получить числа от 80 до 100 . Кажется, нужно просто объединить два способа, которые приведены выше. Получим что-то вроде этого:

Да, такой способ работать не будет. Давайте прокрутим эту программу руками, чтобы убедиться в том, что мы допустили ошибку. Допустим rand() вернула число 143 . Остаток от деления на 100 равен 43 . Дальше 80 + 43 = 123 . Значит такой способ не работает. Подобная конструкция выдаст числа от 80 до 179 .

В общем случае если нам нужно получить числа из отрезка [A;B] , то необходимо воспользоваться следующей конструкцией:
A + rand()%(B-A+1) .

Согласно этой формуле перепишем нашу последнюю программу:

Случайные числа из диапазона [80;100]

Ну вот, теперь вы можете решить исходную задачу урока. Сгенерировать число из отрезка [1; N] . Или не можете?

Но прежде ещё немного полезной информации. Запустите последнюю программу три раза подряд и записывайте себе случайные числа, которые она генерирует. Заметили?

Функция srand().

Да, каждый раз появляются одни и те же одинаковые числа. «Так себе генератор!» – скажете вы. И будете не совсем правы. Действительно, генерируются всё время одинаковые числа. Но мы можем на это повлиять, для этого используется функция srand() , которая также определена в заголовочном файле stdlib.h . Она инициализирует генератор случайных чисел начальным числом.

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

И это можно сделать. Например, воспользуемся функцией time() , которая определена в заголовочном файле time.h . Данная функция, если ей в качестве аргумента передать NULL , возвращает количество секунд, прошедших c 1 января 1970 года . Вот посмотрите, как это делается.

Вы спросите, а что такое NULL ? Резонный вопрос. А я вам пока отвечу, что это специальное зарезервированное слово такое. Могу ещё сказать, что им обозначает нулевой указатель, но т.к. это для вас никакой информации не несёт, то на данный момент рекомендую об этом не думать. А просто запомнить как некоторый хитрый трюк. В будущих уроках мы остановимся на этой штуке поподробнее.

Практика

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

  1. В каких ситуациях ещё может пригодиться генерация случайных чисел? Напишите ваши варианты в комментарии к этому уроку.
  2. Напишите программу, которая выводит на экран значение целочисленной константы RAND_MAX. Найдите файл stdlib.h на вашем компьютере, найдите значение этой константы в этом файле.
  3. Найдите в интернете описание функций, которые определены в заголовочном файле time.h Вы, конечно, ещё не сможете ими пользоваться, но знать, что такие функции есть, всё равно нужно. Ведь когда-то настанет момент, когда ваших знаний будет достаточно для их использования.
  4. Числа, генерируемые функцией rand(), имеют равномерное распределение. Это значит, что если запускать функцию rand очень много раз и каждый раз записывать, какое число выпало, то количество выпадения различных чисел будет одинаковым. Например, если генерировать только числа 0 и 1, то через 100 запусков примерно 50 раз выпадет ноль и 50 раз единичка. Обратите внимание, что я говорю примерно. Может быть, например, 49 и 51, или 53 и 47. Если рассматривать это в отношении к общему числу запусков, получим (49/100 и 51/100 или 53/100 и 47/100 соответственно). Но чем больше экспериментов мы проведём, тем ближе отношение количество единичек к количеству испытаний будет стремиться к 1/2. Проведите самостоятельно эксперимент с 10, 50 и 100 запусками. Это муторно и долго, если делать руками, но что поделать? В будущем мы напишем программу, чтобы проверить свойство равномерности распределения наших случайных чисел.

Дополнительные материалы

    определённые в заголовочном файле stdlib.h
  1. Хотя я и употребляю везде словосочетание «случайные числа», но на самом деле получить действительно случайные числа – сложная задача. И в компьютерах обычно используются псевдослучайные числа. Подробнее об этом можно прочитать здесь.
  2. Если не терпится узнать хоть что-то про NULL, то почитайте вот этот урок.
  3. Дата 1 января 1970 года особенная. С неё начинается отсчёт эры UNIX. Подробнее об этом и проблемах, которые нас ожидают.

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

1 задача. Например, используя генератор случайных чисел можно сделать игральный кубик или подобие игрового автомата.
4 задача. Я постарался сделать, но на 30 остановился. У меня получились следующие результаты:
10 генераций: 0-2, 1-8
20 генераций: 0-12, 1-8
30 генераций: 0-15, 1-15

4 задача. Нет, 30 попыток недостаточно. То, что у вас получилось 15/15 это совпадение. Я провёл 5 опытов по 30 раз, вот результаты:
1. 15/15
2. 11/19
3. 15/15
4. 17/13
5. 12/18

Человек который мне помогает изучать язык Си, написал тест, для сравнения Вашей формулы, которая дается на сайте и верной формулы.

#include
#include
#include
void sleep (float);
void print_symbol (int);

int main (void)
// A + rand()%(B-A+1)
// 66+rand()%601
// 600-66+1 = 535, а правильный ответ оказался 666
int a, b;
a = 66;
b = 601;

Подождите-подождите. Почему вы за A и B берёте значения 66 и 601. А и B это начало и конец промежутка из которого вы хотите генерировать числа же.

Пожалуйста, напишите мне в сообщения группы вк. Обсудим подробнее этот вопрос, если у меня есть ошибка, я с удовольствием внесу правки.

Всё-таки вы не правы.
Ищем нижнюю и верхнюю границы диапазона.

1 способ.
rand()%601 может сгенерировать любое число от 0 до 600. Максимально 600. К нему прибавляется 66. Итого получается 666.

Подставим вместо А значение 66. Получим
B — 66 +1 = 601

Отсюда B = 601-1+66 = 666. Итого верхняя граница диапазона 666.

У вас ошибка. Вы почему-то считаете, что B = 601. Хотя B вам надо найти. Разберите внимательно 2 способ.

И все таки мы с вами не согласны:)
У нас с вами получается разный подход к вопросу у вас со стороны математики, у нас со стороны информатики.

где
a — получившееся случайное число;
b — минимальное значение диапазона случайных чисел;
n — смещение для команды rand();

т.е. сначала выполняется rand() %n, а затем полученный результат
прибавляется к b, и получившаяся сумма записывается в a.

Она всегда генерирует число, начиная с 0 с заданным смещением, при
этом число 0 тоже учитывается в смещении.

Т.е. из-за этой особенности максимальное число, которое генерирует
rand(), всегда на 1 меньше, чем заданное смещение.

Если смещение 25, максимальный результат всегда 24.
Если смещение 100, максимальный результат всегда 99.

И если b = 66 и n = 601, максимум всегда будет:
66 + (601 — 1) = 66 + 600 = 666.

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

Подождите, а с чем конкретно вы не согласны? Выскажите, пожалуйста, тезис.

По-моему мы говорим об одном и том же, но только разными словами. Я не призываю заучивать формулы для отрезка, я призываю разобраться в том, как это работает, используя для примера конкретную задачу.) В любом случае спасибо за неравнодушие и дискуссию!

Генерация псевдослучайных чисел в языке Си. Функция rand.
В открывшемся окне мы выбираем тип в меню «Распределение» , после указываем дополнительные параметры, которые изменяются, исходя с типа распределения. Ну и финальный шаг, это указание «Выходной интервал» , именно тот интервал где будут храниться, ваши случайные числа.
[expert_bq id=»1570″]Эта функция более проста и начала нас радовать в базовой комплектации Excel, после 2007 версии, что значительно облегчило работу с генератором, когда необходимо использовать диапазон. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] б) Разработать программу (программы) для моделирования реализации исходов опыта определённое конечное число раз, с обязательным сохранением начальных условий опыта и для расчёта частоты появления интересующего события.
Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Случайное дробное число в excel. Как при помощи Excel создать генератор случайных чисел

  1. В каких ситуациях ещё может пригодиться генерация случайных чисел? Напишите ваши варианты в комментарии к этому уроку.
  2. Напишите программу, которая выводит на экран значение целочисленной константы RAND_MAX. Найдите файл stdlib.h на вашем компьютере, найдите значение этой константы в этом файле.
  3. Найдите в интернете описание функций, которые определены в заголовочном файле time.h Вы, конечно, ещё не сможете ими пользоваться, но знать, что такие функции есть, всё равно нужно. Ведь когда-то настанет момент, когда ваших знаний будет достаточно для их использования.
  4. Числа, генерируемые функцией rand(), имеют равномерное распределение. Это значит, что если запускать функцию rand очень много раз и каждый раз записывать, какое число выпало, то количество выпадения различных чисел будет одинаковым. Например, если генерировать только числа 0 и 1, то через 100 запусков примерно 50 раз выпадет ноль и 50 раз единичка. Обратите внимание, что я говорю примерно. Может быть, например, 49 и 51, или 53 и 47. Если рассматривать это в отношении к общему числу запусков, получим (49/100 и 51/100 или 53/100 и 47/100 соответственно). Но чем больше экспериментов мы проведём, тем ближе отношение количество единичек к количеству испытаний будет стремиться к 1/2. Проведите самостоятельно эксперимент с 10, 50 и 100 запусками. Это муторно и долго, если делать руками, но что поделать? В будущем мы напишем программу, чтобы проверить свойство равномерности распределения наших случайных чисел.

В теле цикла осуществляется переход на новую строку после каждых выведенных на экран пяти чисел. Для этого используется выражение, в котором находится остаток от деления i на 5, результат сравнивается с 0. Чтобы после первого числа не происходил переход на новую строку, iсначала присваивается единица, а не ноль (т.к. 0 делится на 5 без остатка).

Случайное число из диапазона в excel. Генератор случайных чисел Excel в функциях и анализе данных

Итак, для чего же собственно мы можем использовать этом механизм:

  • во-первых : мы можем для тестировки формул, заполнить нужный нам диапазон случайными числами;
  • во-вторых : для формирования вопросов различных тестов;
  • в-третьих : для любого случайно распределения заранее задач между вашими сотрудниками;
  • в-четвёртых : для симуляции разнообразнейших процессов;

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

Создаём генератор случайных чисел с помощью функции СЛЧИС

С помощью функции СЛЧИС, мы имеем возможность генерировать любое случайное число в диапазоне от 0 до 1 и эта функция будет выглядеть так:

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Если возникает необходимость, а она, скорее всего, возникает, использовать случайное число большого значения, вы просто можете умножить вашу функцию на любое число, к примеру 100, и получите:

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

=СЛЧИС()*100;
А вот если вам не нравятся дробные числа или просто нужно использовать целые числа, тогда используйте такую комбинацию функций, это позволит вам после запятой или просто отбросить их:

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

=ОТБР((СЛЧИС()*100);0)
Когда возникает необходимость использовать генератор случайных чисел в каком-то определённом, конкретном диапазоне, согласно нашим условиям, к примеру, от 1 до 6 надо использовать следующую конструкцию (обязательно закрепите ячейки с помощью ):

и полная формула будет выглядеть: =СЛЧИС()*(6-1)+1 , а без дробных частей вам нужно написать: =ОТБР(СЛЧИС()*(6-1)+1;0)

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Создаём генератор случайных чисел с помощью функции СЛУЧМЕЖДУ

Эта функция более проста и начала нас радовать в базовой комплектации Excel, после 2007 версии, что значительно облегчило работу с генератором, когда необходимо использовать диапазон. К примеру, для генерации случайного числа в диапазоне от 20 до 50 мы будем использовать конструкцию следующего вида:

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Создаём генератор с помощью надстройки AnalysisToolPack

В третьем способе не используется никакая функция генерации, а всё делается с помощью надстройки AnalysisToolPack (эта надстройка входит в состав Excel). Встроенный в табличном редакторе инструмент можно использовать как инструмент генерации, но нужно знать если вы хотите изменить набор случайных чисел, то вам нужно эту процедуру перезапустить.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

В открывшемся окне мы выбираем тип в меню «Распределение» , после указываем дополнительные параметры, которые изменяются, исходя с типа распределения. Ну и финальный шаг, это указание «Выходной интервал» , именно тот интервал где будут храниться, ваши случайные числа.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

А на этом у меня всё! Я очень надеюсь, что вопрос по созданию генератора случайных чисел я раскрыл полностью и вам всё понятно. Буду очень благодарен за оставленные комментарии, так как это показатель читаемости и вдохновляет на написание новых статей! Делитесь с друзьями прочитанным и ставьте лайк!

Не додумывай слишком много. Так ты создаешь проблемы, которых изначально не было.

Фридрих Ницше

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

Использование функции СЛЧИС

Представленная в Excel функция СЛЧИС генерирует равномерное случайное число в промежутке между 0 и 1. Другими словами, любое число от 0 до 1 имеет равную вероятность быть возвращенным этой функцией. Если вам нужны случайные числа с большими значениями, используйте простую формулу умножения. Следующая формула, например, генерирует равномерное случайное число между 0 и 1000:
=СЛЧИС()*1000 .

Чтобы ограничить случайное число целыми числами, используйте функцию ОКРУГЛ :
=ОКРУГЛ((СЛЧИС()*1000);0) .

Использование функции СЛУЧМЕЖДУ

Для генерации равномерных случайных чисел между любыми двумя числами вы можете использовать функцию СЛУЧМЕЖДУ . Следующая формула, например, генерирует случайное число между 100 и 200:
=СЛУЧМЕЖДУ(100;200) .

Использование надстройки Analysis ToolPack

Другой способ получения случайных чисел в листе состоит в использовании надстройки Analysis ToolPack (которая поставлялась вместе с Excel). Этот инструмент может генерировать неравномерные случайные числа. Они генерируются не формулами, поэтому, если вам нужен новый набор случайных чисел, необходимо перезапустить процедуру.

Выберите тип распределения в раскрывающемся списке Распределение , а затем задайте дополнительные параметры (они изменяются в зависимости от распределения). Не забудьте указать параметр Выходной интервал , в котором хранятся случайные числа.

У нас есть последовательность чисел, состоящая из практически независимых элементов, которые подчиняются заданному распределению. Как правило, равномерному распределению.

Сгенерировать случайные числа в Excel можно разными путями и способами. Рассмотрим только лучше из них.

Функция случайного числа в Excel

Выборка случайных чисел с помощью СЛЧИС

Чтобы сгенерировать случайное вещественное число в диапазоне от 1 до 5, например, применяем следующую формулу: =СЛЧИС()*(5-1)+1.

Возвращаемое случайное число распределено равномерно на интервале .

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

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

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Диапазон вертикальных значений – частота. Горизонтальных – «карманы».

Функция СЛУЧМЕЖДУ

Синтаксис функции СЛУЧМЕЖДУ – (нижняя граница; верхняя граница). Первый аргумент должен быть меньше второго. В противном случае функция выдаст ошибку. Предполагается, что границы – целые числа. Дробную часть формула отбрасывает.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Как сделать генератор случайных чисел в Excel

Сделаем генератор случайных чисел с генерацией значения из определенного диапазона. Используем формулу вида: =ИНДЕКС(A1:A10;ЦЕЛОЕ(СЛЧИС()*10)+1).

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Сделаем генератор случайных чисел в диапазоне от 0 до 100 с шагом 10.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Из списка текстовых значений нужно выбрать 2 случайных. С помощью функции СЛЧИС сопоставим текстовые значения в диапазоне А1:А7 со случайными числами.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Воспользуемся функцией ИНДЕКС для выбора двух случайных текстовых значений из исходного списка.

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Чтобы выбрать одно случайное значение из списка, применим такую формулу: =ИНДЕКС(A1:A7;СЛУЧМЕЖДУ(1;СЧЁТЗ(A1:A7))).

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

Генератор случайных чисел нормального распределения

Функции СЛЧИС и СЛУЧМЕЖДУ выдают случайные числа с единым распределением. Любое значение с одинаковой долей вероятности может попасть в нижнюю границу запрашиваемого диапазона и в верхнюю. Получается огромный разброс от целевого значения.

Нормальное распределение подразумевает близкое положение большей части сгенерированных чисел к целевому. Подкорректируем формулу СЛУЧМЕЖДУ и создадим массив данных с нормальным распределением.

Себестоимость товара Х – 100 рублей. Вся произведенная партия подчиняется нормальному распределению. Случайная переменная тоже подчиняется нормальному распределению вероятностей.

При таких условиях среднее значение диапазона – 100 рублей. Сгенерируем массив и построим график с нормальным распределением при стандартном отклонении 1,5 рубля.

Программа Excel посчитала, какие значения находятся в диапазоне вероятностей. Так как вероятность производства товара с себестоимостью 100 рублей максимальная, формула показывает значения близкие к 100 чаще, чем остальные.

Перейдем к построению графика. Сначала нужно составить таблицу с категориями. Для этого разобьем массив на периоды:

Как Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srandКак Сделать Случайные Числа в Excel в Диапазоне с Десятыми • Функция srand

На основе полученных данных сможем сформировать диаграмму с нормальным распределением. Ось значений – число переменных в промежутке, ось категорий – периоды.

[expert_bq id=»1570″]Так как вероятность производства товара с себестоимостью 100 рублей максимальная, формула показывает значения близкие к 100 чаще, чем остальные. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Чтобы доказать это, достаточно написать программу, подсчитывающую количество выпадений каждого из значений. Если выборка (количество «испытуемых») будет достаточно большой, а диапазон (разброс значений) маленьким, то мы должны увидеть, что процент выпадений того или иного значения приблизительно такой же как у других.

Псевдослучайные числа. Урок 11 курса Основы языка C

  • во-первых : мы можем для тестировки формул, заполнить нужный нам диапазон случайными числами;
  • во-вторых : для формирования вопросов различных тестов;
  • в-третьих : для любого случайно распределения заранее задач между вашими сотрудниками;
  • в-четвёртых : для симуляции разнообразнейших процессов;

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: