Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/1344: Рейтинг темы: голосов - 1344, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
1

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

10.06.2010, 18:13. Показов 281925. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возник довольно глупый вопрос,как указать диапазон генерации случайных чисел в C++...
int a=random(10); - тут генерируются числа от 1 до 9, а как сделать к примеру генерацию чисел от
[-15,20]?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2010, 18:13
Ответы с готовыми решениями:

Как в rand указать двойной диапазон генерации?
Как в rand указать двойной диапазон генерации? Например чтобы числа генерировались от 5 до 10 и...

Как задать диапазон случайных чисел?
Мне дана формула для диапазона случайных чисел - 10i + 20, где i мой вариант. Так вот, мой вариант...

Функция генерации случайных чисел
Здравствуйте, возник такой вопрос: мне нужно определить генерацию случайных чисел в функцию и...

Средства для генерации случайных чисел
В Си было удобно подключить рандомные числа. через randomize(); a=random(10)-5; В Си++ кроме...

26
425 / 229 / 87
Регистрация: 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
3
#define книжный_червь Я
185 / 96 / 21
Регистрация: 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);
}
1
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
10.06.2010, 18:41  [ТС] 4
хмм, не догнал, как можно это сделать, что бы диапазон был от -15 до 20, тоесть, не от одного отрицательного числа и до другого такогоже, а для конкретного интервала. В с# это делалось просто,
random rr= new Random(); a=rr.Next(-15,20);, вот и интересует, как это можно сделать в c++, да притом ещё в визуальной среде..
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
10.06.2010, 18:53 5
rand()%(разница между границами+1)+левая граница
C++
1
2
// если а-левая граница, b-правая, то:
    rand()%(b-a+1) + a;
11
2 / 2 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 14:56 6
как задать диапазон от 5 млрд до 6 допустим.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
18.07.2010, 15:07 7
C++
1
rand ()%4999999995+6;
0
2 / 2 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 15:10 8
Цитата Сообщение от Ravnodushie Посмотреть сообщение
как задать диапазон от 5 млрд до 6 млрд допустим.
я немного недописал
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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);
}
6
2 / 2 / 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 млрд. я так понимаю ты предлагаешь написать собственную функцию? не очень представляю код
2
Эксперт С++
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:34 11
Цитата Сообщение от Ravnodushie Посмотреть сообщение
я так понимаю ты предлагаешь написать собственную функцию?
Её за вас уже написали.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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);
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
18.07.2010, 15:45 13
Прошу прощения, показалось что нужно от 6 до 5 млрд.

:
C++
1
rand()%1000000001+5000000000;
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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.
1
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
19.07.2010, 15:21 15
Ну это очевидно.
Нужно использовать другие генераторы, а не стандартный.
0
3 / 3 / 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 Посмотреть сообщение
скобки будут обе круглые у диапазона
извините меня, я свалял дурака
1
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
19.07.2010, 20:11 17
Цитата Сообщение от neske Посмотреть сообщение
rand()%1000000001+5000000000;
Насколько помню, rand генерирует числа от 0 до 2^15 и взятие остатка от деления никак не увеличит этот диапазон
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
1
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2010, 14:40 20
easybudda, надо int64_t использовать
0
20.07.2010, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2010, 14:40
Помогаю со студенческими работами здесь

Пару вопрос по генерации случайных чисел.
Здраствуйте уважаемые мастера с++. 1). Мне надо в конструкторе инициализировать для поля...

Диапазон случайных чисел
Написал программку-угадайку случайного числа. Но возник вопрос. Использую функцию rand() и она все...

Ошибка при генерации случайных чисел
добрый день,уважаемые коллеги! У меня возникла следующая проблема. Мне нужно задать распределение...

Как указать диапазон случайных чисел?
Как указать диапазон случайных чисел?

Как задать границы генерации случайных чисел?
Добрый день. Собственно, вопрос состоит в том, чтобы создать матрицу A заполненную случайными...

Как задать диапазон для случайных чисел от 1,9 до 99,9?
Как указать такой диапазон в Random?


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

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