Случайные числа в Си

12 сентября 2018 - Администратор

Часто в программах, например играх,  необходимо получить случайное число. В Си используется функция для определения натурального  случайного числа в диапазоне от 0 до 32767.

rand();

Чтобы использовать эту функцию необходимо указать заголовочный файл в начале программы stdlib.h

Чтобы получить случайное число  в диапазоне от 0 до N-1 используется выражение

rand() % N;

Пример программы 18. Вывод  последовательности случайных чисел в  заданном диапазоне.

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

main()

{

int n;

int m;

int i;

int ran;

printf ("Введите границу диапазона\n ");

scanf ("%d", &n);

printf ("Введите сколько нужно вывести чисел\n ");

scanf ("%d", &m);

for (i=1; i<=m; i++)

{

   ran=rand()%n;//  задаем случайное число в диапазоне от 0 до n

   printf ("%d ", ran);

}

getch();

}

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

Чтобы вызвать системное время компьютера (например секунды) используется заголовочный файл time.h  Объявить его в начале программы  #include <time.h>

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

// функция,  выдающая системное время секунды

int sec()

{

time_t t;

struct tm *t_m;

t=time(NULL);

t_m=localtime(&t);

return t_m->tm_sec;

}

Далее в программе, где нам нужно задать случайное число мы используем  выражение

((rand()+sec())%N

Пример программы 19. Программа имитирует подбрасывание монетки Орел Решка.

#include <graphics.h>

#include <conio.h>

#include <time.h>

// функция выдающая системное время секунды

int sec()

{

time_t t;

struct tm *t_m;

t=time(NULL);

t_m=localtime(&t);

return t_m->tm_sec;

}

main()

{

int r;//  выбор компьютера

int ans; // ответ на вопрос о продолжении игры

ans=1;

// игра продолжается пока ответ на продолжении игры  1

while(ans==1)

{

r=(rand()+sec()) % 2; // определяем  случайное число в диапазоне от 0 до 1

printf("%d ", r);

if (r==0) {printf("Орел \n");}

if (r==1) {printf("Решка\n ");}

printf("Сыграть еще раз? 1 - Да 2 - Нет\n ");

scanf("%d", &ans);

}

getch();

}

   Вернуться к содержанию                   Перейти к следующему уроку Процедуры и функции в Си.

Комментарии (0)

Нет комментариев. Ваш будет первым!