Форум программистов, компьютерный форум CyberForum.ru

Функция возвращающая случайное число - C++

Восстановить пароль Регистрация
 
Aqua77
4 / 4 / 1
Регистрация: 13.07.2015
Сообщений: 315
14.10.2015, 11:58     Функция возвращающая случайное число #1
Нужна функция Возвращающая случайное число из диапазона который я задам например от 13 до 25. Ещё важно чтобы число не повторялось дважды.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ASKMAN
9 / 9 / 2
Регистрация: 07.02.2014
Сообщений: 103
14.10.2015, 12:07     Функция возвращающая случайное число #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <ctime>
int rand_with_range(int a,int b)
{
    int rand_num=0;
    srand((unsigned) time(NULL));
    do
    {
        rand_num=rand()%b+1;
    } while (rand_num<a);
    return rand_num;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.10.2015, 12:12     Функция возвращающая случайное число #3
ASKMAN, нельзя
Цитата Сообщение от ASKMAN Посмотреть сообщение
srand((unsigned) time(NULL));
вставлять в функцию. В течение секунды этот вызов будет одинаково инициализировать датчик случайных чисел.
Соответственно последовательные вызовы Вашей функции будут давать одинаковую последовательность чисел.
И не стоит в цикле отбрасывать числа меньшее a. Вы так еще больше нарушаете равномерность распределения.
C++
1
rand_num=rand()%(b-a+1)+a;
ASKMAN
9 / 9 / 2
Регистрация: 07.02.2014
Сообщений: 103
14.10.2015, 12:17     Функция возвращающая случайное число #4
zss, я только что тоже про это подумал. Нужно
C++
1
srand((unsigned) time(NULL));
вынести в main.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.10.2015, 12:20     Функция возвращающая случайное число #5
ASKMAN,
Цитата Сообщение от Aqua77 Посмотреть сообщение
важно чтобы число не повторялось дважды.
Но даже без этого ваш код достаточно плох.
Тогда уж
C++
1
rand_num = a + rand()%(b-a);
А по теме:
Генерация массива целых случайных чисел, которые не повторяются
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.10.2015, 12:32     Функция возвращающая случайное число #6
Байт, так получится диапазон [a,b) а не [a,b]
Поэтому rand()%(b-a+1)
Barrent
 Аватар для Barrent
211 / 87 / 27
Регистрация: 04.05.2013
Сообщений: 260
Завершенные тесты: 1
14.10.2015, 12:35     Функция возвращающая случайное число #7
На плюсах проще сделать средствами stl
C++
1
2
3
4
5
6
7
8
9
10
11
int random(int min, int max) {
    static vector<int> numbers;
    if (numbers.size() == 0) {                  
        for (int i = min; i <= max; i++)
            numbers.push_back(i);
        random_shuffle(numbers.begin(), numbers.end()); //перемешивает элементы массива случайным образом
    }
    int number = numbers[numbers.size() - 1];
    numbers.pop_back();
    return number;
}
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.10.2015, 14:50     Функция возвращающая случайное число #8
Цитата Сообщение от Barrent Посмотреть сообщение
На плюсах проще сделать средствами stl
Это называется не сделать, а использовать средства. Сделано-то уже все за вас.
Мне кажется, что смысл подобных упражнений именно в том, чтобы сделать это самому минимальными средствами. Только так можно понять, что это такое.
Хотя польза от изучения и применения того, что сделано до вас, безусловно, тоже есть.
Barrent
 Аватар для Barrent
211 / 87 / 27
Регистрация: 04.05.2013
Сообщений: 260
Завершенные тесты: 1
14.10.2015, 15:10     Функция возвращающая случайное число #9
Цитата Сообщение от Байт Посмотреть сообщение
Это называется не сделать, а использовать средства. Сделано-то уже все за вас.
Отличный велик, зачем новый покупать-то?
Так и до ассемблера можно скатиться.

Добавлено через 13 минут
Вариант велосипедный
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <random>
 
using namespace std;
void Mix(vector<int>& numbers);
int random(int min, int max);
 
int main()
{
    for (int i = 0; i <= 10; i++) {
        cout << random(0, 10) << endl;
    }
 
    system("pause");
    return 0;
}
 
void Mix(vector<int>& numbers) {
    int steps = numbers.size() * numbers.size();
    int index1, index2;
    //настройка генератора
    random_device rd;
    mt19937 mersenne(rd());
    uniform_int_distribution<int> random_element(0, numbers.size() - 1);
    //перемешиваем 
    for (int i = 0; i < steps; i++) {
        index1 = random_element(mersenne);
        index2 = random_element(mersenne);
        swap(numbers[index1], numbers[index2]);
    }
}
 
int random(int min, int max) {
    static vector<int> numbers;
    if (numbers.size() == 0) {
        for (int i = min; i <= max; i++)
            numbers.push_back(i);
        Mix(numbers);
    }
    int number = numbers[numbers.size() - 1];
    numbers.pop_back();
    return number;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2015, 15:14     Функция возвращающая случайное число
Еще ссылки по теме:

C++ Функция возвращающая число с обратным порядком цифр
C++ Функция, возвращающая vector
Функция, возвращающая массив C++

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

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
14.10.2015, 15:14     Функция возвращающая случайное число #10
Цитата Сообщение от Barrent Посмотреть сообщение
Отличный велик,
Возразить нечего. Но иногда велик покупают не только для того, чтобы из пункта А доехать в пункт Б, но чтобы и ножки размять. Для здоровья типа. А тут - на кнопочку нажал - и тама. Так икроножные мышцы могут атрофироваться.
Плюс вопрос цены. Не в смысле твердой валюты, а в смысле затраченного времени на освоение всех этих замечательных возможностей. И мотивации. Сделав несколько кругов на своем стареньком велике, уже легче понять, зачем эти замечательные возможности STL нужны.
Yandex
Объявления
14.10.2015, 15:14     Функция возвращающая случайное число
Ответ Создать тему
Опции темы

Текущее время: 03:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru