Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 14.01.2019
Сообщений: 22
1

Как написать функцию генерирующую случайное число от 1 до 100 без использования rand()?

14.01.2019, 00:32. Показов 2376. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать функцию, генерирующую случайное число от 1 до 100, без использования стандартной функции rand()
выполнить на языке си
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2019, 00:32
Ответы с готовыми решениями:

Как написать функцию, которая выдает случайное число?
Решил написать функцию,которая выдает случайное число.А как это сделать понятие не имею!Помогите......

Написать программу "Угадай число от 0 до 100" без использования глобальных переменных
Задача передо мной стояла следующая: написать программу "Угадай число от 0 до 100" без...

Разработать программу, генерирующую случайное число по аналогу игральной кости
Задание: Разработать программу генерирующее случайное число по аналогу игральной кости. Программа...

Написать функцию, которая возвращает целое случайное число из диапазона, который передается параметрами в функцию.
<html> <head> <title>Случайные числа </title> <script type="text/javascript">...

4
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
16.01.2019, 06:59 2
Как вариант, можно использовать Линейный конгруэнтный генератор. Магические числа в примере ниже взяты из Microsoft Visual/Quick C/C++ (есть в таблице на Википедии).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <time.h>
 
unsigned int getRandom() {
    static int is_init = 0;
    static unsigned long long x = 0;
    
    if (!is_init) {
        x = time(NULL);
        is_init = 1;
    }
    
    x = (0x343FDULL * x + 0x269EC3ULL) % 0xFFFFFFFFULL;
    return ((x & 0x3FFF8000) >> 15) % 100 + 1;
}
 
int main(void) {
    int i;
    for (i = 0; i < 10; i++) {
        printf("%d\n", getRandom());
    }
 
    return 0;
}
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
16.01.2019, 13:32 3
метод "середины квадрата"
1
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
16.01.2019, 13:47 4
Заметил недочет в своём решении. Модуль должен быть https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{32}, а не https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{32}-1. Так же можно заменить тип x и тип чисел на беззнаковое 32-битное целое, вычисления будут сразу по этому модулю.

Исправленный вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
unsigned int getRandom() {
    static int is_init = 0;
    static unsigned long long x = 0;
    
    if (!is_init) {
        x = time(NULL);
        is_init = 1;
    }
    
    x = (0x343FDULL * x + 0x269EC3ULL) % 0x100000000ULL;
    return ((x & 0x3FFF8000ULL) >> 15) % 100 + 1;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,763
16.01.2019, 17:10 5
Толстый троллинг
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdint.h>
 
int main(void) {
    FILE * f;
    uint8_t n;
 
    if ( ( f = fopen("/dev/urandom", "rb") ) == NULL )
        return 1;
    
    if ( fread(&n, sizeof(n), 1, f) != 1 )
        return 1;
    
    if ( fclose(f) )
        return 1;
 
    n = n % 100 + 1;
    printf("%hhu\n", n);
 
    return 0;
}
0
16.01.2019, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2019, 17:10
Помогаю со студенческими работами здесь

Написать функцию, возвращающую случайное число от 2 до 6
Покажите как будет выглядеть программа подставляющая числа от 2до6 (рандом) в формулу ПR(5...

Как в Yii выполнить запрос ORDER BY RAND LIMIT 5 без использования CDbCriteria?
Добрый день. Нужно достать несколько записей из таблицы в случайном порядке. При этом желательно...

RAND(), случайное число в заданных пределах
Здрасте :) Подскажите как сгенерировать случайное число в заданных пределах. Например: SELECT...

Написать функцию, которая генерирует случайное число в диапазоне от 0 до A
Я самое наглое , ленивое и бессовестное чудовище)) но тем не менее Напишите функцию, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru