1 / 1 / 1
Регистрация: 20.09.2014
Сообщений: 310
1

Случайные числа в диапазоне от -m до +m

27.03.2018, 15:06. Показов 4829. Ответов 22
Метки нет (Все метки)

Всем привет. Пытаюсь сделать рандом от -m до +m(где m обычное число). Выглядит примерно так:
C++
1
2
int m=35;
ab= rand() % (2*m+1) + (-m);
Правильно ли я сделал?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2018, 15:06
Ответы с готовыми решениями:

Случайные числа в определенном диапазоне
Всем доброго времени суток. В книжке наткнулся на упражнение со случайными числами.Если коротко,то...

Случайные числа в заданном диапазоне
Подскажите как написать программу, которая генерирует последовательность из N случайных чисел в...

Записать в вектор случайные числа в заданном диапазоне
нужно записать в вектор от 10 до 15 случайных чисел от -10 до 10 сделал вот так #include...

Заменить отрицательные числа на случайные в диапазоне в двухмерном массиве
Пользователь вводит массив 3х3. Программа заменяет все отрицательные элементы на случайные числа в...

22
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
27.03.2018, 15:16 2
Андей,
C++
1
2
3
4
5
int GetRandomNumber()
{
    std::srand(std::time(nullptr) );
    return -10 + std::rand() % 20;
}
Добавлено через 7 минут
C++
1
2
3
4
5
int GetRandomNumber(int f, int d)
{
    std::srand(std::time(nullptr) );
    return f + std::rand() % (d - f + 1);
}
0
1 / 1 / 1
Регистрация: 20.09.2014
Сообщений: 310
27.03.2018, 15:17  [ТС] 3
что подразумеваете под f и d?
0
1466 / 1007 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
27.03.2018, 15:18 4
Андей, правильно.
1
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
27.03.2018, 15:18 5
Андей, от и до
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <thread>
#include <chrono>
 
int GetRandomNumber(int f, int d)
{
    std::srand(std::time(nullptr) );
    return f + std::rand() % (d - f + 1);
}
 
int main()
{
    for (std::size_t i = 0; i < 30; ++i)
    {
        std::cout << GetRandomNumber(-10, 10) << ' ';
        std::this_thread::sleep_for(std::chrono::seconds(1) );
    }
 
    return 0;
}
1
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
27.03.2018, 17:09 6
_stanislav, srand нужно вызывать только один раз.
C++
1
2
3
4
5
int GetRandomNumber(int f, int d)
{
    static int fake = (std::srand(std::time(nullptr)), 0); (void)fake;
    //...
}
2
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
27.03.2018, 18:20 7
Croessmah, правильно я понимаю твой код?
Статическая переменная служит для однократного вызова функции, после инициализируется нулем?
Непонятна вот эта конструкция (void)fake; вроде как привидение переменной к типу void
но типа void же нет, есть только тип void*? и почему это привидение не к чему не присваивается как то так fake = (void)fake;
0
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
27.03.2018, 18:28 8
Цитата Сообщение от _stanislav Посмотреть сообщение
Статическая переменная служит для однократного вызова функции, после инициализируется нулем?
угу. "Запятая" вернет 0.
Цитата Сообщение от _stanislav Посмотреть сообщение
(void)fake;
Это способ избежать предупреждения компилятора о неиспользуемой переменной.
1
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
27.03.2018, 18:34 9
Цитата Сообщение от Croessmah Посмотреть сообщение
Это способ избежать предупреждения компилятора о неиспользуемой переменной.
почему он работает если типа void нет в языке или есть?
0
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
27.03.2018, 18:57 10
Цитата Сообщение от _stanislav Посмотреть сообщение
почему он работает если типа void нет в языке или есть?
Тип void - есть. Он незавершенный.
Что касается преобразования в void:
5.2.9 Static cast
...
6. Any expression can be explicitly converted to type cv void, in which case it becomes a discarded-value expression (Clause 5).
...
2
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
28.03.2018, 07:31 11
Croessmah, а не проще написать вот так

C++
1
2
3
4
5
6
int GetRandomNumber(int f, int d)
{
    static int fake = std::srand(std::time(nullptr) );
    fake = 0;
    //...
}
или твой вариант лучше оптимизируется компилятором.

Добавлено через 22 минуты
или можно использовать вместо (void) (int)
C++
1
2
3
4
5
int GetRandomNumber(int f, int d)
{
    static int fake = (std::srand(std::time(nullptr)), 0); (int)fake;
    //...
}
0
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
28.03.2018, 15:05 12
Цитата Сообщение от _stanislav Посмотреть сообщение
static int fake = std::srand(std::time(nullptr) );
srand возвращает void, так что будет ошибка.
Цитата Сообщение от _stanislav Посмотреть сообщение
(int)fake;
Будет предупреждение, что-то типа "statement has no effect".
1
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
28.03.2018, 15:55 13
Croessmah, для чего может понадобится подобное привидение (void) кроме хака из твоего примера.
0
1466 / 1007 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
28.03.2018, 15:56 14
_stanislav, это не "хак", а вполне распространенная практика программирования.
0
"C with Classes"
1626 / 1386 / 519
Регистрация: 16.08.2014
Сообщений: 5,801
Записей в блоге: 1
28.03.2018, 17:44 15
Цитата Сообщение от QuakerRUS Посмотреть сообщение
не "хак"
не стандартный прием, покажи реально полезный пример
0
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
28.03.2018, 17:51 16
Цитата Сообщение от _stanislav Посмотреть сообщение
не стандартный прием
Стандартный.
Цитата Сообщение от _stanislav Посмотреть сообщение
покажи реально полезный пример
Вон, целый Q_UNUSED.
0
1466 / 1007 / 456
Регистрация: 30.10.2017
Сообщений: 2,793
28.03.2018, 18:20 17
Да что далеко ходить, пройтись к примеру поиском по стандартным .h файлам в VS, таким как, например, algorithm.h и т.п. Там сотни этих приведений к (void).

Добавлено через 5 минут
functional.h

C++
1
2
3
4
5
// ...
const auto& _Pat = _Data._Get_second();
_DEBUG_RANGE(_Pat.first, _Pat.second);
(void)_Pat;
// ...
0
5226 / 3198 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
28.03.2018, 18:48 18
Цитата Сообщение от _stanislav Посмотреть сообщение
покажи реально полезный пример
Более, чем реальный пример
0
Неэпический
17807 / 10579 / 2042
Регистрация: 27.09.2012
Сообщений: 26,609
Записей в блоге: 1
28.03.2018, 18:49 19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Более, чем реальный пример
Сказано же - реально полезный!
0
Форумчанин
Эксперт CЭксперт С++
8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.03.2018, 21:27 20
Kastaneda, по ссылке выше это (теперь) решается с помощью атрибута [[maybe_unused]].
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2018, 21:27
Помогаю со студенческими работами здесь

Случайные вещественные числа в диапазоне
Есть RandomRange(), но он только для целых чисел, подскажите как организовать что Random выдавал...

Сгенерировать случайные числа в диапазоне от 1 до 20
Задача такова: Нужно написать рендум чисел в диапазоне например от 1 до 20 (не имеет значения). С...

Сгенерировать случайные двоичные числа в диапазоне от a до b
Помогите написать программу, даже не знаю с какой стороны к ней подойти, вот задание: Написать...

Сгенерировать случайные действительные числа в заданном диапазоне
Сгенерировать число равномерно от 0 до 1-это у меня получается: int main() { double a = {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru