Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
G_Man002
1 / 1 / 1
Регистрация: 24.02.2015
Сообщений: 206
1

Формула для генерации случайных чисел заданного диапазона

06.01.2016, 14:24. Просмотров 665. Ответов 9
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
    
srand(time(NULL));
int massize = 3;
int mas[massize][massize];
for (int i = 0; i < massize; i++)
    {
        for (int b = 0; b < massize; b++)
        {
            mas[i][b] = 10 + rand() % 100;
        }
cout << mas[0][1] << endl;
    }
Должны генерироваться числа от 10 до 100,но генерируются от 10 до 110.Почему так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2016, 14:24
Ответы с готовыми решениями:

Из заданного диапазона выбрать 5 случайных чисел
Начальная версия: Задача такая: надо из задонова диапозона (допустим от1 до...

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

Реализовать алгоритм средних квадратов для генерации случайных чисел
Помогите написать программу: &quot;Реализовать алгоритм средних квадратов для...

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

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

9
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
06.01.2016, 14:26 2
Цитата Сообщение от G_Man002 Посмотреть сообщение
генерируются от 10 до 110.Почему так?
C++
1
mas[i][b] = 10 + rand() % 90;
по чудным свойствам деления по модулю у нас тут rand() % 100; может получится диапазон чисел от 0 до 100 да плюс еще 10, в итоге от 10 до 110

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using namespace std;
 
int main()
{
    for(int i=0;i<=200;++i)
        cout<<i%100<<endl;
 
system("PAUSE");
return 0;
}
0
G_Man002
1 / 1 / 1
Регистрация: 24.02.2015
Сообщений: 206
06.01.2016, 14:35  [ТС] 3
по чудным свойствам деления по модулю у нас тут rand() % 100; может получится диапазон чисел от 0 до 100 да плюс еще 10, в итоге от 10 до 110
Но если написать 1 + rand() % 3; ,то будет от 1 до 3,а не 1 до 4.
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
06.01.2016, 14:38 4
Цитата Сообщение от G_Man002 Посмотреть сообщение
то будет от 1 до 3
так и по формуле
Цитата Сообщение от _Valera_ Посмотреть сообщение
10 + rand() % 90;
будет от 10 до 99, а не до 100
1
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
06.01.2016, 14:48 5
Цитата Сообщение от zss Посмотреть сообщение
будет от 10 до 99, а не до 100
а я и не говорил что включительно) хотя верно.
0
G_Man002
1 / 1 / 1
Регистрация: 24.02.2015
Сообщений: 206
06.01.2016, 14:52  [ТС] 6
Цитата Сообщение от zss Посмотреть сообщение
будет от 10 до 99, а не до 100
11 + rand() % 100 будет от 11,получается сделать от 10 до 100 нельзя?
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
06.01.2016, 14:58 7
C++
1
10+rand()%91
Кстати, универсальная формула для действительных чисел от xmin до xmax
C++
1
(double)rand()/RAD_MAX*(xmax-xmin)+xmin
0
G_Man002
1 / 1 / 1
Регистрация: 24.02.2015
Сообщений: 206
06.01.2016, 15:02  [ТС] 8
C++
1
10+rand()%91
только об этом хотел написать,как-то некорректно функция rand() работает,уже 2 раза встречал странные моменты.
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
06.01.2016, 15:29 9
Цитата Сообщение от G_Man002 Посмотреть сообщение
странные моменты
Странный момент тут один - нарушается равномерность распределения из-за операции получения остатка.
Если равномерность действительно важна, то используйте
C++
1
(int)((double)rand()/RAD_MAX*(xmax-xmin))+xmin
0
GbaLog-
Любитель чаепитий
3165 / 1471 / 465
Регистрация: 24.08.2014
Сообщений: 5,204
Записей в блоге: 1
Завершенные тесты: 2
06.01.2016, 16:10 10
А можно ещё С++11 воспользоваться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <random>
#include <ctime>
using namespace std;
...
int main() {
    mt19937 gen( time( nulltpr ) );
    uniform_int_distribution<int> dist( 10, 100 );
    ...
    int massize = 3;
    mas[massize][massize];
    for (int i = 0; i < massize; i++)
    {
        for (int b = 0; b < massize; b++)
        {
            mas[i][b] = dist( gen );
        }
    cout << mas[0][1] << endl;
    }
}
0
06.01.2016, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2016, 16:10

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

Избавиться от первого элемента при генерации случайных чисел
Есть программа, которая генерирует случайные числа для определения вероятности...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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