Различия

Показаны различия между двумя версиями страницы.


rand [2025/07/06 12:39] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== rand генератор случайных чисел ======
  
 +{{ ::rand_cpp.jpg?nolink&600 |}}
 +В языке С существует возможность сгенерировать случайное число. Для этой операции используется функция под названием **rand()**. Эта функция находиться в библиотечном файле - **stdlib.h**, следовательно для ее работы необходимо этот файл подключить с помощью диррективы #include. На место вызова rand() в программе, подставится случайное число в диапазоне от 0 до 32767.
 +
 +Компьютер, в отличии от живого существа, не способен на ассоциативное мышление, поэтому функция rand() не получает число из воздуха, а работает, используя в качестве начальной точки – точку определенную при написании алгоритма генератора случайного числа, то есть некое постоянное число. Другими словами, опираясь на эту точку, при разных вызовах программы эта функция генерирует одно и то же число. Из этого можно сделать вывод: Для того, чтобы rand() при разных вызовах программы выдавал разные числа необходимо изменить начальную точку генерации.
 +====== Использование функции srand ======
 +
 +Местоположение функции **srand** - библиотека stdlib.h. 
 +
 +Функция srand устанавливает начальную точку для генерации случайных чисел и обладает следующим синтаксисом: 
 +<file>
 +void srand(unsigned int start)
 +</file>
 +Параметр start, который принимает функция, и есть - новая точка для генерации случайного числа.
 +  * **Использование функции [[time]]**.
 +Местоположение функции - библиотека time.h. 
 +
 +У функции time есть несколько предназначений и подробно разбирать мы ее не будем. Возьмем только то, что необходимо нам для работы. А, именно, если функцию time вызвать с параметром NULL, то на место своего вызова в программе, эта функция вернет количество миллисекунд прошедших с 1 января 1970 года. Согласитесь, что эта величина каждый раз будет разной. А, это - как раз то, что мы искали. "Соберем" полученную информацию в единое целое и получится: 
 +<file>
 +srand(time(NULL));
 +</file>
 +Функция srand устанавливает в качестве стартовой точки число, представляющее собой количество, миллисекунд прошедших с 1 января 1970 года. Попробуем: 
 +<file>
 +#include<iostream>
 +#include<stdlib.h>// в этом файле содержатся функции rand и srand
 +#include<time.h>// в этом файле содержится функция time
 +
 +using namespace std;
 +void main()
 +{
 + srand(time(NULL));
 + int a;
 + //генерация случайного числа и запись его в переменную a
 + a=rand();
 + cout<<a<<"\n";
 +}
 +</file>
 +
 +Набрав пример, вы, конечно, убедились, что теперь при разных запусках программы генерируются разные числа, но и этом возможности генератора не исчерпываются.
 +====== Установка диапазона для генератора ======
 +Числа, которые получаются путем вызова функции rand, находятся в диапазоне от 0 до 32767. Но, ведь нам не всегда требуется такой масштабный разброс данных. Что делать, если необходимо генерировать числа от 0 до 10 или от 0 до 100 и так далее?! На помощь, в таких случаях, приходит старое, доброе - [[%-деление по модулю]]. 
 +
 +Возьмем для примера произвольное число - 23. Согласитесь, что какое бы число вы не разделили на 23 по модулю, вы получите либо 0 (если остатка нет), либо остаток в диапазоне от 1 до 22. Этим свойством мы и воспользуемся, разделив сгенерированное случайное число по модулю: 
 +<file>
 +int a=rand()%23;
 +</file>
 +На основании этого правила можно вывести формулу:
 +<file>
 +ЧИСЛО В ДИАПАЗОНЕ ОТ НУЛЯ ДО Х:
 +
 + rand() % X
 +</file>
 +Но, диапазон не всегда начинается с нуля. Пусть нам необходим диапазон от 11 до 16. Все просто. Необходимо сгенерировать числа от 0 до 5 (разница между 16 и 11), а потом "сдвинуть" полученный результат на 11 единиц.
 +
 +<file>
 +int a=rand()%5+11;
 +</file>
 +И, на основании уже модифицированного правила можно вывести формулу:
 +<file>
 +ЧИСЛО В ДИАПАЗОНЕ ОТ Y ДО Х:
 +
 + rand() % (X-Y) + Y
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!