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

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

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

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

10.06.2010, 18:13. Просмотров 23567. Ответов 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++
Мне дана формула для диапазона случайных чисел - 10i + 20, где i мой вариант. Так вот, мой вариант 20, но как задать диапазон. Пробывал...

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

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

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

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

Формула для генерации случайных чисел заданного диапазона - C++
srand(time(NULL)); int massize = 3; int mas; for (int i = 0; i < massize; i++) { for (int b = 0; b < massize; b++) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Эксперт С++
4934 / 2514 / 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
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,599
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
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2010, 14:40 #20
easybudda, надо int64_t использовать
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,599
20.07.2010, 15:00 #21
Цитата Сообщение от odip Посмотреть сообщение
надо int64_t использовать
а в мелкостудии/борланд-турбо-шмурбо-цэ будет работать? double - всё-таки стандартный тип данных, обеспечивающий точность как-раз в 10 десятизначных цифр.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.07.2010, 15:18 #22
Цитата Сообщение от easybudda Посмотреть сообщение
мелкостудии

Не по теме:

В моем присутствии прошу не выражатся


В MSVS работать будет. А вот насчет BCB и ему подобных не уверен.
MikeSoft
Эксперт С++
3793 / 1775 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
20.07.2010, 15:31 #23
easybudda, и в Билдере будет работать.
В билдере, к тому же, есть тип данных __int64
По сути, обычная обёртка.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
21.07.2010, 07:55 #24
а в мелкостудии/борланд-турбо-шмурбо-цэ будет работать? double - всё-таки стандартный тип данных, обеспечивающий точность как-раз в 10 десятизначных цифр.
int64_t - стандартный тип
Устаревшие компиляторы, не поддерживающие новые стандарты - эти проблемы тех, кто их использует.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,599
21.07.2010, 12:15 #25
ну тогда вот:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
 
int64_t long_random(void){
    return (int64_t)(rand() % 1001 + 5000) * 1000000 + (int64_t)(rand() % 1000) * 1000 + (int64_t)(rand() % 1000);
}
 
int main(void){
    int i;
 
    srand(time(NULL));
 
    for ( i = 0; i < 10; ++i )
        printf("%lld\n", long_random());
 
    exit(EXIT_SUCCESS);
}
maxteam
2 / 2 / 0
Регистрация: 04.07.2010
Сообщений: 66
21.09.2010, 17:26 #26
вот я нуб))))))))

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
int random_beetwen(int a,int b)
{
int x;
randomize();
if(a<b)
  {
  int temp;
  randomize();
  x=abs(random(b)-random(a));
 
  if(x<=(b-a))
    {
    randomize();
    if(temp=random(2)) x=b-x;
    else x+=a;
    }
  if(x>(b-a)&&x<a)
    {
    if(a==0) a+=1;
    if(x<=b/a) x*=2;
    else
      {
      x=a-x;
      randomize();
      if((temp=random(2))) x=b-x;
      else x+=a;
      }
    }
    return x;
  }
  else
  {
  puts("incorect range...");
  return 0;
  }
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2010, 17:26
Привет! Вот еще темы с ответами:

Реализовать функцию (или класс) генерации случайных чисел, используя средства из заголовочника random (C++11) - C++
Хотел написать небольшую обертку над stl-вским рандомом. Уж больно он сложный для использования. Застрял на такой простой вещи: class...

Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел - C++
Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел типа float, что не больше...

Указать диапазон, в котором находится число - C++
Ошибок при построении не выдает, но всё-таки работает некорректно. Когда я ввожу число, которое больше 6000, она мне выдает сообщение о...

Как объявить переменную, как диапазон чисел - C++
Даны 2 числа A и B, оба трёхзначные (от 100 до 999) Как их объявить в начале? int A,B; Ведь A и B могут быть числами (-2 147...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.09.2010, 17:26
Ответ Создать тему
Опции темы

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