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

Как указать диапазон генерации случайных чисел? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 149, средняя оценка - 4.63
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
10.06.2010, 18:13     Как указать диапазон генерации случайных чисел? #1
Возник довольно глупый вопрос,как указать диапазон генерации случайных чисел в C++...
int a=random(10); - тут генерируются числа от 1 до 9, а как сделать к примеру генерацию чисел от
[-15,20]?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2010, 18:13     Как указать диапазон генерации случайных чисел?
Посмотрите здесь:

C++ Диапазон случайных чисел
Как использовать генератор случайных чисел? C++
Пару вопрос по генерации случайных чисел. C++
C++ Функция генерации случайных чисел
C++ Как объявить переменную, как диапазон чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
10.06.2010, 18:22     Как указать диапазон генерации случайных чисел? #2
Apmyp /7,
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <ctime>
 
int main()
{
    srand((unsigned int)time(NULL));
    int a = rand() % 101 - 50;
    std::cout << a << std::endl;
    return 0;
}
от -50 до 50 попадёт в a
][акер
#define книжный_червь Я
 Аватар для ][акер
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
10.06.2010, 18:39     Как указать диапазон генерации случайных чисел? #3
А для простоты можно и функцию написать:
C++
1
2
3
4
5
6
int random(int a,int b)
{
    srand(time(NULL));
    if (a > 0) return a + rand() % (b - a);
    else return a + rand() % (abs(a) + b);
}
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
10.06.2010, 18:41  [ТС]     Как указать диапазон генерации случайных чисел? #4
хмм, не догнал, как можно это сделать, что бы диапазон был от -15 до 20, тоесть, не от одного отрицательного числа и до другого такогоже, а для конкретного интервала. В с# это делалось просто,
random rr= new Random(); a=rr.Next(-15,20);, вот и интересует, как это можно сделать в c++, да притом ещё в визуальной среде..
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
10.06.2010, 18:53     Как указать диапазон генерации случайных чисел? #5
rand()%(разница между границами+1)+левая граница
C++
1
2
// если а-левая граница, b-правая, то:
    rand()%(b-a+1) + a;
Ravnodushie
0 / 0 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 14:56     Как указать диапазон генерации случайных чисел? #6
как задать диапазон от 5 млрд до 6 допустим.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
18.07.2010, 15:07     Как указать диапазон генерации случайных чисел? #7
C++
1
rand ()%4999999995+6;
Ravnodushie
0 / 0 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 15:10     Как указать диапазон генерации случайных чисел? #8
Цитата Сообщение от Ravnodushie Посмотреть сообщение
как задать диапазон от 5 млрд до 6 млрд допустим.
я немного недописал
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 15:11     Как указать диапазон генерации случайных чисел? #9
Ravnodushie,
C++
1
2
3
4
// Возвращает псевдослучайное число из диапазона [min, max)
int Random(int min, int max) {
  return min + rand() % (max - min);
}
Ravnodushie
0 / 0 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 15:24     Как указать диапазон генерации случайных чисел? #10
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ravnodushie,
C++
1
2
3
4
// Возвращает псевдослучайное число из диапазона [min, max)
int Random(int min, int max) {
  return min + rand() % (max - min);
}
я начинающий, и мне надо забить массив числами рандомными, по заданию от 5млрд до 6 млрд. я так понимаю ты предлагаешь написать собственную функцию? не очень представляю код
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:34     Как указать диапазон генерации случайных чисел? #11
Цитата Сообщение от Ravnodushie Посмотреть сообщение
я так понимаю ты предлагаешь написать собственную функцию?
Её за вас уже написали.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 15:35     Как указать диапазон генерации случайных чисел? #12
Цитата Сообщение от Ravnodushie Посмотреть сообщение
не очень представляю код
arr - массив, size - его размер:
C++
1
2
for (int i = 0; i < size; ++i)
  arr[i] = Random(5000000, 6000001);
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
18.07.2010, 15:45     Как указать диапазон генерации случайных чисел? #13
Прошу прощения, показалось что нужно от 6 до 5 млрд.

:
C++
1
rand()%1000000001+5000000000;
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.07.2010, 08:04     Как указать диапазон генерации случайных чисел? #14
Цитата Сообщение от neske Посмотреть сообщение
rand()%1000000001+5000000000;
при учете, что:
C
1
2
/* Maximum value that can be returned by the rand function. */
#define RAND_MAX 0x7fff
максимальным из этой формулы будет значение 5000032767.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
19.07.2010, 15:21     Как указать диапазон генерации случайных чисел? #15
Ну это очевидно.
Нужно использовать другие генераторы, а не стандартный.
Volodya
2 / 2 / 1
Регистрация: 25.10.2009
Сообщений: 8
19.07.2010, 20:06     Как указать диапазон генерации случайных чисел? #16
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ravnodushie,
C++
1
2
3
4
// Возвращает псевдослучайное число из диапазона [min, max)
int Random(int min, int max) {
  return min + rand() % (max - min);
}
скобки будут обе круглые у диапазона

Добавлено через 12 минут
Цитата Сообщение от Volodya Посмотреть сообщение
скобки будут обе круглые у диапазона
извините меня, я свалял дурака
HIMen
 Аватар для HIMen
4105 / 1354 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.07.2010, 20:11     Как указать диапазон генерации случайных чисел? #17
Цитата Сообщение от neske Посмотреть сообщение
rand()%1000000001+5000000000;
Насколько помню, rand генерирует числа от 0 до 2^15 и взятие остатка от деления никак не увеличит этот диапазон
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.07.2010, 00:49     Как указать диапазон генерации случайных чисел? #18
как вариант через строку:
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
46
47
48
49
50
#include <cstdlib>
#include <iostream>
 
int randint(int max) 
{ 
    return int(max * rand() / (RAND_MAX + 1.0)); 
}
 
int randint(int min, int max) 
{ 
    if (min > max) 
        return max+int((min-max+1)*rand()/(RAND_MAX+1.0)); 
    else 
        return min+int((max-min+1)*rand()/(RAND_MAX+1.0)); 
}
 
char * randstr(char * str, unsigned long length) 
{ 
    unsigned long i = 0;
 
    if (!str || !length) 
        return NULL; 
 
    str[0] = (char)randint((int)'5',(int)'6'); 
    for (i = 1; i < length - 1; ++i) 
        str[i] = (char)randint((int)'0',(int)'9'); 
 
    str[i] = '\0'; 
 
    return str; 
}
 
#define ARRSIZ 15
 
int main()
{
    char BUF[BUFSIZ];
    long ARR[ARRSIZ];
 
    int i = 0;
 
    for(i = 0; i < ARRSIZ; ++i)
        ARR[i] = atoi(randstr(BUF, 9));
 
    for(i = 0; i < ARRSIZ; ++i)
        printf("%d\n", ARR[i]);
 
    system("pause");
    return 0;
}
Код
55185438
67187530
53119410
53556616
53067853
67995142
62789963
52803060
59225687
52744971
63765312
58597316
50651919
63409618
65118415
Добавлено через 6 минут
прошу прощения, ошибочка вышла. кажется тут проблема в том, что даже в unsigned long максимально влезет 4,294,967,295.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.07.2010, 01:53     Как указать диапазон генерации случайных чисел? #19
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
double big_random(void){
    return (double)(rand() % 1001 + 5000) * 1000000.0 + (double)(rand() % 1000) * 1000.0 + (double)(rand() % 1000);
}
 
int main(void){
    int i;
 
    srand(time(NULL));
 
    for ( i = 0; i < 10; ++i )
        printf("%.0f\n", big_random());
 
    exit(EXIT_SUCCESS);
}
Код
C:\cpp\numbers>5_milliardov.exe
5076282251
5478726107
5685892726
5540680353
5398806421
5724081878
5298314193
5014421675
5718105293
5310820811
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2010, 14:40     Как указать диапазон генерации случайных чисел?
Еще ссылки по теме:

Генератор случайных чисел. Как прикрепить? C++
Указать диапазон, в котором находится число C++
Формула для генерации случайных чисел заданного диапазона C++

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
20.07.2010, 14:40     Как указать диапазон генерации случайных чисел? #20
easybudda, надо int64_t использовать
Yandex
Объявления
20.07.2010, 14:40     Как указать диапазон генерации случайных чисел?
Ответ Создать тему
Опции темы

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