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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 149, средняя оценка - 4.63
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
#1

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

10.06.2010, 18:13. Просмотров 23281. Ответов 25
Метки нет (Все метки)

Возник довольно глупый вопрос,как указать диапазон генерации случайных чисел в 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++ Диапазон случайных чисел
Формула для генерации случайных чисел заданного диапазона C++
Реализовать функцию (или класс) генерации случайных чисел, используя средства из заголовочника random (C++11) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
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
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,902
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
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,902
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++
2300 / 1670 / 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
Эксперт С++
3792 / 1774 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:34     Как указать диапазон генерации случайных чисел? #11
Цитата Сообщение от Ravnodushie Посмотреть сообщение
я так понимаю ты предлагаешь написать собственную функцию?
Её за вас уже написали.
CyBOSSeR
Эксперт C++
2300 / 1670 / 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
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,902
18.07.2010, 15:45     Как указать диапазон генерации случайных чисел? #13
Прошу прощения, показалось что нужно от 6 до 5 млрд.

:
C++
1
rand()%1000000001+5000000000;
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
7156 / 3296 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
4129 / 1378 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.07.2010, 20:11     Как указать диапазон генерации случайных чисел? #17
Цитата Сообщение от neske Посмотреть сообщение
rand()%1000000001+5000000000;
Насколько помню, rand генерирует числа от 0 до 2^15 и взятие остатка от деления никак не увеличит этот диапазон
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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++ Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел
Указать диапазон, в котором находится число C++
C++ Как объявить переменную, как диапазон чисел
C++ Как создать генератор случайных чисел
C++ Как сделать генератор случайных чисел?

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru