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

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

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

Студворк — интернет-сервис помощи студентам
Возник довольно глупый вопрос,как указать диапазон генерации случайных чисел в C++...
int a=random(10); - тут генерируются числа от 1 до 9, а как сделать к примеру генерацию чисел от
[-15,20]?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2010, 18:13
Ответы с готовыми решениями:

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

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

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

26
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
10.06.2010, 18:22
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
А для простоты можно и функцию написать:
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  [ТС]
хмм, не догнал, как можно это сделать, что бы диапазон был от -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
rand()%(разница между границами+1)+левая граница
C++
1
2
// если а-левая граница, b-правая, то:
    rand()%(b-a+1) + a;
11
2 / 2 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 14:56
как задать диапазон от 5 млрд до 6 допустим.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
18.07.2010, 15:07
C++
1
rand ()%4999999995+6;
0
2 / 2 / 0
Регистрация: 18.07.2010
Сообщений: 3
18.07.2010, 15:10
Цитата Сообщение от Ravnodushie Посмотреть сообщение
как задать диапазон от 5 млрд до 6 млрд допустим.
я немного недописал
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 15:11
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
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ravnodushie,
C++
1
2
3
4
// Возвращает псевдослучайное число из диапазона [min, max)
int Random(int min, int max) {
  return min + rand() % (max - min);
}
я начинающий, и мне надо забить массив числами рандомными, по заданию от 5млрд до 6 млрд. я так понимаю ты предлагаешь написать собственную функцию? не очень представляю код
2
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:34
Цитата Сообщение от Ravnodushie Посмотреть сообщение
я так понимаю ты предлагаешь написать собственную функцию?
Её за вас уже написали.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 15:35
Цитата Сообщение от 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
Прошу прощения, показалось что нужно от 6 до 5 млрд.

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

Добавлено через 12 минут
Цитата Сообщение от Volodya Посмотреть сообщение
скобки будут обе круглые у диапазона
извините меня, я свалял дурака
1
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
19.07.2010, 20:11
Цитата Сообщение от neske Посмотреть сообщение
rand()%1000000001+5000000000;
Насколько помню, rand генерирует числа от 0 до 2^15 и взятие остатка от деления никак не увеличит этот диапазон
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
20.07.2010, 00:49
как вариант через строку:
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;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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Эксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
20.07.2010, 01:53
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);
}
Code
1
2
3
4
5
6
7
8
9
10
11
C:\cpp\numbers>5_milliardov.exe
5076282251
5478726107
5685892726
5540680353
5398806421
5724081878
5298314193
5014421675
5718105293
5310820811
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2010, 14:40
easybudda, надо int64_t использовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2010, 14:40
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru